윤개발

[ITEM16] public 클래스에서는 public 필드가 아닌 접근자 메서드(getter)를 사용하라. 본문

책 내용 요약/Effective Java 3판

[ITEM16] public 클래스에서는 public 필드가 아닌 접근자 메서드(getter)를 사용하라.

DEV_SJ 2020. 4. 14. 13:45
class Point{
   public double x;
   public double y;
}

이처럼 인스턴스 필드들을 모아둔 목적없는 퇴보한 클래스를 작성하려 할 때가 있다.
이러한 클래스는 직접 접근이 가능하여 캡슐화의 이점을 제공하지 못하고, 불변을 보장할 수 없다.
객체지향에서는 이런 클래스를 상당히 싫어해서

필드를 모두 private로 바꾸고 public 접근자 getter를 추가한다.

하지만 package-private(패키지에서만 접근할 수 있도록) 클래스 혹은
private 중첩 클래스(클래스 안에 클래스)라면 데이터 필드를 노출한다 해도 하등의 문제가 없다.

정리

public 클래스는 절대 가변 필드를 직접 노출해서는 안된다.
하지만 pacakge-private 클래스나 private 중첩 클래스에서는 노출하는 편이 나을 때도 있다.

Comments