[이펙티브 자바. 아이템4]인스턴스화를 막으려거든 private 생성자를 사용하라

박상준·2024년 5월 20일
0

이펙티브 자바

목록 보기
4/16

인스턴스화를 막기 위한 private 생성자 사용

개요

  • 정적 메서드와 정적 필드만 담은 클래스
    • 주로 기본 타입 값이나 배열 관련 메서드들을 모으는 용도로 사용한다
  • 유틸리티 클래스
    • java.lang.Math, java.util.Arrays, java.util.Collections 등이 있다.
  • final 클래스
    • 상속을 방지하고 정적 메서드로만 구성되는 경우

유틸리티 클래스의 특징

  • 객체 지향적이지 않다
    • 인스턴스화할 필요가 없으므로 일반적으로 권장되지 않는다.
  • 인스턴스화 방지
    • 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 추가한다.

인스턴스화 방지 방법

  • private 생성자 사용
    • 클래스의 인스턴스화를 완전히 방지한다
  • 예제 코드
    public class UtilityClass {
        // 인스턴스화를 방지하기 위해 private 생성자 사용
        private UtilityClass() {
            throw new AssertionError();
        }
        
        // 정적 메서드 예시
        public static void someMethod() {
            // 메서드 구현
        }
    }

실무상으로는..

  1. 정적 유틸리티 클래스는
    1. 필요한 경우에만 사용하며
      1. 일반적으로 간단한 도구나 헬퍼 메서드들을 모을 때 사용한다
      2. 객체 지향적 설계를 따르는 것이 더 적합한 경우가 많다.. 하지만, 꼭 필요할때도 있다고 생각한다.
  2. 상속과 컴포지션의 관계
    1. 상속 금지
      1. final 클래스 또는 private 생성자로 상속을 금지하도록 해야한다
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글