본문 바로가기
Java

[소소한 정보] this와 this()

by Kloong 2022. 1. 20.

생성자에서 다른 생성자를 호출할 수 있다.

단 2가지 조건이 있다.

  1. 다른 생성자를 호출할 때 생성자의 이름으로 클래스 이름이 아닌 this를 사용한다.
  2. 반드시 생성자의 첫 줄에서만 다른 생성자를 호출할 수 있다.
class Test
{
    int temp1;
    int temp2;

    Test()
    {
        this(0);
        temp2 = 0;
    }

    Test(int temp1)
    {
        this.temp1 = temp1;
    }
}

Test()에서 this(0)으로 다른 생성자를 호출했다.

 

//Case 1
Test()
{
    Test(0); //this가 아닌 클래스명을 사용해서 생성자 호출
    this.temp2 = 0;
}

//Case 2
Test()
{
    this.temp2 = 0;
    this(0); //첫 줄에서 다른 생성자를 호출하지 않음
}

위 두 개의 케이스는 모두 컴파일 에러가 난다.

다른 생성자를 반드시 첫 줄에 호출해야 하는 이유는, 중간에 호출해버리면 이전에 진행했던 초기화 작업이 무의미해 질 위험이 있기 때문이다.

 

this는 생성자 외에 다른 곳에도 쓰인다.

this가 참조변수로써 사용될 때는, 인스턴스 자신을 가리키는 참조변수 역할을 한다. this를 사용해서 인스턴스 변수에 접근할 수 있다.

사실상 this와 this()는 생긴 것만 비슷하지 완전히 다르다고 볼 수 있다.

 

생성자를 포함한 모든 인스턴스 메소드에는 자기 자신의 인스턴스를 가리키는 참조변수 this가 지역변수로 숨겨진 채 존재한다.

Test()
{
    this.temp = 1;
}

void testMethod()
{
    System.out.println(this.temp);
}

단 클래스 메소드(static 메소드)의 경우에는 인스턴스가 존재하지 않을 수 있으므로 메소드 내에서 this를 사용할 수 없다.

댓글