JAVA/Effective Java 84

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

객체지향임에도 불구하고 간혹 인스턴스를 생성하지 말라고 권장하는 케이스가 있습니다. 보통 static 한 메서드들만 가지고 있는 유틸성 클래스가 위 케이스에 해당합니다. 인스턴스화를 막는 방법은 아래와 같이 두 가지가 있습니다. private 생성자를 통해 인스턴스화 방지 abstract 클래스로 생성하여 인스턴스화 방지 이 방법은 상속을 통해 우회적으로 생성자를 호출할 수 있으므로 불완전한 방법 방법 1. private 생성자를 통해 인스턴스화 방지 public 혹은 protected 생성자 없이 private 생성자만 정의할 경우 같은 클래스 내 main 함수에서 호출하지 않는 이상 생성자를 호출할 수 없어 인스턴스화를 방지할 수 있습니다. 같은 클래스 내 main 함수에서도 호출하는 것을 방지하고 ..

JAVA/Effective Java 2024.01.20

[아이템 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글톤(singleton)이란? 아이템 3에 대해 논의하기에 앞서 우선 싱글톤 개념에 대한 이해가 선행되어야 합니다. 간단히 요약하자면 싱글톤 객체는 아래의 특성을 가집니다. 클래스의 인스턴스가 오직 1개만 생성되는 것을 보장하는 디자인 패턴 connection pool, thread pool, 디바이스 설정 객체의 경우 인스턴스를 여러 개 생성하면 자원을 낭비하거나 버그를 야기할 수 있으므로 오직 하나만 생성하고 해당 인스턴스를 사용하도록 하는 것이 목적 보다 자세한 내용은 제가 과거에 작성한 게시글 및 Jbee님이 작성한 글을 참고 바랍니다. https://jaimemin.tistory.com/1756 싱글톤(Singleton) 패턴 싱글톤 패턴 클래스의 인스턴스가 오직 1개만 생성되는 것을 보장하는..

JAVA/Effective Java 2024.01.19

[아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라

정적 팩토리 메서드와 생성자의 한계 및 해결책 정적 팩토리 메서드와 생성자 모두 optional 한 매개변수가 많을 때 적절히 대응하기 어렵다는 공통점이 있지만 점층적 생성자 패턴, Java Beans 패턴 혹은 Builder 패턴을 통해 어느 정도 대응이 가능합니다. 아래의 식품 영양정보를 예시로 각 패턴을 간략히 정리하겠습니다. 1회 내용량, 총 n회 내용량, 1회 제공량 당 칼로리와 같은 필수 항목(required field) 몇 개와 총 지방, 트랜스 지방, 포화 지방, 콜레스테롤, 나트륨 등 수많은 선택 항목(optional field)으로 이루어지고 대부분의 선택 항목들은 값이 0입니다. 점층적 생성자 패턴 점층적 생성자 패턴 적용 시 모든 필드를 전부 받는 생성자 혹은 정적 팩토리 메서드를 ..

JAVA/Effective Java 2024.01.18

[아이템 1] 생성자 대신 정적 팩토리 메서드를 고려하라

생성자 대신 정적 팩토리 메서드를 사용할 경우 얻을 수 있는 장단점은 아래와 같습니다. 장점 메서드명 즉 이름을 가질 수 있기 때문에 표현력이 높아짐 호출될 때마다 새로운 인스턴스를 생성하지 않아도 됨 반환 타입의 하위 타입 객체를 반환 가능 (인터페이스 기반 프레임워크) 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환 가능 정적 팩토리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재 여부를 고려하지 않아도 됨 단점 정적 팩토리 메서드만 제공할 경우 생성자를 private으로 선언하기 때문에 상속 불가능 역설적으로 이름을 가지기 때문에 생성자 대비 정적 팩토리 메서드 조회하기 번거로움 장점 1. 메서드명 즉 이름을 가질 수 있기 때문에 표현력이 높아짐 병원에 환자가 내원할 때 아래와 같이 두..

JAVA/Effective Java 2024.01.16