본문 바로가기
Language/Java

이펙티브 자바 - Public 클래스의 Public 필드

by ocwokocw 2021. 10. 26.

- 이 글은 Effective Java 를 기반으로 작성되었습니다.

- 개요

public 클래스에서 멤버 변수를 public 으로 대외에 공개하지 말라는 규칙을 본적이 있을것이다. 이렇게 멤버 변수를 대외에 공개하면 많은 문제점들이 일어날 수 있다.

  • 캡슐화의 이점을 누릴수가 없다.
  • 내부표현을 변경하기 위해서 API 를 변경해야 한다.
  • 불변식을 강제할 수 없다.
  • 필드 사용시 그에 따른 동작을 수행할 수 없다.

해결법은 그리 어렵지 않은데 public 멤버 변수를 private 변수와 public 접근자 메서드로 변경하는것이다. 

 


- 공개해도 괜찮은 경우

private 변수와 public 접근자 메서드는 정설처럼 여겨져서 많은 사람들이 지키는 규칙이다. 그래서 코딩할 때 해당 변수는 외부에 공개되어도 되는 변수인가 라고 생각하면서 하는 것이 아니라 관습적으로 private 변수들을 선언해놓고, IDE 자동 생성기능으로 public 접근자를 생성하는 경우가 일반적이다.

 

만약 package-private 이거나 private 중첩 클래스의 경우라면 public 필드를 사용해도 괜찮은 경우가 존재한다. 클라이언트 코드가 종속성을 가지게 되긴 하지만 클라이언트가 같은 package 내에서 있을 수 밖에 없게 되어 package 외부에 영향없이 코드를 변경할 수 없다.

 

만약 변경불가능(immutable) 필드라면 외부에 공개해도 위험성이 덜하다. API 변경없이 내부 표현 변경이 가능하고, 불변식을 강제할 수 있다. 하지만 굳이 그래야할 필요가 없다면 public 으로 공개할필요는 없다.

댓글