- 이 글은 Effective Java 를 기반으로 작성되었습니다.
- 개요
public 클래스에서 멤버 변수를 public 으로 대외에 공개하지 말라는 규칙을 본적이 있을것이다. 이렇게 멤버 변수를 대외에 공개하면 많은 문제점들이 일어날 수 있다.
- 캡슐화의 이점을 누릴수가 없다.
- 내부표현을 변경하기 위해서 API 를 변경해야 한다.
- 불변식을 강제할 수 없다.
- 필드 사용시 그에 따른 동작을 수행할 수 없다.
해결법은 그리 어렵지 않은데 public 멤버 변수를 private 변수와 public 접근자 메서드로 변경하는것이다.
- 공개해도 괜찮은 경우
private 변수와 public 접근자 메서드는 정설처럼 여겨져서 많은 사람들이 지키는 규칙이다. 그래서 코딩할 때 해당 변수는 외부에 공개되어도 되는 변수인가 라고 생각하면서 하는 것이 아니라 관습적으로 private 변수들을 선언해놓고, IDE 자동 생성기능으로 public 접근자를 생성하는 경우가 일반적이다.
만약 package-private 이거나 private 중첩 클래스의 경우라면 public 필드를 사용해도 괜찮은 경우가 존재한다. 클라이언트 코드가 종속성을 가지게 되긴 하지만 클라이언트가 같은 package 내에서 있을 수 밖에 없게 되어 package 외부에 영향없이 코드를 변경할 수 없다.
만약 변경불가능(immutable) 필드라면 외부에 공개해도 위험성이 덜하다. API 변경없이 내부 표현 변경이 가능하고, 불변식을 강제할 수 있다. 하지만 굳이 그래야할 필요가 없다면 public 으로 공개할필요는 없다.
'Language > Java' 카테고리의 다른 글
이펙티브 자바 - 계승대신 구성 (0) | 2021.11.06 |
---|---|
이펙티브 자바 - 변경가능성 최소화 (0) | 2021.10.30 |
이펙티브 자바 - 클래스와 멤버 접근 권한 (0) | 2021.10.19 |
이펙티브 자바 - Comparable (0) | 2021.10.17 |
이펙티브 자바 - clone 재정의 (0) | 2021.10.11 |
댓글