개발 공부/Java
이펙티브 자바 아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 완벽 공략
개발인생
2022. 11. 14. 09:41
반응형
아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 완벽 공략
이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다.
내부를 노출한 Dimension 클래스의 심각한 성능
단순히 public 필드를 만들었다고해서 설계적인 문제는 생기겠지만 어떻게 성능 문제까지 생길 수 있을까
public class DimensionExample {
public static void main(String[] args) {
Button button = new Button("hello button");
button.setBounds(0, 0, 20, 10);
Dimension size = button.getSize();
System.out.println(size.height); // 내부 필드를 public 하게 노출
System.out.println(size.width); // 내부 필드를 public 하게 노출
}
}
어떻한 버튼을 만들고 버튼의 getSize
메서드를 통해 size 를 가져오는데 Dimension
타입으로 리턴한다.
Dimension
타입을 사용하는 부분을 보면 알 수 있듯이 public 필드이기 때문에 직접적으로 필드에 접근이 가능하다.
여기서 문제가 발생한다.
언제 어디서라도 Dimension
타입을 사용할 때는 복사 를 해야한다.
복사 를 하는 작업에서부터 성능 저하가 시작된다.
불필요한 인스턴스 를 만드는 작업을 하기 때문이다.
한 두개 정도의 인스턴스를 만드는 경우라면 큰 문제는 되지 않는다.
수백 만 개를 만들게 되면 성능의 문제가 발생하게 된다.
내부 필드를 public 하게 노출 하게되면 언제 어디서든 값이 변할 수 있고, 함부로 값을 변경시킬 수 없기 때문에
내부 필드를 public 하게 노출 한 인스턴스의 불안정함을 인지하고 복사 를 하여 사용하는 작업 또한 불편하다.
반응형