<< 객체를 참조할 때 사용하는 this >>
생성자 또는 메서드 내에서 로컬변수와 멤버변수의 이름이 같을 때 멤버변수를 지정하기 위한 키워드로 사용 된다
객체에 대한 레퍼런스(참조값)이기 때문에 객체가 생성되기 전에는 사용할 수 없다
따라서 static 영역에서는 this 키워드를 사용할 수 없다
기본 문법
this.멤버변수
this를 사용하지 않았을 때
class Person4 {
String name; // 멤버변수
public Person4(String name) { // 로컬변수
name = name;
}
}
클래스 내에서 사용한 name이라는 로컬변수의 영향이 더 크기 때문에
로컬변수 name에 로컬변수 name을 저장한다는 의미라 경고가 발생한다 (의미없는 일이기 때문)
this를 사용했을 때
class Person4 {
String name; // 멤버변수
public Person4(String name) { // 로컬변수
this.name = name;
}
}
위 처럼 this.name은 멤버변수(String name)를 가리키게 된다.
<< 다른 생성자를 호출하는 this >>
생성자 내에서 자신의 또 다른 생성자를 호출하는 키워드
'레퍼런스 this'와 동일하게 자신의 인스턴스에 접근하여 다른 생성자를 호출할 때 사용
생성자 오버로딩 시 멤버변수 초기화 코드의 중복을 제거하기 위해 사용한다
(여러 생성자에서 멤버변수를 중복으로 초기화하지 않고 하나의 생성자에서만 초기화하고 나머지 생성자에서는 해당 생성자를 호출하여 초기화 할 값만 전달 후 대신 초기화 수행)
생성자 내에서 다른 코드보다 뒤 쪽에 this()가 올 수 없음 (다른 코드가 먼저 실행될 수 없음)
기본 문법
this([파라미터...])
아래 코드의 주석을 해석해보자
public static void main(String[] args) {
// 1900/1/1 출력
MyDate d1 = new MyDate();
System.out.println(d1.year + "/" + d1.month + "/" + d1.day);
// 2020/1/1 출력
MyDate d2 = new MyDate(2020);
System.out.println(d2.year + "/" + d2.month + "/" + d2.day);
// 2020/2/1 출력
MyDate d3 = new MyDate(2020, 2);
System.out.println(d3.year + "/" + d3.month + "/" + d3.day);
// 2020/2/11 출력
MyDate d4 = new MyDate(2020, 2, 11);
System.out.println(d4.year + "/" + d4.month + "/" + d4.day);
}
class MyDate {
int year;
int month;
int day;
public MyDate() {
// System.out.println(); -- 생성자 내에서 다른 코드보다 뒤 쪽에 this() 가 올 수 없다
this(1900, 1, 1);
}
public MyDate(int year) {
this(year, 1, 1); // year 파라미터만 입력받고 month, day는 1로 고정된 데이터만 저장
}
public MyDate(int year, int month) {
this(year, month, 1); // year, month 파라미터만 입력받고 day는 1로 고정된 데이터만 저장
}
// 모든 파라미터(year, month, day)를 입력받고 다른 생성자에서 호출되면 직접적으로 일을 하는 메서드
public MyDate(int year, int month, int day) {
System.out.println("MyDate(int, int, int) 생성자 호출!");
this.year = year;
this.month = month;
this.day = day;
}
}
'BackEnd > Java' 카테고리의 다른 글
기본형 변수와 참조형 변수의 차이 (0) | 2020.03.16 |
---|---|
super, 부모를 가리키는 예약어 (0) | 2020.03.16 |
생성자 (Constructor) (0) | 2020.02.12 |
패키지(Package)와 import (0) | 2020.02.11 |
오버로딩(Overloading)과 가변인자(비정형인자) (0) | 2020.02.11 |