본문 바로가기

개발 관련 지식/자바(Java)

[자바] 클래스멤버와 인스턴스멤버 간의 참조와 호출

* 클래스멤버와 인스턴스멤버 간의 참조와 호출

 

: 같은 클래스에 속한 멤버들 간에는 별도의 인스턴스를 생성하지 않고도 서로 참조 또는 호출이 가능하다. 단, 클래스멤버가 인스턴스멤버를 참조 또는 호출하고자 하는 경우에는 인스턴스를 생성해야 한다.

그 이유는 인스턴스 멤버가 존재하는 시점에 클래스멤버는 항상 존재하지만, 클래스멤버가 존재하는 시점에 인스턴스 멤버가 존재할 수도 있고 존재하지 않을 수도 있기 때문이다.

 

<예문>

package Exercise;

class TestClass1 {

void instanceMethod() { System.out.println("instanceMethod()");}; //인스턴스 메서드
static void staticMethod() {System.out.println("staticMethod()");}; //static 메서드

void instanceMethod2(){ //인스턴스 메서드
System.out.println("instanceMethod2()");
instanceMethod(); //다른 인스턴스메서드를 호출
staticMethod(); //static 메서드를 호출
}

static void staticMethod2(){
System.out.println("staticMethod2()");
TestClass1 tt = new TestClass1();
tt.instanceMethod();
staticMethod();
} 



public static void main(String[] args) {
// TODO Auto-generated method stub
/*TestClass1 tt = new TestClass1();
tt.instanceMethod();
TestClass1.staticMethod();
tt.instanceMethod2();
TestClass1.staticMethod2();*/

TestClass2 tt2 = new TestClass2();
tt2.instanceMethod();
tt2.staticMethod();
}
}

class TestClass2 {
int iv; //인스턴스 변수
static int cv; //클래스변수

void instanceMethod(){ //인스턴스 메서드
System.out.println(iv); //인스턴스변수 사용가능
System.out.println(cv); //클래스변수 사용 가능
}



static void staticMethod(){ //static 메서드
//System.out.println(iv); //인스턴스 변수 사용 불가능
System.out.println(new TestClass2().iv);
System.out.println(cv); //클래스변수 사용 가능
}
}