-
Java | ThisJAVA/JAVA 2020. 1. 22. 17:41
This
생성된 인스턴스(객체) 스스로를 가리키는 예약어
멤버 변수와 메서드 매개변수의 이름이 같을 경우에 컴퓨터가 구분하지 못하는 경우 발생
→ 멤버 변수 이름 앞에 this 작성
① 자신의 인스턴스를 가리키는 This
main()에서 같은 클래스를 이용해서 서로 다른 이름의 객체를 생성하더라도
각각의 객체 내의 메소드와 멤버 변수를 스스로의 객체에서 찾을 수 있도록 this를 사용
참조 변수
인스턴스를 가리키는 변수, '클래스 이름@메모리 주소'가 출력됨
public class ThisTest2 { // 기본 생성자 ThisTest2(){ // 자기 객체의 참조 변수를 출력할 수 있도록 this 사용 System.out.println("현재 생성된 객체: " + this); } public static void main(String[] args) { ThisTest2 tt = new ThisTest2(); System.out.println("main()에서 생성된 tt객체: " + tt); /* 현재 생성된 객체: j200122.ThisTest2@15db9742 main()에서 생성된 tt객체: j200122.ThisTest2@15db9742 */ ThisTest2 tt2 = new ThisTest2(); System.out.println("main()에서 생성된 tt2객체: " + tt2); /* 현재 생성된 객체: j200122.ThisTest2@6d06d69c main()에서 생성된 tt2객체: j200122.ThisTest2@6d06d69c */ } }
※ 기본 생성자 내부에 작성된 this가 생성된 객체에 따라 다른 참조 변수를 가리킴
사용례
public class ThisTest { private int a = 100; public void setA(int a) { this.a = a; /* a = a; 로 작성하면 setA()로 값을 저장하지 못하고 100이 출력됨 */ } public int getA() { return a; } public static void main(String[] args) { // 객체 생성 ThisTest tt = new ThisTest(); /* this.a = a; 에서 this는 tt 인스턴스(객체)를 가리키며, 여러 개의 객체가 생성된 경우, 각각의 객체를 지시함 */ tt.setA(2); int get = tt.getA(); System.out.println(get); // 2 } }
② 생성자에서 다른 생성자를 호출하는 This
클래스에 생성자가 여러 개 있을 때 생성자에서 다른 생성자를 호출할 때 this 사용 가능
생성자 호출 This_주의 사항
this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드 작성 불가
기본 생성자에서 생성이 완료되는 것이 아니라
this를 사용해 다른 생성자를 호출하므로, this가 가장 먼저 와야 함→ 클래스 생성이 완료되지 않은 시점에 다른 코드가 있다면 오류 발생
Constructor call must be the first statement in a constructorpublic class CnstCall { String name; int age; CnstCall() { this("김덕배", 22); } CnstCall(String name, int age) { this.name = name; this.age = age; System.out.println("이름: " + name + ", 나이:" + age); } public static void main(String[] args) { CnstCall cc = new CnstCall(); // 이름: 김덕배, 나이:22 } }
※ 생성자 호출시 호출된 생성자의 모든 코드가 실행됨
간단해 보이지만 어려운 개념인 this에 대해 살펴보았습니다.
this에 대해 꼭 알아 두어야 하는 것은 this의 값이 객체(인스턴스)의 참조 변수를 가리킨다는 것입니다.
생성자 호출 this 역시 생성자가 속한 객체에 있는 또 다른 생성자에 매개변수를 전달하면서 호출하는 것이기 때문에
this는 자기 자신의 객체를 가리킨다는 점만 이해하면 될 것 같습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | Static 정적 변수 & 정적 메소드 (0) 2020.01.28 Java | Java 메모리 구조 (0) 2020.01.28 Java | 메소드 Overloading & 생성자 Overload (0) 2020.01.22 Java | Constructor 생성자 (0) 2020.01.22 Java | Encapsulation 캡슐화 & 접근 제어자 & set(), get() (0) 2020.01.21