반응형

자바 this 예약어

 

자바에서 this 는 무엇인가...?

 

this is a pen (이것은 펜입니다) 할 때의 this 하고 관련이 있는 것인가?

 

this 는 사물을 가리킬 때 쓰는 지시대명사이다. 이것이 무엇을 가리키고 있는 것은 분명하다.

 

<예제 클래스: 알바 클래스>

 

알바 클래스

this 에 대한 알바 클래스 이다.

 

this 키워드는 자기 클래스의 인스턴스를 가리키는 키워드이다.

 

인스턴스는 new 생성자 ( ) 를 사용해야 비로서 메모리에 생성된다.

 

. 점 연산자로 멤버 변수에 접근하는데 사용할 수 있다.

 

위의 예제 코드에서 멤버 변수 세개가 있다. (name, wage, type) 그리고 매개변수가 세개인 생성자를 보면 this.name, this.wage, this.type 세개의 this를 볼 수 있다. this. 를 사용한 변수가 바로 이 클래스의 인스턴스를 만들었을 때 존재하는 멤버 변수들인 것이다. 그런데 매개변수 세개와 이름이 같다. 상관없다. 매개변수 name 과 this.name 은 전혀 다르다. 매개변수는 main 함수에서 생성자 PartTimer 호출시 전달받는 값이고, this.name은 메모리에 생성된 인스턴스의 독립된 저장 공간이다.

 

main 메서드

main 메서드에서 10번 줄을 보면 , PartTimer 생성자에 매개변수를 3개 전달하고 있다. 그리고 PartTimer 클래스 변수 pt3에 참조를 넘겨준다. 생성자를 호출 할 때 아래처럼 할당된다.

 

this.name = "Mr.Kim";

this.wage = 9500;

this.type = "day shift";

 

이는 다음과 같은 말이다

 

pt3.name = "Mr.Kim";

pt3.wage = 9500;

pt3.type = "day shift";

 

인스턴스 pt3를 손가락으로 가리키듯이 this 라고 부르는 것이다.

 

 

this( ) 오버로딩 (Overloading)

this 키워드는 좀 특별하다. this.멤버변수로 사용가능하고 this ( ) 라는 형식으로도 사용가능하다.

 

바로 생성자 안에서 this( )를 사용한 오버로딩을 할 수 있다.

 

생성자 오버로딩에 대해서는 이전 포스트의 참고를 추천한다.

 

 

자바 튜토리얼 (5-5) 생성자(constructor)

*생성자란? 생성자(constructor)는 또 무엇인가? 자바의 챕터를 넘기다 보면 끓임없는 새로운 용어들이 등장한다. 일단 생성이라는 말은 뭔지 알 것 같다. 사전에는 - 생성 : 사물이 생겨남. 또는 ��

digiconfactory.tistory.com

맨 아래처럼 가장 완전한 생성자를 만들고, 나머지는 this ( ) 키워드로 원하는 형태의 오버로딩을 만들 수 있다. 매개변수에 따라 나머지 초기값을 관리할 수 있게 해준다. 길었던 코드도 한눈에 들어오니 간결해진다. 주의할 점은 this 생성자를 호출하기 이전에 다른 코드를 넣으면 컴파일시 에러가 난다. this ( ) 가 바로 생성자이기 때문에 그 다음 줄에 넣어야 한다.

 

PartTimer (String name){

  // 여기에 코드를 넣으면 에러가 난다. 아직 메모리에 생성이 안되었음.

   this(name,0,null);

  // 여기는 괜찮다. 메모리에 생성되었으므로 값을 조작할 수 있다.

  this.wage = 9000;

}

 

main 메서드에서 3개의 생성자를 차례로 생성한다. 매개변수의 수가 1,2,3  으로 바뀐다. pt1과 pt2가 this ( ) 생성자를 거쳐서 메모리에 인스턴스를 생성시킨다. showInfo에서 내용을 보여준다.

결과값

매개변수가 없던 나머지 멤버변수들도 초기화가 되었다. null 은 객체의 초기화 값이다. (참조 할당이 아직 없음)

 

this 스스로의 참조를 반환 

세번째 this는 자기 스스로의 참조를 리턴할 수 있다. 새로운 인스턴스를 만드는게 아니라 클래스의 주소를 반환하는 것이다. 클래스 메서드를 다음처럼 추가한다.

public PartTimer getInstance() { 
       return this; 
}

다음처럼 사용한다.

PartTimer pt1 = new PartTimer("Ms.Sue");
PartTimer pt4 = pt1.getInstance();
pt4.showInfo();

this 의 반환은 자주 쓰는 것은 아니지만 this를 사용해서 자신의 주소를 알아낼 수 있다.

 

*PS - 자바 OOP를 이해하기 위해서는 잘 작성된 예제를 따라해보는 것이 중요하다.

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드