ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.