책/Effective Java
다중 instance 방지 & 의존성 주입[Dependency Injection]
# 다중 인스턴스 방지 인스턴스화를 막기 위해서 private 생성자 사용하자 정적 메서드와 정적 필드만을 가진 클래스 기본 타입 , 배열 관련 메서드만 존재하는 클래스 ex) java.lang.Math , java.util.Arrays 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(팩토리)를 모아놓은 클래스 ex) java.util.Collections final 클래스와 관련한 메서드를 모아놓은 클래스 final 클래스를 상속해서 하위 클래스에 메서드를 넣는 것은 불가능 하기 때문 위와 같이, 정적 멤버만 담은 utility 클래스는 인스턴스로 만들려고 설계한 것이 아님 → 따라서 외부에서 해당 클래스의 생성자에 접근하지 못하게 해야함 하지만 생성자를 명시하지 않으면 자동으로 컴파일러는 d..
Singleton 보장 방법
private 생성자 / 열거 타입으로 Singleton을 보장하자 Singleton 인스턴스를 오직 하나만 생성할 수 있는 클래스 cf) instance =? 싱글턴이 필요한 상황 무상태 객체 - 함수 설계상 유일성이 보장되야 하는 시스템 컴포넌트 (ex - Spring 컨테이너가 각 클래스에 대해 딱 한개의 인스턴스만 생성) Thread-safe가 보장되어야 하는 상황 클래스를 싱글턴으로 만든다. → 해당 클래스를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 이유 : 하나의 자원을 공유하기 때문에 프로덕션 DB에 사용되는 싱글턴 클래스라면 인스턴스가 하나이다. 따라서 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. Singleton 을 만드는 방법 방법 #1 - publi..
Builder 패턴
정적 팩토리 메서드 , 생성자 - 매개변수가 많을 때, 선택적으로 고려해야한다면 불편함 존재 기존 해결 방법 : 점층적 생성자 패턴(Telescoping Constructor Pattern) 필수적인 파라미터들에 대한 생성자 설정 후, 선택적인 파라미터에 대해서는 해당 파라미터를 포함한 생성자를 연쇄적 호출 이를 통해 모든 파라미터들이 설정된 객체가 만들어진다. 장점 : 파라미터들이 유효한지를 생성자를 통해서 확인하면 일관성 유지 보장 문제점 : 클라이언트가 원하지 않는 파라미터까지 설정해야 한다. 개발자의 입장에서도 Class의 라인 수 증가, 호출 수 증가 - 클라이언트 코드를 작성하거나 읽기 어려운 문제 발생 자바빈즈 패턴(JavaBeans Pattern) 매개변수가 없는 생성자로 객체 생성 이후,..
정적 팩토리 메서드 [ static factory method ]
기존 방법 : Client → instance of Class 획득 → public 생성자로 가져오기 public void main(String[] args){ Hello hello = new Hello(); // new Hello() -> 인스턴스 가져오기 hello = new Hello("xonmin"); // 다른 public 생성자 } public class Hello{ //아무것도 생성되지 않으면 default Constructor String name ; public Hello(String name){ this.name = name; } } 정적 팩토리 메소드 예시 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Bool..