이펙티브자바

    [Effective Java] private 생성자나 열거 타입으로 싱글턴임을 보증하라

    싱글턴 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴을 만드는 방식은 보통 둘 중 하나이다. 1. 생성자를 private으로 감추고 public static 멤버 변수를 만든다. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {}; } [장점] 이 방법은 JavaDocs를 만들 때 싱글턴임이 API에 명백히 드러난다는 장점이 있다. 또 한 간결하다는 특징이 있다. [단점] 권한이 있는 클라이언트의 경우 리플렉션을 사용해서 private 생성자를 호출할 수 있다. => 이를 방지하기 위해 생성자를 수정하여 두 번째 객체가 생성되려 할 때 예외를 던질 수 있다. publi..

    [Effective Java] 빌더 패턴

    생성자에 매개변수가 많다면 빌더를 고려하라 매개변수가 많을 때 생성자와 정적 팩터리 메서드 방식의 어려움을 확인해보자. public class NutritionFacts { private int servingSize; private int serving; private int calories; private int fat; public NutritionFacts(int servingSize, int serving) { this.servingSize = servingSize; this.serving = serving; } public NutritionFacts(int servingSize, int serving, int calories) { this.servingSize = servingSize; this..

    [Effective Java] 생성자 대신 정적 팩터리 메서드를 고려하라

    정적 팩터리 메서드는 이름을 가질 수 있다. 클래스의 인스턴스를 얻는 기본적인 방법은 public생성자를 이용하는 것이다. 하지만 생성자를 이용하는 방식은 자유로운 인스턴스의 생성을 방해하기도 한다. 예를 들어 게임 캐릭터를 생성하는데 이벤트 유저와, 일반 유저를 boolean으로 구분한다고 생각해보자. public class User { private boolean event; private boolean normal; private GameCharacter gameCharacter; public User(boolean event, GameCharacter gameCharacter) { this.event = event; this.gameCharacter = gameCharacter; } public ..