본문 바로가기
728x90

분류 전체보기86

5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 의존 객체주입 클래스의 유연성, 재사용성, 테스트 용이성을 개선해준다. public class Coffee{ private final Beans coffeeBeans; public Coffee(Beans coffeeBeans){//요기 this.coffeeBeans = Object.requireNonNull(coffeeBeans); } ... } 사용하는 자원에 따라 동작이 달라지는 클래스의 경우 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 대신 클래스가 여러 자원 인스턴스를 지원해야 하며 이를 위해 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 이 패턴의 변형으로 생성자에 자원 팩터리를 넘겨주는 방식이 있다. (팩터리 메서드 패턴) Coffee create(Supplier 2021. 8. 22.
4. 인스턴스화를 막으려거든 private 생성자를 사용하라 * 인스턴스화 : 인스턴스가 실제로 메모리에 할당된 상태 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이다. -> private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. (명시적 생성자가 private이므로 클래스 밖에서 접근할 수 없다.) public class Coffee{ private Coffee{// 생성자(인스턴스화 방지) ... } ... } 이 코드는 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아줍니다. * 이 방식은 상속을 불가능하게 막아준다. 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는데, 이를 private으로 선언했으므로 하위 클래스가 상위 클래스의 생성자에 접근할 수 없다. 2021. 8. 22.
3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 싱글턴을 만드는 방식 1. 생성자를 private로 감춰두고 인스턴스에 접근할 수 있는 수단으로 public static 맴버를 하나 생성한다. public class Coffee{ public static final Coffee INSTANCE = new Coffee(); private Coffee(){...} public void leaveTheBuilding(){...} } 2. 정적 팩터리 메소드를 public static 맴버로 제공 public class Coffee{ private static final Coffee INSTANCE = new Coffee(); private Coffee(){...} pub.. 2021. 8. 22.
2. 생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴 단점 매개변수가 많아지면 코드를 작성하거나 읽기 힘들다. - 매개변수의 개수, 의미를 주의해서 확인해야 한다.. - 타입이 같은 매개변수가 연달아 늘어 있으면 찾기 어려운 버그로 이어질 수 있다. -> 실수로 매개변수의 순서를 바꿔 전달해도 컴파일러단에서 확인할 수 없다. JavaBeans 패턴 * 점층적 패턴의 단점을 보완하기 위해 등장 단점 - 객체를 하나 만들기 위해 메서드를 여러개 호출해야 한다. - 객체가 완전히 생성되기 전까지 일관성(consistency)이 무너진 상태에 놓이게 된다. - 스레드 안전성을 얻기 위해 프로그래머가 추가 작업을 해줘야 한다. Builder 패턴 * 매개변수 중 다수가 필수가 아니거나 같은 타입이면 점층적 생성자보다 코드를 읽고 쓰기가 훨씬 간결.. 2021. 8. 22.
728x90