자바의 정석 - 생성자 this(), 참조변수 this

Yohan·2023년 11월 20일
0

생성자 this()

  • 생성자에서 다른 생성자 호출할 때 사용
  • 다른 생성자 호출시 첫 줄에서만 사용가능
class Car {

    String color;
    String gearType;
    int door;
    
    Car() {
        this("white", "auto", 4);
    } 
    
    Car(String color) {
        this(color, "auto", 4);
    }
    
    Car(String color, String gearType, int door) {
        this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}
  • 코드 중복을 제거하기 위해 사용
class Car {

    String color;
    String gearType;
    int door;
    
    /* 코드 중복이 제거되지 않은 코드 */
    Car() {
    	color = "white";
        gearType = "auto";
        door = 4;
    } 
    
    /* 코드 중복을 제거한 코드 */
    Car() {
        this("white", "auto", 4);
    } 
    
    Car(String c, String g, int d) {
        this.color = c;
        this.gearType = g;
        this.door = d;
    }
}

참조변수 this

  • 인스턴스 자신을 가리키는 참조변수
  • 인스턴스 메서드(생성자 포함)에서 사용가능
  • 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
Car(String c, String g, int d) {
	// color는 iv, c는 lv
    this.color = c; (같은 class 내에서 this. 생략가능)
    this.gearType = g;
    this.door = d;
 }

 Car(String color, String gearType, int door) {
 	// color는 iv, color는 lv
     this.color = color; (iv, lv 이름이 같은 경우는 this.생략 불가)
     this.gearType = gearType;
     this.door = door;
 }

참조변수 this와 생성자 this()

  • this
    • 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.
  • this(), this(매개변수)
    • 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
class MyMath {
    long a, b; // this.a, this.b; (iv)
    
    MyMath(int a, int b) { // 생성자
        this.a = a; (iv와 lv 구별하려고 this. 사용)
        this.b = b;
    }
    
    long add() { // 인스턴스 메서드
        return  a + b; // return this.a + this.b;
    }
    
    static long add(long a, long b) { // 클래스 메서드 (static 메서드)
        return a + b; // this 사용불가, this도 객체인데 static 메서드에서는 객체 생성이 불가능
    }
}
profile
백엔드 개발자

0개의 댓글