본문 바로가기

Programming/JAVA

This의 주의할 점

this는 static으로 선언된 메소드 안에서는 사용할 수 없다.

이유: this는 멤버변수를 호출한 객체의 주소를 가지고 있기 때문에 heap 메모리를 참조하고 있게 된다.

하지만 static은 Data Segment 영역에 올라가는데 이 말은 객체의 생성이 이루어지기도 전에 이미 메모리

에 올라가 있다는 것을 의미한다. 그러므로 static으로 선언된 메소드안에서 this를 쓴다는 것은 생성되지

도 않은 객체의 주소를 가지고 있다는 말이 되므로 문법상 오류를 발생시키게 된다.

다른 의미로는 this는 클래스 내부의 멤버변수나 멤버 메소드를 호출하는 객체의 주소를 참조하고 있는데,

이 주소는 heap 메모리를 가리키고 있는다.

하지만 static은 메모리의 Data Segment 영역 즉, 데이터영역에 객체 생성전에 미리 상주하고 있게 된다.

한마디로, 메모리에서 상주하고 있는 영역이 틀리다는 말이다... 그러니 당연 문법적 오류를 발생.

class This{
    String area="";
   
    public void prn(){
        System.out.println("이 메소드를 호출한 객체의 HashCode: " + this.hashCode());
        System.out.println(this.area);
    }
}

public class ThisTest {

    public static void main(String[] args) {
        This obj1 = new This();
        obj1.area = "인천시";
        obj1.prn(); //객체의 Hashcode가 prn()메소드로 호출됩니다.
        System.out.println("obj1.hashCode(): " + obj1.hashCode());
    }
}