본문 바로가기

Developer/Java-oop

#007. this 알아보기...

#007. this 알아보기...

 

1. this 란 객체를 생성할 때, 객체 안에서 자신을 가리키는 객체라고 보면 된다. 클래스를 복사해서 객체를 생성하는데.. 어떤 객체명이 들어올지 모르기 때문에 누구든 호출한 자신의 객체를 가리키는 객체가 된다. 테스트를 위해 oop 패키지에 ThisDemo Class를 만들고 아래와 같이 작성해본다.

코드

package oop;

public class ThisDemo {

    public String name;

    public String email;

    public int age;

    public ThisDemo(){    }

    public ThisDemo(String name, String email, int age){

        this.name = name;

        this.email = email;

        age = age;

        this.view();

    }

    public void view(){

        System.out.println("이름:"+name+", 이메일:"+email+",나이: "+age);

    }

    public static void main(String[] args) {

        ThisDemo td = new ThisDemo("김동혁", "ddong@abc.com", 2);

        ThisDemo td2 = new ThisDemo("이연희", "yeonhui@abc.com", 28);

    }

}

결과

이름:김동혁, 이메일:ddong@abc.com,나이: 0

이름:이연희, 이메일:yeonhui@abc.com,나이: 0

설명

문장17,18: 객체를 생성할 때 파라메터가 있는 생성자(문장7~12)를 호출한다.

문장8: this가 가리키는 변수는 파라메터에 있는 넘어온 변수를 말하는 것이 아니라. 문장3의 변수 name을 가리킨다. 문장8을 해석해보면, 문장3(this.name)의 name변수에 문장7(파라메터 name)의 값을 넣으라는 구문 이된다. 문장9번도 문장8과 같다.

문장10: 좌항의 age에 this가 없기 때문에.. 좌항과 우항의 age 변수는 문장7의 age가 된다. 그러므로 문장5의 age에는 값이 초기화 되지 않는다.

문장11: 메서드를 호출한다. 메서드의 경우는 파라메터로 넘어오지 않기 때문에 this.를 생략해도 결과는 같게 나올 것이다.

public ThisDemo(String name, String email, int age){ 여기에서 name, email, age가 멤버변수명과 동일하기 때문에 this를 사용하지만, 만약 변수명이 다르다면, this를 안써도 결과는 같게 나올 것이다. 하지만, 규칙은 아니지만 위 예제와 같이 많은 사람들이 사용하고 있다.

 

다음 시간엔 String 객체에 대해서 알아보자.

 

잡담. 이번 강좌는 생각은 많이 했는데.. 내용이 많이 짧습니다.^^;; 오늘도 화이팅입니다.(__)