개발 공부/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 하게 노출 한 인스턴스의 불안정함을 인지하고 복사 를 하여 사용하는 작업 또한 불편하다.

반응형