public 메서드에 public 필드를 두지 마라
아래 클래스는 데이터 필드에 직접 접근할 수 있어 캡슐화의 이점을 갖지 못한다. 내부 표현을 바꾸기 위해 API를 수정해야 하고 불변식도 보장할 수 없다.
class Point {
public double x;
public double y;
}
패키지 바깥에서 접근할 수 있도록 의도된 클래스라면 아래와 같이 설계되어야 맞다. 이렇게 접근자가 있다면 내부 구현을 자유롭게 바꿀 수 있다.
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() { return x; }
public double getY() { return y; }
public void setX(double X) { this.x = x; }
public void setY(double Y) { this.y = y; }
}
그러나 만약 packege-private이거나 private 중첩 클래스라면 필드를 노출해도 상관없다. 클라이언트 코드가 이 변수에 묶이지만, 어차피 API 내부 코드이기 때문이다.
'Java > 내맘대로 Effective Java' 카테고리의 다른 글
[Item 15] 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2022.03.28 |
---|---|
[Item 14] Comparable을 구현할지 고려하라 (0) | 2022.03.28 |
[Item 13] clone 재정의는 주의해서 진행해라 (0) | 2022.03.17 |
[Item 12] toString을 항상 재정의하라 (0) | 2022.03.16 |
[Item 11] equals를 재정의하려거든 hashCode도 재정의해라 (0) | 2022.03.15 |