- '퇴보한' 클래스는 public이어서는 안 된다.
class Point {
public double x;
public double y;
}
- 이런 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다(아이템 15).
- 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다.
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; }
}
- public 클래스에서라면 이 방식히 확실히 맞다. 패키지 바깥에서 접근할 수 있는 클래스라면 접근자를 제공함으로써 클래스 내부 표현 방식을 언제든 바꿀 수 있는 유연성을 얻을 수 있다.
- package-private 클래스 혹은 private 중첩 클래스라면 데이터 필드를 노출한다 해도 하등의 문제가 없다.
[핵심 정리]
public 클래스는 절대 가변 필드를 직접 노출해서는 안 된다. 불변 필드라면 노출해도 덜 위험하지만 완전히 안심할 수는 없다. 하지만 package-private 클래스나 private 중첩 클래스에서는 종종 (불변이든 가변이든) 필드를 노출하는 편이 나을 때도 있다.
'공부 기록 > Java' 카테고리의 다른 글
[이펙티브 자바 3/E] 아이템17 - 변경 가능성을 최소화하라 (0) | 2023.09.07 |
---|---|
[JPA] 6장 - 다양한 연관관계 매핑(1) - 다대일, 일대다 (0) | 2023.09.07 |
[이펙티브 자바 3/E] 아이템15 - 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2023.08.23 |
[JPA] 5장 - 연관관계 매핑 기초(3) - 양방향 연관관계 (0) | 2023.08.18 |
[JPA] 5장 - 연관관계 매핑 기초(2) - 연관관계 사용 (0) | 2023.08.11 |