Minwoo Dev.

[Java] this 본문

Java

[Java] this

itisminu 2024. 3. 24. 12:25
728x90
반응형
SMALL

this

객체지향 프로그래밍을 할 때, 클래스 내부의 메서드에서 내부변수에 접근할 때 사용한다.

 

package test;

public class classEx {
    int num;

    void addNum(int num) {
        num += num;
    }

    void showNum(){
        System.out.println("num = "+num);
    }
}

 

위와 같이 클래스 내부에 num이라는 내부변수가 존재하는데, addNum이라는 메서드에서 매개변수로 받아온 num을 내부변수의 num에 저장하고 싶다.

 

 

두 변수의 이름이 같다. 따라서 그냥 위처럼 작성하고 실행한다면

package test;

public class classMain {
    public static void main(String[] args) {
        classEx ex = new classEx();
        ex.num = 10;
        ex.addNum(15);
        ex.showNum();
    }
}

 

num의 초기값으로 10을 넣고, 15를 더할 것이다.

 

결과가 25가 나와야하는 것이 아닌가 ?

 

그 이유는 클래스에서 내부변수 num에 매개변수로 받아온 num을 넣지 않았기 때문이다.

package test;

public class classEx {
    int num;

    void addNum(int num) {
        num += num;
    }

    void showNum(){
        System.out.println("num = "+num);
    }
}

 

 

위 부분의 addNum에서, num+=num의 두 num은 각각 어떤 num을 의미해야 하는가 ?

num(클래스의 내부변수의 num) += num(addNum의 매개변수로 받아온 num)이 우리가 바라는 바일 것이다.

 

객체의 내부변수인 num의 초기값으로 10을 넣어주고, 더해주는 addNum 메서드에서는 변수가 애매하여 아무 일도 일어나지 않았다.

 

그리고 나서 마지막의 showNum에서는 내부변수의 num이 출력되어 10이 출력된 것이다.

 

이처럼 내부변수의 이름과 메서드에서 인자로 받아와 사용하는 변수가 같을 때, 우리는 내부변수를 명시해줘야 할 것이다.

 

그럴 때, this를 사용한다.

this는 이 객체 자신을 의미한다.

package test;

public class classEx {
    int num;

    void addNum(int num) {
        this.num += num;
    }

    void showNum(){
        System.out.println("num = "+num);
    }
}

 

 

addNum의 num을 this.num으로 바꾸어주면, 이 객체 자신의 num 변수를 의미하므로 함수 내부의 num이 아닌 객체 내부변수인 num을 사용하게 된다.

 

결과적으로 정상적으로 작동한다.

 

 

매개변수와 내부 변수의 이름이 같거나, 객체 내부의 값에 접근하고자 할 때는 this를 사용해야 한다.

728x90
반응형
LIST