티스토리 뷰

Java/Java 올인원 패키지

6. This (Java)

GrapeMilk 2020. 3. 14. 17:47

Goal 

 - this에 대해 알아본다.

 - this의 기능을 실제 코드를 통해 알아본다.

 

 

밑의 문장과 그림을 이해 할 수 있으면 this는 어렵지 않다.

 

 this가 가르키는 값은 heap메모리에 있는 인스턴스의 값을 참조하는 변수(day)가 가르키는 값과 같다. 

 

이게 무슨 의미인지 this의 역할을 살펴보면서 이해하자.

1. this의 역할 3가지

 - 자신의 메모리를 가리킴

 - 생성자에서 다른 생성자를 호출 함

 - 인스턴스 자신의 주소를 반환

 

1-1 자신의 메모리를 가리키는 this

 - 메서드를 통해 인스턴스 변수의 값을 할당해 줄때 this 키워드를 사용하는 경우가 많다

 

public class Subject {
	
	String name;
	int score;

	public Subject (String name, int score) {
		this.name = name;
		this.score = score;
	}

}

 - 위의 코드를 해석하면, Subject 클래스를 인스턴스로 생성할 때, 생성자에 인자값으로 name과 score를 입력하여, 인스턴스 변수인 name과 score에 값을 셋팅해주는 것을 알 수 있다.

 - 이때, Subject 생성자를 정의하는 메서드에 this 키워드를 명시함으로서, name과 score는 생성자를 통해 구현되는 현재 인스턴스의 변수임을 가르킨다.

 - this 키워드가 없으면, name과 score변수는 Subject 생성자 안에서만 사용되는 지역변수로 인식되고, 실제 인스턴스 변수의 값을 변경하지 않게 된다.

 

1-2 생성자에서 다른 생성자를 호출하는 this

 - this.variable 형태로 쓰면, 자기 자신의 변수임을 나타내고

 - this() 형태로 쓰면 자신의 생성자를 의미한다.

 - 생성자에서 다른 생성자를 호출하는 작업을 수행할때는 다른 생성자를 호출하는 선언이 항상 다른 선언보다 우선시 되야 한다.

 

public class Person {
    
    String name;
    int age;
    
    public Person() { //defalut 생성자에서 this 키워드롤 통해 Person(String name, int age)생성자를 불러옴.
        this("noName", 1); // Constructor call must be the first statement in a constructor
    }
    
    public Person (String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public void showInfo() {
        System.out.println(name + "," + age);
    }

}
public class PersonTest {

    public static void main(String[] args) {
        
        Person personNoname = new Person(); //기본 생성자에서 다른 생성자를 호출하고 있기 때문에 출력값은 다름
        personNoname.showInfo();
        
        Person personLee = new Person("Lee", 20);
        personLee.showInfo();

    }

}

 

1-3 인스턴스 자신의 주소를 반환하는 this

 - this형태로 쓰면, 주소값을 지니고있는 참조변수의 역할을한다.

 - 즉, this는 현재 인스턴스의 값을 가르키는 참조변수이다.

 

public class Person {
    
    public Person getSelf() {
        return this;
    }
    
    public static void main(String[] args) {

        Person personLee = new Person();
        
        Person p = personLee.getSelf();
        System.out.println(p);
        System.out.println(personLee);
    }
    

}

 - 위 코드의 실행결과, personLee의 주소값이 출력되며 p에는 this의 주소값이 담겨있기 때문에 p와 personLee의 주소값은 같다.

'Java > Java 올인원 패키지' 카테고리의 다른 글

8. static 변수, 메서드 (Java)  (0) 2020.03.14
7. 객체 간 협력  (0) 2020.03.14
5. 접근 제어자, 정보은닉 (Java)  (0) 2020.03.14
4. 참조 자료형 (reference data type)  (0) 2020.03.14
3. 생성자 (Java)  (0) 2020.03.14
댓글