this가 하는 일
- 인스턴스 자신의 메모리를 가리킴
- 생성자에서 또 다른 생성자를 호출 할 때 사용
- 자신의 주소(참조값)을 반환함
생성된 인스턴스 메모리의 주소를 가짐
- 클래스 내에서 참조변수가 가지는 주소값과 동일한 주소값을 가지는 키워드
public void setYear(int year) {
this.year = year;
}
Birthday day = new Birthday();
day.setYear(2000);
setYear가 호출이 되면 this라는 스택메모리가 생성되고
이 this는 Birthday인 인스턴스 자신을 가리키는 참조변수가 된다.
day.setYear(2000); 의 day.는 Birthday라는 인스턴스(객체) 자신을 가리키는 것.
참조변수 this
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스 메서드(생성자 포함)에서 사용가능
- 지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용
→ 참조변수.변수이름
→ 그 객체의.color / 그 객체의.gearType / 그 객체의.door
- this : 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스 메서드에 지역변수로 숨겨진채로 존재한다. (선언하지않고 사용가능)
- this(), this(매개변수) : 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다.
this. : 모든 인스턴스 메서드에 지역변수로 숨겨진채로 존재한다. 의 설명
- 원래 진짜 이름은 this.a, this.b 이다.
- long a, b : 인스턴스 변수의 진짜 이름은 this.a, this.b 임
- 매개변수와 이름이 같으므로 원래 이름대로 this.a,this.b를 써줘서 매개변수와 구분을 해주는 것이다. (iv와 lv 구분)
- 이 부분은 원래 이름은 this.a, this.b 지만 이렇게 생략이 가능한 것이다.
- 왜냐하면 this를 붙여주지 않아도 a와 b가 인스턴스변수인 것을 알기때문.
생성자에서 다른 생성자를 호출하는 this()
- 클래스에 생성자가 여러개인 경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음
- 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음
생성자의 역할은 인스턴스를 초기화하는 역할이다.
기본생성자에 있는 this()에서 매개변수가 (String, int) 이 있으면, 매개변수에 맞는 자료형이 매핑이되어 생성자가 호출되는데 호출이 끝나야 인스턴스 생성이 끝나는 것이다.
this()가 호출되면 인스턴스 생성이 끝나지 않은 상태이므로 this() 이전에 다른 코드를 집어넣으면 오류가 생긴다.
- 같은 클래스 안에 있는 다른 생성자를 호출할 때 사용
→ 왜냐? 그냥 규칙임
- 다른 생성자 호출시 첫 줄에서만 사용가능
→ 오류: 1. 두번째 줄에 생성자 호출함 / 2. this가 아닌 생성자 이름을 씀
- 생성자들의 역할 = iv(멤버변수) 초기화
- 오버로딩을 하는 경우는 하는 일이 비슷할 때 해준다.
- 코드 중복 제거