반응형
SMALL
■ this()
클래스 안에서 메서드들끼리 상호 호출이 가능하듯이 생성자도 상호 호출이 가능하다. 이를 가능하게 해주는 것이 바로 this() 메서드이다. 한마디로 this() 메서드는 클래스 내에서 생성자를 호출할 때 사용 가능한 메서드라는 것이다.
예를 들어 people 클래스에 people 생성자를 호출하는 것은 people()이 아닌 this() 메서드 인데 이는 people()을 호출하는 것과 동일한 결과를 지니고 있다.
this() 메서드를 사용하기 위해서 반드시 지켜야할 2가지의 기본 요소들이 있다. 첫 번째는 this() 반드시 생성자 내에서만 사용되어야 한다, 두 번째는 this() 메서드는 반드시 생성자의 첫 줄에 위치하여야 한다.
public class peopleTest {
public static void main(String[] args){
People people = new People();
People people1 = new People(5);
}
}
class People {
People(){
System.out.println("피플의 기본 생성자 호출");
}
People(int x){
System.out.println("피플의 두번째 생성자 호출");
}
}
실행 위주로 피플 클래스의 전반적인 흐름을 살펴보자. 피플 클래스는 두 개의 생성자를 가지고 있는데 첫 번째 생성자는 매개변수가 필요 없는 생성자이고, 두 번째 생성자는 매개변수와 this() 메서드를 가지고 있는 매개변수 생성자이다.
이제 People 클래스를 기반으로 인스턴트를 만들게 되면, 첫 번째 생성자가 호출되고 "피플의 기본 생성자 호출" 이 출력된다. 이후 두 번째 생성자가 호출되면 this() 메서드를 통하여 첫번째 생성자가 한번더 출력되고 다음으로 "피플의 두번째 생성자 호출" 이 출력되는 것을 볼 수 있다.
■ this
this 메서드는 this() 메서드와 매우 유사한 생김새를 가지고 있지만 쓰임새는 전혀 다르다. this 키워드를 이해하기 위해 저번 글에 썼던 코드들을 다시 봐보도록 하자
public class CatTest {
public static void main(String[] args) {
carTest carTest = new carTest("Niro","spaceGray",150);
System.out.println("제차는 :" + carTest.getModel() + '\n' + "제 차 색은 :" + carTest.getColor() + '\n'+
"제 차 최고시속은 :" + carTest.getMaxSpeed());
}
}
class carTest {
private String model;
private String color;
private int maxSpeed;
public carTest(String model,String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
public String getModel(){
return model;
}
public String getColor(){
return color;
}
public int getMaxSpeed(){
return maxSpeed;
}
}
// 결과값
제차는 :Niro
제 차 색은 :spaceGray
제 차 최고시속은 :150
위 예제 CarTest를 한번 살펴보자.
인스턴스 변수로 model, color, maxSpeed가 선언되어 있는데, 동시에 생성자의 매개변수로 model, color, maxSpeed 가 정의되어있다. 이런 경우, 인스턴스 변수와 매개변수를 이름만으로 구분하기 어려워지는데,
이를 구분해주기 위하여 사용하는 것이 바로 this. 키워드이다.
this.model = model로 표기해주지 않고 model = model로 표기한다면 둘 다 지역변수로 간주한다.
this 키워드를 조금 더 구체적으로 설명해보자면, 모든 메서드에서는 자신이 포함된 클래스의 객체를 가리키는 this.라는 참조 변수가 있는데 일반적인 경우에는 컴파일러가 this. 을 자동으로 추가해주기 때문에 생략하는 경우가 많다. 예를 들면 현재 carTest 클래스의 model이라는 인스턴트 필드를 클래스에서 내부적으로 출력하고자 한다면 원래는 System.out.println(this.model)로 출력해야 한다.
결론적으로 this는 인스턴스 자신을 가리키며 우리가 참조 변수를 통해 인스턴스를 접근할 수 있는 것처럼 this. 을 통해 인스턴스 자신의 변수에도 접근할 수 있도록 하는 것이다. 그리고 위에서 보았듯이 this. 은 인스턴스의 필드명과 지역변수를 구분 짓기 위해서 사용하기도 한다.
LIST
'Programming > Cs' 카테고리의 다른 글
[OOP] 추상화 (0) | 2022.05.15 |
---|---|
[OOP] 다형성 (2) | 2022.05.13 |
[지식] 클래스 (Class) 와 객체 (Object) (2) | 2022.05.10 |
[OOP] 객체지향 프로그래밍 (OOP, Object oriented Programming) (2) | 2022.05.10 |
[지식] 변수, 상수, 리터럴, 타입변환 (2) | 2022.05.04 |