개요 java.lang.Math나 java.util.Arrays와 같은 유틸리티 클래스는 정적(static) 메서드와 정적 필드만을 포함하고 있어, 굳이 인스턴스를 생성할 필요가 없습니다. 그러나 기본 생성자를 명시적으로 막지 않으면, 클라이언트 코드가 실수로 인스턴스를 생성할 수 있습니다. 자바에서는 매개변수가 없는 생성자를 명시하지 않으면 기본 생성자가 자동으로 만들어지므로, 이를 방지하기 위해 private 생성자를 정의해야 합니다. 인스턴스화 방지 방법 1 2 3 4 5 6 public class UtilityClass { // 인스턴스화 방지용 private 생성자 private UtilityClass() { throw new AssertionError(); // 인스턴스 생성 시도 시 예외 발생 } } 이 코드의 동작 방식 private 생성자를 선언하여 외부에서 이 클래스를 인스턴스화하는 것을 막습니다....
1장 객체 생성과 파괴
[아이템 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴(Singleton) 패턴은 클래스의 인스턴스를 오직 하나만 생성하여 공유하는 방식입니다. 객체를 호출할 때마다 새로운 인스턴스를 만들지 않고, 동일한 인스턴스를 반환하는 방식이므로 메모리 낭비를 방지하고, 동작의 일관성을 유지할 수 있습니다. 싱글턴을 구현하는 주요 방식은 다음과 같습니다. 📌 public static final 필드를 이용한 방식 1 2 3 4 5 6 7 8 9 public class Elvis { public static final Elvis INSTANCE = new Elvis(); // 유일한 인스턴스 private void Elvis() { ....
[아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라
매개변수가 많은 객체를 생성할 때, 생성자나 정적 팩토리 메서드 방식은 사용하기 불편해질 수 있습니다. 특히 매개변수의 순서나 타입이 비슷한 경우, 실수를 유발하거나 코드 가독성이 떨어지기 때문에 대안으로 빌더 패턴(builder pattern) 을 고려할 수 있습니다. 첫 번째 대안, 생성자를 이용할 경우 1 Nutritionfact cocaCola = new Nutritionfact(240, 8, 100, 0, 35); 생성자를 통해 객체를 생성할 때 매개변수가 많으면, 어떤 값이 어떤 속성에 해당하는지 파악하기 어렵습니다. 특히 매개변수 타입이 같다면, 잘못된 순서로 입력해도 컴파일러가 오류를 잡지 못하고, 런타임에서 예상치 못한 동작을 초래할 수 있습니다....
[아이템 1] 생성자 대신 정적 팩토리 메서드를 고려하라
일반적으로 사용하는 public 생성자 대신, 별도로 정적 팩토리 메서드를 이용할 수 있다. 객체 생성 시 public 생성자 대신 정적 팩토리 메서드(static factory method) 를 사용하는 것을 고려할 수 있습니다. 이를 통해 다양한 이점을 얻을 수 있는데, Java에서 자주 사용되는 패턴 중 하나입니다. 1 2 3 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Booelan.FALSE; } Boolean 클래스에서 발췌한 예제 코드 장점 첫 번째, 이름을 가질 수 있다....