61 lines (53 sloc) 2.22 KB
| package common.fundament.fundament; | |
| /* | |
| * ◎ 클래스 멤버와 인스턴스 멤버간의 참조와 호출 | |
| * | |
| * - 같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출이 가능하다. 단, 클래스 멤버가 | |
| * 인스턴스 멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스를 생성해야 한다. | |
| * 그 이유는 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 | |
| * 않을수도 있기 때문이다. | |
| * | |
| * | |
| * - 인스턴스 멤버(인스턴스변수와 인스턴스메서드)는 반드시 객체를 생성한 후에만 참조 또는 호출이 가능하기 때문에 | |
| * 클래스 멤버가 인스턴스멤버를 참조, 호출하기 위해서는 객체를 생성하여야 한다. | |
| * 하지만, 인스턴스멤버간의 호출에는 아무런 문제가 없다. 하나의 인스턴스멤버가 존재한다는 것은 인스턴스가 이미 생성되어 | |
| * 있다는 것을 의미하며, 다른 인스턴스 멤버들도 모두 존재하기 때문이다. | |
| * | |
| * */ | |
| public class MemberCall { | |
| int iv = 10; //인스턴스 변수 | |
| static int cv = 20; // 클래스 변수 | |
| int iv2 = cv; | |
| // static int cv2 = iv; //에러, 클래스 변수는 인스턴스 변수를 사용할 수 없음 | |
| static int cv2 = new MemberCall().iv; // 인스턴스를 생성해야 사용 가능하다. | |
| static void staticMethod(){ | |
| System.out.println(cv); | |
| // System.out.println(iv); //에러 .. 클래스메소드에서는 인스턴스변수를 사용 불가 | |
| MemberCall mc = new MemberCall(); | |
| System.out.println(mc.iv); // 객체를 생성한 후에 인스턴스변수의 참조가 가능 | |
| } | |
| void instanceMethod(){ | |
| System.out.println(iv); //인스턴스 메소드에서는 바로 인스턴스 메소드 사용 가능. | |
| System.out.println(cv); | |
| } | |
| static void staticMethod2(){ | |
| staticMethod(); | |
| // instanceMethod(); //에러, 클래스 메소드에서는 인스턴스 메소드를 호출 할 수 없음 | |
| MemberCall mc = new MemberCall(); | |
| mc.instanceMethod(); // 인스턴스를 생성한 후에야 호출할 수 있음. | |
| } | |
| void instanceMethod2(){ // 인스턴스 메소드에서는 인스턴스 메서드와 클래스 메소드 | |
| staticMethod(); // 모두 인스턴스 생성없이 바로 호출이 가능하다. | |
| instanceMethod(); | |
| } | |
| /* | |
| * | |
| * MemeberCall c = new MemberCall(); | |
| * int result = c.instanceMethod1(); | |
| * => | |
| * int result = new MemberCall().instanceMethod1(); | |
| * 이렇게 사용하면 참조변수를 선언하지 않았기 때문에 생성된 MemberCall 인스턴스는 더이상 사용할 수 없다. | |
| * | |
| * | |
| * */ | |
| } |
참조와 호출 특성
47 lines (38 sloc) 1.6 KB
| package common.fundament.fundament; | |
| /* | |
| * ■ 클래스 변수(static변수) 는 인스턴스를 생성하지 않아도 사용할 수 있다. | |
| * | |
| * ■ 클래스 매소드(static method) 에는 인스턴스 변수를 사용할 수 없다. | |
| * 인스턴스변수는 인스턴스가 반드시 존재해야만 사용할 수 있는데, 클래스매소드(static이 붙은 메소드)는 인스턴스 생성없이 호출 가능하므로 | |
| * 클래스 매소드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있다. 그래서 클래스 메서드에서 인스턴스 변수의 사용을 금지한다. | |
| * | |
| * ■ 클래스 영역에 선언된 변수를 멤버변수라 한다. 멤버변수 중에 static이 붙은것은 클래스변수 (static 변수), static이 붙지 않은 것은 인스턴스 | |
| 변수라 한다. | |
| * | |
| * */ | |
| class MyMath{ | |
| long a, b; | |
| // 인스턴스 변수 a, b만을 이용해서 작업하므로 매개변수가 필요없다. | |
| long add(){ return a+b; } // a, b는 인스턴스 변수 | |
| long sub(){ return a-b; } | |
| long multiply(){ return a*b; } | |
| double div(){ return a/b; } | |
| //인스턴스변수와 관계없이 매개변수만으로 작업이 가능하다. | |
| static long add(long a, long b){ return a+b;} | |
| static long sub(long a, long b){ return a-b; } | |
| static long multiply(long a, long b){ return a*b; } | |
| static double div(long a, long b){ return a/b; } | |
| } | |
| public class MyMathTest { | |
| public static void main(String[] args){ | |
| //클래스 매소드 호출, 인스턴스 생성없이 호출 가능 | |
| System.out.println(MyMath.add(100L , 200L)); | |
| System.out.println(MyMath.sub(100L, 200L)); | |
| System.out.println("==========================================="); | |
| MyMath mm = new MyMath(); //인스턴스 생성 | |
| mm.a = 100L; | |
| mm.b = 200L; | |
| System.out.println(mm.add()); | |
| System.out.println(mm.sub()); | |
| } | |
| } |
댓글 없음:
댓글 쓰기