초보개발자 긍.응.성
(이펙티브 자바 3) 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 본문
기본적으로 java 파일마다 하나의 public 클래스를 생성한다. public 클래스에서 필드에 지정해야 할 접근자 타입에 대하여 알아보자.
public 클래스
public 클래스는 패키지 바깥에서도 접근 가능하다. 그렇기에 public 클래스의 데이터 필드는 private 접근자를 이용하여 노출을 제한해줄 필요가 있다
. public 클래스가 필드를 public으로 공개하면 클라이언트는 이를 활용하기 때문에, 접근 및 수정이 일어날 수 있다.
불변(final) 필드라면 public 으로 선언하더라도 수정이 일어나지 않겠지만, 여전히 API를 변경하지 않고는 표현 방식을 바꿀 수 없다는 단점이 존재한다.
public 클래스 접근 제한
private 접근 제한자를 통해 필드를 공개하지 않도록 하고, 생성한 getter를 통해서만 접근할 수 있도록 해야 한다.
이 방법은, 내부 표현 방식이 수정될 때(필드 이름의 수정) 공개한 API인 getter 내부 로직만 수정하고 이를 이용하는 클라이언트 코드의 변경은 막을 수 있다는 장점이 있다.
package-private 클래스 혹은 private 중첩 클래스
package-private 클래스 혹은 private 중첩 클래스라면 데이터 필드를 노출해도 큰 문제가 없다
. 클래스의 선언 면에서나 이를 사용하는 클라이언트 코드 면에서나 private 접근 제한자나 public 메서드를 사용하지 않는 것이 더 깔끔하다.
package-private 클래스는 이 클래스를 포함하는 패키지 안에서만 동작하기에, 데이터 표현 방식의 변화가 패키지 바깥 코드에 변경사항을 만들지 않는다. private 중첩 클래스는 이 클래스를 포함하는 외부 클래스 까지만으로 접근이 제한되기에 더 안정적이다.
정리
public 클래스는 절대 가변 필드를 노출해서는 안 된다. 불변 필드도 노출하지 않는 것을 권한다. package-private 클래스나 private 중첩 클래스에서는 필드를 노출하는 것이 더 나을 때도 있다.
'책 정리 > 이펙티브 자바 3' 카테고리의 다른 글
(이펙티브 자바 3) 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2020.10.20 |
---|---|
(이펙티브 자바 3) 20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2020.10.19 |
(이펙티브 자바 3) 18. 상속보다는 컴포지션을 사용하라 (0) | 2020.10.17 |
(이펙티브 자바 3) 17. 변경 가능성을 최소화하라 (0) | 2020.10.16 |
(이펙티브 자바 3) 15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2020.10.09 |
(이펙티브 자바 3) 14. Comparable을 구현할지 고려하라 (0) | 2020.10.04 |
(이펙티브 자바 3) 13. clone 재정의는 주의해서 진행하라 (0) | 2020.10.02 |
(이펙티브 자바 3) 12. toString을 항상 재정의하라 (0) | 2020.07.25 |