º Language º/Java

[자바기초] 클래스와 객체 | this가 하는 일

Poony 2023. 3. 1. 17:46

#  this가 하는 일이 뭐야?

 

1. 인스턴스 내에 자기 자신의 메모리를 가리키는 기능을 해

2. 생성자에서 다른 생성자를 호출해

3. 자신의 주소를 반환해

 

 

* 자세히 알아볼까?

 

1. 인스턴스 내 자신의 메모리를 가리키는 this

- 클래스에 생성된 인스턴스(instance) 스스로를 가리키는 예약어

 

* 인스턴스란?

- 인스턴스(instance)는 하나의 클래스에서 생성된 객체

- 즉 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것을 의미

- 이때 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)라고 한다.

 

인스턴스 예시

public Person(String name, int age) {
  this.name = name;
  this.age = age;
}

> 위와 같은 경우 this. 를 생략하게 되면 name 이나 age 가 파라미터(매개변수)로 사용되는 name과 age로 인식된다.

 

파라미터(매개변수)란?

- 파라미터(매개변수)란 메소드 수행에 필요한 입력값을 저장하는 변수

- 예를 들어, 전화를 거는 메소드를 만들 때 우리는 전화를 걸 대상에 대한 입력값이 필요한데 이러한 입력값을 기억해두는 변수가 바로 파라미터(매개변수) 

- 이러한 파라미터(매개변수)는 메소드의 구조상에서 소괄호 사이에 위치한다.

 

파라미터 예시

 

 

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

- 생성자가 또 다른 생성자를 호출하고 싶을 때 this를 사용할 수 있음

 

* 생성자가 하는 일은? 

객체가 생성될 때 초기화 작업을 함 (대체로 멤버변수를 값에 세팅) /  생성자는 1개 이상일 수 있음 = 오버로드(overload)

 

코드 예시

public Person() {
       name = "test"
       this ("이름없음",1);
}

public Person(String name, int age) {
       this.name = name;
       this.age = age;
}

> this.를 이용하여 다른 생성자를 호출할 때는 이전에 어떠한 statement(명령어)도 사용할 수 없다. (name = "test")

   그러므로 this. 가 가장 먼저 쓰여져야 한다. ( 호출할 생성자 인스턴스가 먼저 생성 되지 않아 this.이전 명령은 불가)

   * 위와 같이 생성자가 여러 개이고 파라미터만 다른 경우 constructor overloading(생성자 오버로딩) 이라고 한다.

 

 

3. 자신의 주소를 반환하는 this

- 자신의 주소(참조값)를 반환하는 기능을 가짐

 

코드 예시

class Person {
       public Person returnSelf() {
       return this;
    }
}
public static void main(String[] args) {
       System.out.println(p1.returnSelf()); 
}

> Person 메서드에서 반환값을 this. 로 출력한 값을 선언했을 때 출력되는 값은 인스턴스 주소 값이다.

 

 

완성

출력값

 

* 코드에서는 모두 this. 라고 쓰여있지만, 서로 다른 인스턴스(instence) 마다 값이 달라질 수 있다는 것을 유의하자.