코딩하는 털보

이펙티브 자바, 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 본문

Book/이펙티브 자바

이펙티브 자바, 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

이정인 2021. 8. 30. 17:01

이펙티브 자바, 아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

public 클래스의 public 필드는 API를 수정하지 않고는 (API를 사용하는 클라이언트에 피해를 줄 수 있으므로)내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다.
필드를 private으로 바꾸고 접근자 및 변경자 메서드를 활용하자.

public class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}

접근자를 제공하면 클래스 내부 표현 방식을 언제든 바꿀 수 있고 외부에서 필드에 접근할 때 부수작업을 수행할 수 있다. final 까지 사용하면 불변식까지 보장할 수 있다. 대신 변경자는 사용할 수 없다.

한편 package-private 클래스 또는 private 중첩 클래스는 데이터 필드를 노출한다 해도 아무런 문제가 없다. 그 클래스가 표현하려는 추상 개념만 올바르게 표현해주면 된다.

Comments