-
this 와 this() 의 용도[Java] 2023. 5. 21. 03:16
저스디스 노래를 들으며
생성자에서 많이 볼 수 있는 this / this() 에 대해 알아보자.
(사실 필자가 계속 까먹어서 정리 한 번 하고 가겠음.)this 와 this() 의 용도
1. this
객체 자신을 가리키는 레퍼런스 변수. 자신의 객체에 접근할 때 사용된다.
여기서 레퍼런스 변수란?
메모리상에 생성된 인스턴스를 가리키는 데 사용되는 변수이다.
주로 멤버변수와 매개변수의 이름이 동일할 때, 이를 구분하기 위해 사용한다.
2. this()
주로 코드의 중복을 줄일 목적으로 사용한다.
생성자의 코드에서만 사용할 수 있다.
생성자 코드 안에서 사용될 때 첫 번째 문장으로 다른 코드보다 가장 윗줄에 위치해야 한다.
public class shop { String name; int price; public shop() { // 기본 생성자 this("nothing", -1); } public shop(String name) { // 매개변수 1개 생성자 this(name, 0); } public shop(String name, int price) { // 매개변수 2개를 가진 생성자 this.name = name; this.price = price; } public void showPrice() { // 가격 출력 메소드 System.out.println(name + "의 가격은" + price + "원 입니다. "); } public static void main(String[] args) { // 객체 생성 및 실행 shop thing1 = new shop(); shop thing2 = new shop("tottenham hotspur"); shop thing3 = new shop("tottenham hotspur", 3000); thing1.showPrice(); thing2.showPrice(); thing3.showPrice(); } }
여기서 궁금증이 생겼다.
this() 는 생성자 안에서 다른 생성자를 호출하므로, this (name, 0); 은 매개변수 2개를 가진 생성자를 호출하게 된다고 하였다.
먄약 매개변수 2개를 가진 생성자가 사진처럼 하나가 아니라 여러개라면 어떻게 되는걸까?
public class shop { String name; int price; public shop() { // 기본 생성자 this("nothing", -1); } public shop(String name) { // 매개변수 1개 생성자 this(name, 0); } public shop(String name, int price) { // 매개변수 2개를 가진 생성자 this.name = name; this.price = price; } public shop(String name1, Short price1) { this.name = name1; this.price = price1; } public void showPrice() { // 가격 출력 메소드 System.out.println(name + "의 가격은" + price + "원 입니다. "); } public static void main(String[] args) { // 객체 생성 및 실행 shop thing1 = new shop(); shop thing2 = new shop("tottenham hotspur"); shop thing3 = new shop("tottenham hotspur", 3000); shop thing4 = new shop("arsnal", 1500); thing1.showPrice(); thing2.showPrice(); thing3.showPrice(); thing4.showPrice(); } }
매개변수 둘 중 하나만 다른 타입이면 아무 문제 없이 잘 실행된다.
성재형님이 "아마 오버로딩하고 동일하게 작동할 것 같은데" 라고 하셨는데 맞는 것 같다.
같은 타입을 쓰면 Duplicate method shop(String, int) in type shop 라면서 오류가 난다. 똑같은 메소드가 2개라서 안된다고 한다. 그럼 매개 변수 이름을 다르게 쓰면?
안된다.
'[Java]' 카테고리의 다른 글
[Java] 인터페이스 (0) 2023.10.26 예외 처리 (6) 2023.07.03 [JAVA] 매개 변수의 수를 모를 때 (4) 2023.07.03