ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | This
    JAVA/JAVA 2020. 1. 22. 17:41

    This

    생성된 인스턴스(객체) 스스로를 가리키는 예약어

    멤버 변수와 메서드 매개변수의 이름이 같을 경우에 컴퓨터가 구분하지 못하는 경우 발생
    → 멤버 변수 이름 앞에 this 작성


    ① 자신의 인스턴스를 가리키는 This

    main()에서 같은 클래스를 이용해서 서로 다른 이름의 객체를 생성하더라도
    각각의 객체 내의 메소드와 멤버 변수를 스스로의 객체에서 찾을 수 있도록 this를 사용


    참조 변수

    인스턴스를 가리키는 변수, '클래스 이름@메모리 주소'가 출력됨

    public class ThisTest2 {
    
        // 기본 생성자
        ThisTest2(){
            // 자기 객체의 참조 변수를 출력할 수 있도록 this 사용
            System.out.println("현재 생성된 객체: " + this);
        }
        public static void main(String[] args) {
    
            ThisTest2 tt = new ThisTest2();
            System.out.println("main()에서 생성된 tt객체: " + tt);
             /* 현재 생성된 객체: j200122.ThisTest2@15db9742
                 main()에서 생성된 tt객체: j200122.ThisTest2@15db9742 */
    
            ThisTest2 tt2 = new ThisTest2();
            System.out.println("main()에서 생성된 tt2객체: " + tt2);
             /* 현재 생성된 객체: j200122.ThisTest2@6d06d69c
                 main()에서 생성된 tt2객체: j200122.ThisTest2@6d06d69c */
        }
    }

    ※ 기본 생성자 내부에 작성된 this가 생성된 객체에 따라 다른 참조 변수를 가리킴


    사용례

    public class ThisTest {
    
        private int a = 100;
    
        public void setA(int a) {
            this.a = a;     /* a = a; 로 작성하면 setA()로 값을 저장하지 못하고
                                100이 출력됨 */
        }
    
        public int getA() {
            return a;
        }
    
        public static void main(String[] args) {
             // 객체 생성
            ThisTest tt = new ThisTest();
             /* this.a = a; 에서 this는 tt 인스턴스(객체)를 가리키며,
                여러 개의 객체가 생성된 경우, 각각의 객체를 지시함 */
            tt.setA(2);
            int get = tt.getA();
            System.out.println(get);    // 2
        }
    }

    ② 생성자에서 다른 생성자를 호출하는 This

    클래스에 생성자가 여러 개 있을 때 생성자에서 다른 생성자를 호출할 때 this 사용 가능


    생성자 호출 This_주의 사항

    this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드 작성 불가

    기본 생성자에서 생성이 완료되는 것이 아니라
    this를 사용해 다른 생성자를 호출하므로, this가 가장 먼저 와야 함

    → 클래스 생성이 완료되지 않은 시점에 다른 코드가 있다면 오류 발생
    Constructor call must be the first statement in a constructor

     

    public class CnstCall {
        String name;
        int age;
    
        CnstCall() {
            this("김덕배", 22);
        }
    
        CnstCall(String name, int age) {
            this.name = name;
            this.age = age;
            System.out.println("이름: " + name + ", 나이:" + age);
        }
    
        public static void main(String[] args) {
            CnstCall cc = new CnstCall();
             // 이름: 김덕배, 나이:22
        }
    
    }

    ※ 생성자 호출시 호출된 생성자의 모든 코드가 실행됨


    간단해 보이지만 어려운 개념인 this에 대해 살펴보았습니다.

    this에 대해 꼭 알아 두어야 하는 것은 this의 값이 객체(인스턴스)의 참조 변수를 가리킨다는 것입니다.

    생성자 호출 this 역시 생성자가 속한 객체에 있는 또 다른 생성자에 매개변수를 전달하면서 호출하는 것이기 때문에

     this는 자기 자신의 객체를 가리킨다는 점만 이해하면 될 것 같습니다.

    댓글

Designed by Tistory.