티스토리 뷰

Java

this(), this

Alledy 2019. 4. 30. 17:46

this()

  • 다른 생성자를 통해 생성자를 호출하는 경우
package day6;

class Book {
    String title;
    String author;
    int price; 
    // constructor
    Book() {
        this("자바의 정석", "남궁성", 30000); // 다른 생성자를 통해 생성자를 호출하는 경우 this()문이 맨 첫줄이어야만 한다. 
        System.out.println("자바의 정석 객체 생성"); 
    }
    Book(String title, String author, int price) {
        this.title = title;
        this.author = author;
        this.price = price;
    }
    // print method
    void getBookInfo() {
        System.out.printf("책이름: %s, 저자: %s, 가격: %d원%n",title, author, price);
    }
}

public class BookTest {
    public static void main(String[] args) {
        Book[] set = new Book[5];
        set[0] = new Book(); 
        set[1] = new Book("가면산장 살인사건", "히가시노 게이고", 15000);
        set[2] = new Book("표백", "장강명", 12000); 
        set[3] = new Book("두 사람", "김영하", 11000);
        set[4] = new Book("담론", "신영복", 20000);        
        for(int i = 0 ; i < set.length ; i++) {
            set[i].getBookInfo(); 
        }
    }
}

아규먼트가 있는 다른 컨스트럭터를 이용해서 컨스트럭터를 만들 수 있다! 그럴 경우의 문법은 위와 같으며, this문이 항상 맨 첫줄에 와야한다는 규칙이 있다. 클래스 이름 대신 this를 사용해야 하고, this("자바의 정석", "남궁성", 30000); 아랫줄의 print문이 먼저 와서는 안된다.

this

  • 생성자가 생성자를 호출하는 this()와 다르게, this는 인스턴스 멤버에 접근할 수 있도록 해주는 참조변수이다.
Car(String color, String gearType, int door) {
    this.color = color;
    this.gearType = gearType;
    this.door = door;
}

Car라는 생성자에서 우변의 color, gearType, door는 매개변수를 가리킨다. 반면 좌변의 color, gearType, door는 인스턴스변수를 가리킨다. 그러나 이름이 동일하므로(다르게 설정할 수도 있으나 일치하는 경우가 많다) this를 통해서 인스턴스변수에 접근하는 것과 매개변수를 구분해 준다. this는 인스턴스멤버에 접근할 수 있는 참조변수이며, this는 인스턴스 자기자신을 가리킨다.

static 메서드(클래스 메서드)에서는 this도 사용할 수 없다. 왜냐하면 this는 인스턴스 자기 자신인데, 클래스 메서드가 만들어질 때에 인스턴스가 존재하지 않을 가능성이 있기 때문이다.

 

(사족)

this가 인스턴스 자기자신이라고 해서, 인스턴스는 대체 어디있지? 라고 생각했다. 인스턴스 변수가 있는 것도 알겠고, 그래서 인스턴스 변수에 접근하기 위해 인스턴스.변수 이런식으로 접근해야 하니까 this가 인스턴스 자리에 있다는 건 알겠는데, 내가 아는 인스턴스 생성은 new opertator를 통해 만들어야 하는데, 아직 선언한 적이 없는데? 라고 생각했다.

생각해보니 이건 constructor로 나중에 인스턴스를 생성하기 위한 함수로 쓰이는 것이다. constructor 이름이 Car이라고 하면 new Car(param, param ...) 으로 인스턴스를 생성할 예정이고 그 아직 생성되지 않은 인스턴스를 가리켜 아직 명칭이 없기 때문에 this라고 하는 것 같다. 그래서 아직 인스턴스 이름이 뭔지는 모르지만 생성될 때 그 인스턴스 멤버에 이 매개변수를 할당할거야! 라고 하는게 생성자인 것 같다.

'Java' 카테고리의 다른 글

참조형 매개변수, 참조형 반환  (0) 2019.05.07
변수의 종류(클래스변수, 인스턴스변수, 지역변수)  (0) 2019.05.07
Getter and Setter  (0) 2019.04.30
Continue  (0) 2019.04.30
객체지향언어, 메서드, 생성자  (0) 2019.04.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함