반응형
ITEM 16 "public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라"
class Point {
public double x;
public double y;
}
간혹 이렇게 데이터 필드 값들을 모아놓은 클래스들을 본 적이 있을 것이다.
데이터 전달용(DTO)이나 값 객체, 데이터 복사용 객체로 클래스의 기능이 많이 퇴보하긴 했지만 자주 사용한다.
이런 public 클래스를 선언할 때 필드 값들을 public 지시어로 두면 데이터 필드에 직접 접근할 수 있어 캡슐화의 이점을 제공하지 못한다. 불변식을 보장할 수 없으며 API 를 수정하지 않고는 내부 표현을 바꿀 수 없다. 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다는 점도 크다.
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 클래스라면 getter 와 setter 접근자 메서드를 제공하고 내부 필드들은 private 로 감추자. 클래스 내부 표현 방식을 유연하게 바꿀 수 있다는 장점이 있다. package-private 클래스나 private 클래스라면 데이터 필드를 노출하더라도 문제가 없다. 같은 패키지안에서 사용하거나, 톱레벨 클래스에서만 접근하니 괜찮다.
반응형
'독후감 > Effective JAVA' 카테고리의 다른 글
[Effective JAVA] 18 "상속보다는 컴포지션을 사용하라" (0) | 2022.05.10 |
---|---|
[Effective JAVA] 17 "변경 가능성을 최소화하라" (0) | 2022.05.10 |
[Effective JAVA] 15 "클래스와 멤버의 접근 권한을 최소화하라" (0) | 2022.05.09 |
[Effective JAVA] 14 "Comparable 을 구현할지 고려하라" (0) | 2022.05.06 |
[Effective JAVA] 13 "clone 재정의는 주의해서 진행하라" (0) | 2022.05.05 |