Java/Effective Java
-
[Effective Java] Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라Java/Effective Java 2020. 8. 13. 23:50
private 생성자의 사용 java.lang.Math와 java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드를 모아놓을 수 있습니다. java.util.Collections 처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩토리)를 모아놓을 수도 있습니다. (자바 8부터는 이런 메서드를 인터페이스에 넣을 수 있습니다.) final 클래스와 관련한 메서드들을 모아놓을 때 사용합니다. 이러한 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계하는게 아닙니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 디폴트 생성자를 만들게 됩니다. 이러한 사실은 사용자에게는 생성자 자동 생성된 것인지 구별할 수 없게 합니다. 인스턴스화를 막기 위해서 추상 클래스..
-
[Effective Java] Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라Java/Effective Java 2020. 8. 12. 22:56
Singleton이란? 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글턴의 전형적인 예로는 Stateless한 객체나 설계상 유일해야 하는 시스템 컴포넌트를 예로 들 수 있습니다. Singleton을 만드는 방법 싱글턴을 만드는 방식에는 두 가지가 있습니다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해두어 구현합니다. 1. public static final 필드 방식의 싱글턴 public class ElvisOne { public static final ElvisOne INSTANCE = new Elvis_1(); private ElvisOne() {} public void leav..
-
[Effective Java] Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라Java/Effective Java 2020. 8. 11. 22:47
정적 팩토리와 생성자에는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있습니다. 이 경우 프로그래머는 점층적 생성자 패턴을 사용할 수도 있지만, 매개변수 개수가 많아지면 코드를 작성하거나 읽기 어렵습니다. 점층적 생성자 패턴 public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public NutritionFacts(int servingSize, int servings) { this(servin..
-
[Effective Java] Item 1. 생성자 대신 정적 팩토리 메소드를 고려하라Java/Effective Java 2020. 8. 9. 23:51
클라이언트가 클래스의 인스턴스를 얻는 수단 public 생성자를 이용하는 방법 정적 팩토리 메서드(static factory method)를 이용하는 방법 boolean 값을 받아 박싱 클래스(boxed class)인 Boolean 객체 참조로 변환해주는 코드 public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); } 정적 팩토리 메서드의 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제..