this 는 자기 자신의 변수명이나 클래스 변수를 참조하고, this() 는 자기 자신의 클래스 생성자를 호출합니다.


this 변수

this 는 자기 자신의 클래스 인스턴스 변수를 참조할 때 사용합니다. 예를 들어 같은 이름의 지역변수와 인스턴스 변수가 있다면 이를 구분하기 위해 this를 붙입니다. 

// ex.1)
public class Ex01 {
    public static void main(String[] args) {
        Members mem = new Members();
        mem.member(10, 20);
    }
}
 
class Members {
 
    // 인스턴스 변수입니다.
    public int a = 30;
    public int b = 40;
    public void member(int a, int b) {
 
        // 파라미터로 넘어 온 지역 변수입니다.
        System.out.println("a = " + a);
        System.out.println("b = " + b);
         
        // 인스턴스 변수를 얻습니다.
        // 파라미터로 넘어온 지역 변수와 구분하기 위해 this 를 붙였습니다.
        System.out.println("this.a = " + this.a);
        System.out.println("this.b = " + this.b);
    }   
}


아래는 결과 화면입니다.

 

// ex.2)
public class Ex01{
    public String toString() {
        return "사용자 정의 함수입니다.";
    }
    Ex01(){
        // 내장 함수를 호출합니다.
        String str = "내장 함수입니다.";
        System.out.println(str.toString());
 
        // 사용자 함수를 호출합니다.
        System.out.println(this.toString());
    }
    public static void main(String[] args) {
        new Ex01();
    }
    /*
    결과:
    내장 함수입니다.
    사용자 정의 함수입니다.
    */
}



this() 객체 

생성자 this() 는 자기 자신의 클래스 생성자를 호출합니다. 주의할 부분은 맨 윗줄에 적어야 하고, static 에 사용할 수 없습니다. 

// ex.3)
public class Ex01 {
    public static void main(String[] args) {
 
        // 초기화 합니다.
        // public Members() 를 호출합니다.
        Members mem = new Members();
        mem.member(10, 20);
    }
}
 
class Members {
    public int a = 30;
    public int b = 40;
 
    public Members(int a) {
        this.a = 50;
    }
    public Members() {
 
        // 자신의 클래스 public Members(int a) 생성자 호출
        this(1);
    }
    public void member(int a, int b) {
 
        System.out.println("a = " + a);
        System.out.println("b = " + b);
         
        System.out.println("this.a = " + this.a);
        System.out.println("this.b = " + this.b);
    }
}

 

아래는 결과 화면입니다.

 

this() 는 자기 자신을 호출하는데, this(x, y) 처럼 파라미터가 있으면 자기 자신의 클래스에 해당하는 동일한 파라미터를 가진 함수를 호출하는 게 특징입니다. 

// ex.2)
public class Ex01 {
    public static void main(String[] args) {
        Members mem = new Members();
         
        // 자신의 클래스 public Members() 생성자를 호출합니다.
        /* 결과 :
           {a} = 2
        */
        mem.memb();
         
        // 자신의 클래스 public Members(int a, int b) 생성자를 호출합니다.
        /* 결과 :
           {a} = 2
           {a, b} = 2
           {a, b} = 4
        */
        mem.memb(4);
    }
}
 
class Members {
    public int a = 30;
    public int b = 40;
 
    public Members() {
        this.a = 1;
    }
    public Members(int a) {
 
        // 자신의 클래스 public Members() 생성자를 호출합니다.
        this();
         
        this.a += a;
         
        System.out.println("{a} = " + this.a);
    }
    public Members(int a, int b) {
 
        // 자신의 클래스 public Members(int a) 생성자를 호출합니다.
        this(1);
        this.b = b; 
         
        System.out.println("{a, b} = " + this.a);
        System.out.println("{a, b} = " + this.b);
    }
 
    // public Members(int a ) 를 호출합니다.
    public void memb() {
        new Members(1);
    }
 
    // public Members(int a, int b) 를 호출합니다.
    public void memb(int a) {
        new Members(1, a);
    }
}


0 댓글