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()); | |
} | |
} |
댓글 없음:
댓글 쓰기