Link
Today
Total
05-20 15:19
Archives
관리 메뉴

초보개발자 긍.응.성

(이펙티브 자바 3) 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 본문

책 정리/이펙티브 자바 3

(이펙티브 자바 3) 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

긍.응.성 2020. 10. 10. 15:22
반응형

기본적으로 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 중첩 클래스에서는 필드를 노출하는 것이 더 나을 때도 있다.

반응형
Comments