본문 바로가기

면접질문[CS]/알고리즘 & OS

this에 대하여... [ java & OOP 면접질문 2]

why

this는 객체지향 개발론 언어인 Java의 중요한 키워드 중 하나이다.

자바 스크립트에서의 단골 질문으로 뽑히는 키워드인데 개인적으로 java에서도 꽤나 중요한 키워드라 생각한다.

면접 질문으로 나오는 비중은 적지만 클래스 내에서의 활용성이 높기에 뽑아보았다.

this와 this()의 차이점이 무엇인지로 질문을 할 수 있다.

[ 깊게 들어가면 JVM까지도 접근하게 될 수 있다. ]

 

 

this란 : 메서드와 생성자에서 현재 객체를 가리킨다. [3가지 용도]

this는 자기 자신(클래스 혹은 객체)을 가리킨다. 

객체의 경우 인스턴스 자신을 가리키는 참조 변수로 인스턴스의 주소(heap 메모리) 참조로 저장된다.

생성자와 메서드는 자기 자신을 가리키는 변수를 가지는데 이러한 숨겨진 성질로 인해서 this를 0번째 변수라고도 부른다. 이 성질은 JVM에서 GC 메커니즘에 이용된다.

 

1. 자기 자신의 메모리를 가리키는 경우 [ 가장 흔한 용도 ]

생성자 내에서 this.멤버변수 형식으로 이용되는 경우이다. 

자바의 코딩 스타일에서 생성자로 들어오는 매개변수의 변수명과 클래스의 멤버변수의 변수명을 같게 하는 것이 가독성을 향상해준다고 한다.

이때 넘어온 매개변수의 변수명과 클래스의 멤버변수의 변수명을 구분짓기 위해 this 키워드가 사용된다.

this.매개변수명 = 넘어온 변수명 

이런 식으로 말이다.

public class Point {
	int x;
	int y;
	
	// 아래와 같이 사용 X 문제가 된다. 
	public Point(int x, int y) {
		x = x;
		y = y;
	}
	// this 키워드를 통해 구분해준다. 
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}

 

2. 생성자에서 오버로딩된 다른 생성자를 호출하는 경우  [ this(매개변수) 형태 ]

 

해당 용도로 사용하는 경우 2가지 주의점이 있다.

1. 생성자를 재귀 호출하는 형태로 사용해서는 안된다는 것

2. this()가 첫번째 문장으로 나와야 한다는 점이다.

public Employee(String aName, double aSalary)
{
	name = aName;
	salary = aSalary;
}
...
public Employee(double s)
{
	//calls Employee(String, double)
	this("Employee #" + nextId, s); 
	nextId++;
}

하나의 클래스에 여러개의 생성자가 오버로딩된 경우에 일부분을 제외하고 서로 중복된 코드를 가지는 경우가 많다.

이 떄 내부에 정의된 다른 생성자를 호출하는 방식으로 코드 중복을 피하게끔 한다.

 

3. 객체 자신의 참조값을 전달하고 싶은 경우. return this 형태이다. 디자인 패턴에 주로 사용한다.

 

해당 용도는 일반적이라기보다는 재귀적인 스타일을 적용해야 할 때 사용한다.

빌더 패턴이 대표적이다. 해당 용도는 깊게 들어가지는 않는다.

 

마무리

추후에 추가적인 내용을 더 추가하도록 하겠다.

해당 내용만으로는 미흡하다고 생각한다.

 

3가지 용도와 this 키워드의 주요 특징(자기 자신을 참조하는 주소. 0번째 매개변수라는 점)을 기억하자!

 

참고자료

  • 1008라이브러리님의 블로그 글 : link
  • 코딩dog 블로그 : link [ 심화된 내용까지 친절하게 설명해준다. ]
  • W3schools : link [ 간단한 설명 ]
  • 감성 공대생님의 블로그 : link
반응형