티스토리 뷰

이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기



// 이런 저급한 클래스는 절대 누구에게 보여주지 말 것
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; }
}
  • private 필드와 public 접근자 메서드(getter)로 바꿔야 마땅
  • 변경 가능 클래스라면 수정자(mutator) 메서드(setter)도 제공
  • package-private나 private로 선언된 중첩 클래스는 데이터 필드를 공개하는 것이 바람직할 때도 있다.
    (클래스 정의로 보나 클라이언트 코드로 보나, 접근자 메서드보다는 시각적으로 깔끔해 보인다)

    요약

  • public 클래스는 변경 가능 필드를 외부로 공개하면 안 된다.
  • package-private나 private로 선언된 중첩 클래스의 필드는 그 변경 가능 여부와는 상관없이 외부로 공개하는 것이 바람직할 때도 있다.


댓글