old/Programming

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

은색거북이 2023. 7. 30. 23:00
반응형

질문

자바에서 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를 사용할지 여부를 결정할 수 있습니다.

반응형