본문 바로가기

old/Programming

자바 오브젝트 생성시, this 키워드를 사용하는 이유

반응형

질문

자바에서 this를 사용하는 것과 사용하지 않는 것의 차이점은 무엇인가요?

개요

this를 사용하는 것과 사용하지 않는 것은 변수 충돌 방지, 메서드 체이닝, 가독성과 명확성 측면에서 차이가 있습니다.

이유

  • 변수 충돌 방지: 메서드의 매개변수 이름과 인스턴스 변수 이름이 같은 경우 this를 사용하여 인스턴스 변수와 매개변수를 구분할 수 있습니다.
  • 메서드 체이닝: this를 반환하여 같은 객체에서 연속적으로 메서드를 호출할 수 있습니다.
  • 가독성과 명확성: this를 사용하면 인스턴스 변수나 메서드를 명확하게 참조할 수 있어 코드의 가독성과 명확성을 향상시킬 수 있습니다.

차이점

  • this를 사용할 경우:
public class MyClass {
    private int value;

    public void setValue(int value) {
        this.value = value; // "this" 키워드를 사용하여 인스턴스 변수를 참조
    }
}

  • this를 사용하지 않을 경우:
public class MyClass {
    private int value;

    public void setValue(int newValue) {
        value = newValue; // 인스턴스 변수를 직접 참조
    }
}

예제

변수 충돌 방지

메서드의 매개변수 이름이 인스턴스 변수와 동일한 경우, this를 사용하여 인스턴스 변수를 구분할 수 있습니다.

이렇게 하면 변수 충돌을 방지할 수 있습니다.

예를 들어, 다음과 같이 setValue 메서드 내에서 인스턴스 변수 value와 매개변수 value의 이름이 같은 경우를 생각해봅시다:

public class MyClass {
    private int value;

    public void setValue(int value) {
        this.value = value;// "this" 키워드를 사용하여 인스턴스 변수를 참조
    }
}

위의 예시에서 this.value는 인스턴스 변수를 참조하고, value는 매개변수를 참조합니다. 이를 통해 변수 충돌을 방지하고 올바른 변수에 값을 할당할 수 있습니다.

메서드 체이닝

this를 사용하여 메서드 체이닝을 구현할 수 있습니다.

메서드 체이닝은 동일한 객체에서 연속적으로 메서드를 호출하는 것을 의미합니다.

this를 반환하면 같은 객체를 가리키고, 이를 통해 여러 메서드를 연속적으로 호출할 수 있습니다.

public class MyClass {
    private int value;

    public MyClass setValue(int value) {
        this.value = value;
        return this; // 같은 객체를 반환하여 메서드 체이닝 가능
    }

    public MyClass printValue() {
        System.out.println(value);
        return this;
    }
}
MyClass obj = new MyClass();
obj.setValue(10).printValue(); // 메서드 체이닝

위의 예시에서 setValue 메서드는 this를 반환하고, printValue 메서드도 this를 반환합니다. 이렇게 하면 다음과 같이 메서드 체이닝을 사용할 수 있습니다:

가독성과 명확성

그러나, this 키워드는 필수적으로 사용해야 하는 것은 아닙니다.

메서드 내에서 인스턴스 변수를 참조하지 않는 경우에는 this를 생략할 수 있습니다.

메서드가 인스턴스 변수를 참조하지 않고 파라미터만 사용한다면, this를 사용하지 않아도 됩니다.

public class MyClass {
    public void printName(String name) {
        System.out.println("Hello, " + name);
    }
}

this를 사용하지 않고 인스턴스 변수나 메서드를 참조하면, 해당 변수나 메서드가 현재 객체에 속해 있다는 것을 가정해야 합니다. 이는 가독성과 명확성 측면에서 약간의 모호함을 가져올 수 있습니다. 따라서, this 키워드는 필요한 경우에만 사용하면 됩니다. 코드의 가독성과 목적에 맞게 사용하면 됩니다.

결론

this를 사용하면 변수 충돌을 방지하고, 메서드 체이닝을 구현하며, 코드의 가독성과 명확성을 향상시킬 수 있습니다. 그러나 필수적으로 사용해야 하는 것은 아니며, 상황에 따라 this를 사용할지 여부를 결정할 수 있습니다.

반응형