JAVA/Effective Java(16)
-
[Java][Effective Java] item 4, 인스턴스화를 막으려거든 private 생성자를 사용하라
인스턴스를 만들수 없는 클래스 사례 java.lang.Math java.util.Arrays java.util.Collections 인스턴스화를 막기 위한 방법 : private 생성자 추가 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있습니다. // 객체를 만들 수 없는 유틸리티 클래스 public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다(인스턴스 방지용) private UtilityClass() { throw new AssertionError(); } // 나머지는 생략 } 인스턴스화를 막기 위한 부적절한 방법 : 추상 클래스로 정의 인스턴스화를 막기 위해서 추상 클래스로 정의하면 클래스 자체는 막을 수는 있지만 하위 클래스를 만들어 인스턴스화..
2022.05.17 -
[Java][Effective Java] item 3, private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴(Singleton)이란 무엇인가? 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 의미합니다. 싱글톤의 예시로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있습니다. 싱글턴 생성 첫번째 방식 : 필드 멤버에 public static final을 적용한 인스턴스를 클래스 초기화시 생성 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){} public void leaveTheBuilding() { System.out.println("call leaveTheBuilding"); } } 위와 같이 Elvis 타입의 INSTANCE 인스턴스는..
2022.05.15 -
[Java][Effective Java] item 2, 생성자에 매개변수가 많다면 빌더를 고려하라
정적 팩토리와 생성자가 가지고 있는 제약 선택적인 매개변수가 많을 때 적절히 대응하기가 어려움 예를 들어 식품 포장의 영양정보가 20개정도가 된다면 필수적인 정보 몇개를 제외하고는 대부분의 정보들은 0 값을 가지고 있는 경우가 많음 이러한 제약을 해결하기 위해서 점층적 생성자 패턴을 사용할 수도 있지만 매개변수가 많아질수록 코드를 작성하기 어렵거나 읽기 어려워지는 단점을 가지고 있습니다. 점층적 생성자 패턴(telescoping constructor pattern) 점층적 생성자 패턴은 필수 매개변수가 들어있는 생성자에서부터 출발하여 선택 매개변수를 늘려나가면서 생성자들을 오버로딩 방식으로 늘려가는 방식입니다. public class NutritionFacts { private int servingSiz..
2022.05.13 -
[Java][Effective Java] item 1, 생성자 대신 정적 팩토리 메서드를 고려하라
클라이언트가 클래스의 인스턴스를 얻는 수단 1. public 생성자를 이용하는 방법 2. 정적 팩토리 메서드(static factory method)를 이용하는 방법 인스턴스 생성시 생성자와 정적 팩토리 메서드의 호출 /** * 다음 코드는 일반적인 생성자로 생성한 객체이다. * 일반적으로 생성자로 생성한 car1, car2 객체는 * 생성자의 인자(parameter)만으로 SM3인지 K5인지 * 알 수 없다. */ Car car1 = new Car(1800); Car car2 = new Car(3500); /** * 다음 정적 팩토리 메서드를 활용하여 생성한 객체이다. * 인자에 가격을 입력할 필요없이 필요한 객체를 생성하기 * 위한 메서드를 호출하면 된다. * 다음과 같은 정적 팩토리 메서드를 통하여..
2022.05.12