티스토리 뷰
반응형
이번 포스팅은 제목에서 무슨말을 하려 하는지 충분히 이해가 되리라 생각한다. 그럼 간단하게 인스턴스화를 막아야하는 상황에는 어떠한 것이 있는지 살펴보도록 하자.
정적 메서드와 정적 필드만 담은 클래스를 구성하고자 할 때 인스턴스화를 막을 수 있다. 정적 메서드와 정적 필드만 포함되어 있다면 이러한 코드들은 인스턴스를 생성하지 않아도 이미 메모리에 올라가있는 상태로 사용할 수 있다. 따라서 인스턴스화할 이유가 없는 것이다.
(이 방법 자체가 객체 지향적으로 사고하지 않는 것이기 때문에 추천하진 않지만 쓰임새가 분명히 존재한다.)
예를 들면 아래 상황에서 위와 같이 정적 메서드와 정적 필드만 담은 클래스를 구성할 수 있다.
- java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 관련 메서드를 모아놓는 경우
- java.util.Collections처럼 특정 인터페이스를 구현하는 객체 생성 정적 메서드(정적 팩토리 메서드)들을 모아놓은 경우
- final 클래스와 관련된 메서드들을 모아놓는 경우
이러한 클래스들은 인스턴스로 만들어 사용하기 위해 설계한게 아니다.
물론 "인스턴스화 안하면되는거 아니야..? 굳이 막아야함?" 이라고 생각할 수도 있다. 하지만 명시적으로 private 생성자를 만들지 않으면 컴파일러는 public 생성자를 자동으로 만들며 이를 통해 인스턴스를 임의로 생성할 수 있다.
따라서 특정 클래스의 인스턴스화를 막으려면 private 생성자를 명시적으로 추가해주는게 좋다. private 생성자를 명시적으로 추가해주면 인스턴스화를 막는것 외에도 상속을 받지 못하도록 막아주는 역할도 한다.
반응형
'개발 > Effective JAVA' 카테고리의 다른 글
[아이템9] try-finally보다는 try-with-resources를 사용하라 (0) | 2021.06.22 |
---|---|
[아이템7] 다 쓴 객체 참조를 해제하라 (0) | 2021.06.22 |
[아이템6] 불필요한 객체 생성을 피하라 (0) | 2021.06.20 |
[아이템2] 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2021.06.16 |
[아이템1] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2021.06.15 |