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