[Java의 정석]Chapter6.객체지향 프로그래밍(36~37)

Hello_Wendy·2022년 4월 21일
0

자바의 정석

목록 보기
46/61
post-thumbnail

Chapter 6. 객체지향 프로그래밍

36. 생성자에서 다른 생성자 호출하기 - this( )

  • 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것처럼 생성자 간에도 서로 호출이 가능

🎃 생성자 간 호출 가능한 조건

  • 생성자의 이름으로 클래스이름 대신 this를 사용
  • 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출 가능
<에러발생 예>
Car(String color) {
	door = 5; //첫번째 줄
    Car(color, "auto", 4); //에러1. 생성자의 두 번째 줄에서 다른 생성자 호출
} //에러2. this(color, "auto", 4);로 해야함
  • 생성자에서 다른 생성자를 첫 줄에서만 호출이 가능하도록 한 이유
    ▶ 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있음

  • 생성자 Car2()에서 또 다른 생성자 Car2(String color, String gearType, int door)를 호출함
  • 생성자간의 호출에는 생성자의 이름 대신 this를 사용해야만 하므로 'Car2' 대신 'this'를 사용
  • 생성자 Car2()의 첫째 줄에서 호출하였다는 점을 유의
Car2() {
	color = "white";
    gearType = "auto"
    door = 4;
}

<↓ 간략히>

Car2() {
	this("white", "auto", 4);
}
:아래 코드는 생성자 Car2(String color, String geartype, int door)를 활용해서 더 간략히 한 것
Car2 c1 = new Car2();와 같이 생성자 Car2()를 사용해서 Car2인스턴스를 생성한 경우에,
인스턴스변수 color는 "white", gearType은 "auto", door는 4로 초기화 되도록 함

37. 객체 자신을 가리키는 참조변수 - this

🔔 주의

  • this : 인스턴스 자신을 가리키는 참조변수
    -인스턴스의 주소가 저장되어 있음
    -모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재

  • this( ) , this(매개변수) : 생성자
    -같은 클래스의 다른 생성자를 호출할 때 사용

  • thisthis( )는 완전히 다른 것

Car(String c, String g, ind d) {
	color = c;
    gearType = g;
    door = d;
}
  • color = c;생성자의 매개변수로 선언된 지역변수 c의 값인스턴스변수 color에 저장함
Car(String color, String gearType, int door) {
	this.color = color;
    this.gearType = gearType;
    this.door = door;
}
  • 생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우인스턴스 변수 앞this를 사용

  • this.color는 인스턴스 변수이고, color는 생성자의 매개변수로 정의된 지역변수로 서로 구별 가능

  • this.color = color; 대신에 color = color로 쓰면 둘 다 지역변수로 간주

  • 생성자의 매개변수로 인스턴스변수들의 초기값을 제공받는 경우가 많기 때문에 매개변수이름을 인스턴스변수의 이름과 다르게 하는 것보다 this를 사용해서 구별되도록 하는 것이 좋음

  • this는 참조변수로 인스턴스 자신을 가리킴

  • 참조변수를 통해 인스턴스 멤버에 접근할 수 있는 것처럼 this로 인스턴스변수에 접근할 수 있음

  • 하지만, this를 사용할 수 있는 것은 인스턴스멤버 뿐

profile
안녕 나의 새로운 세상

0개의 댓글