쌓고 쌓다

[JAVA] this 와 this() 본문

프로그래밍/java

[JAVA] this 와 this()

승민아 2021. 12. 21. 01:35

this의 필요성

class Person {

    public String name;
    public int age;

    public Person(String name, int age)
    {
        name = name; // name = name ?
        age = age; // age = age ?
    }

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}
public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person("이름",1);
        Aperson.ShowInformation();
    }
}

실행 결과

 

위와 같이 Person의 생성자에 매개변수로 name과 age를 받는데

이는 클래스의 name과 age와 겹친다. 위의 코드 name = name에서 모두 그저 매개변수의 name에 접근하는 것 그친다.

그래서 객체 Aperson의 정보가 초기화가 안되어 있는것이다.

 

매개변수의 이름 또한 읽는 사람에게 그 용도나 사용처를 알기 쉽게 적합한 이름으로 쓰는데 바꾸기도 그런 상황이다.

이럴 때 this를 사용하는 것이다.

 

this 사용 예시 (1)

package com.company;

class Person {

    public String name;
    public int age;

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

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}
public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person("이름",1);
        Aperson.ShowInformation();
    }
}

실행 결과

내가 원하는 대로 이름, 1로 초기화가 되었다.

 

This 사용 예시(2)

class Person {

    public String name;
    public int age;

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


    public void Set(String name, int age) // Set을 통해 이름과 나이 변경하는 함수 추가
    {
        this.name="name";
        this.age=age;
    }
    
    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}
public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person("이름",1);
        
        Aperson.ShowInformation();
        
        Aperson.Set("개명",999);
        
        Aperson.ShowInformation();
        
    }
}

Person클래스에 set 함수를 만들었다. 이름과 나이를 넘겨주면 해당 객체의 이름과 나이를 변경해주는 함수이다.

 

실행 결과

이처럼 생성자를 통해 name을 이름, age를 1로 초기화하여 객체를 생성하였지만

set함수를 통해 this를 이용하여 객체 Aperson의 name과 age에 접근하여 변경을 성공하였다.

 

This 사용법

this.name = name;
this.age = age;

this.name처럼 this는 현재 객체의 멤버 name에 접근하는 것으로 작성한다.

이처럼 핵심은 현재 객체의 접근을 하는 것이다.

 

부가적으로 메소드(함수)가 자신 객체를 반환하는 경우도 있는데 그때도 아래와 같이 사용이 가능하다

public Person GetPerson()
{
	return this;
}

 

 

This()

: 생성자 내에서 다른 생성자를 불러올 때 사용된다.

class Person {

    public String name;
    public int age;

    public Person(String name, int age) // 이름과 나이가 있는 생성자
    {
        this.name = name;
        this.age = age;
    }

    public Person(String name) // 이름만 있는 생성자
    {
        this(name,999);
        System.out.println("나이를 몰라요");
    }

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}
public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person("사람이름"); // 이름만 존재
        Aperson.ShowInformation();
    }
}

위 코드와 같이  Main 함수에서 Aperson 객체 생성을 위해 이름만 있는 생성자가 실행이 될 것이다.

이름만 있는 생성자로 갔더니 this(name,999)를 실행하게 되는데

이게 이 객체의 name과 999를 받는 생성자를 호출하는 것이다.

그러므로 이름과 나이가 있는 생성자에 name과 999를 전달하게 되어
Aperson은 name으로 "사람 이름"과  age를 999로 초기화가 된다.

 

실행 결과

 

실행 과정을 나타내면 아래와 같다.

 

This() 사용의 주의점

1. this()는 생성자 코드 내에서만 호출할 수 있다.

2. this()는 반드시 생성자의 첫 문장에 와야 한다.

      첫 문장이 아닐 경우 에러를 일으킴.

    public Person(String name)
    {
        System.out.println("나이를 몰라요");  // 컴 파 일 에 러 발 생
        this(name,999);
    }

3. 같은 클래스 내의 다른 생성자만 호출 가능하다.

'프로그래밍 > java' 카테고리의 다른 글

[JAVA] 함수(메소드)의 매개변수  (0) 2021.12.21
[JAVA] 객체 배열  (0) 2021.12.21
[JAVA] 생성자  (0) 2021.12.20
[JAVA] 클래스와 객체  (0) 2021.12.20
[JAVA] for-each 문  (0) 2021.12.19
Comments