전체 글27 [이펙티브 자바] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 - item 5 특정 자원에 의존하는 클래스라면? 사용하는 자원에 따라 동작이 달라지는 클래스에 적합하지 않은 방식 1. 정적 유틸리티 클래스 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} .. } 2. 싱글턴 클래스 public class SpellChecker { private static SpellChecker INSTANCE = new SpellChecker(,,,); private final Lexicon dictionary = ,,,; } 위와 같은 상황에서 클라이언트의 용도에 맞는 사전을 적용하는 것은 불가능함 만약 final 키워드를 제거한다면? 멀티스레드 상황에서 사용할 .. 2023. 6. 20. [이펙티브 자바] 인스턴스화를 막으려거든 private 생성자를 사용하라 - item4 의도치 않은 인스턴스화를 막아야한다면? ex) 정적 메서드 or 정적 필드만 담은 클래스로 활용할 때 인스턴스를 만들어 쓰려고 설계한 클래스가 아님 생성자 명시하지 않으면 default public 생성자가 생성됨 puviate 생성자 추가 public class UtilityClass { // 기본 생성자가 만들어지는 것을 막음 private UtilityClass() { throw new AssertionError(); } ... } public 생성자 자동 생성을 막는다 thorw error을 통해 내부의 실수로 인한 호출을 막는다 위해 주석 처리로 throw의 이유를 명시한다 상속을 불가능하게 하는 효과도 있다 Math 클래스의 실제 코드를 확인해보자 위와 같이 활용됨을 확인할 수 있다. 2023. 6. 20. [이펙티브 자바] private 생성자나 열거 타입으로 싱글턴임을 보증하라 - item 3 public static final 필드 방식의 싱글턴 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ...} } privte 생성자는 INSTANCE를 초기화 할 때 딱 한번만 호출된다. pubilc이나 protected 생성자가 없으므로 싱글턴임을 보장한다. 리플렉션을 사용해 private을 호출하는 경우 싱글턴을 깨뜨릴 수 있는데 생성자 두번 호출 시 예외를 반환하도록 하면 된다. 해당 방식의 장점 해당 클래스가 싱글턴임이 API에 드러난다 정적 팩토리 방식의 싱글턴 public class Elvis { private.. 2023. 6. 20. [이펙티브 자바] 생성자에 매개변수가 많다면 빌더를 고려하라 - item 2 1. 점층적 생성자 패턴 만약 매개변수가 정말 많다면? - bad 클라이언트가 실수할 수 있음 -> 엉뚱한 동작 위험 2. 매개변수 없는 생성 자로 객체를 만든 후 setter로 값 설정 (자바빈즈 패턴) 객체 하나 만드는데 여러 메소드 호출해야함 완전히 생성되기 전까지 일관성이 무너짐 자바빈즈 패턴에서 클래스를 불변으로 만들 수 없음 3. 빌더 패턴 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; pu.. 2023. 6. 18. [책 오브젝트] CHAPTER4 - 설계 품질과 트레이드오프 데이터 중심 영화 예매 시스템 (이렇게 하면 안됨) 해당 챕터에서 데이터 중심으로 설계를 진행하면서 나쁜 예시를 보여준다 객체 내부에 저장되는 데이터를 기반으로 분할한다 ex) Movie.class public class Movie { private String title; private Duration runningTime; private Money fee; private List discountConditions; private MovieType movieType; private Money discountAmount; private double discountPercent; } 예약 관련 class public class ReservationAgency { public Reservation reser.. 2023. 6. 18. [책 오브젝트] CHAPTER3 - 역할, 책임, 협력 객체지향의 핵심 역할 책임 협력 협력 객체 간 메세지 전송 - 다른 객체에게 도움을 요청 메서드를 실행헤 요청에 응답 캡슐화 → 객체의 자율성 상승 협력이 설계를 위한 문맥을 결정함 객체의 행동을 결정하는 것은 협력임 책임 협력에 참여하기 위해 객체가 수행하는 행동임 하는 것과 아는 것으로 나뉘어짐 하는 것: 객체 생성, 계산 수행, 다른 객체 활동 제어 등 아는 것: 사적인 정보, 관련된 객체에 관해 아는 것 책임 할당 책임수행에 있어 필요한 정보를 가장 잘 아는 전문가(INFORMATION EXPERT)에게 책임을 할당 → 객체 자율성 상승 협력에 필요한 메세지 찾기 → 적절한 객체 선택 (반복) 메세지가 객체를 결정함 장점 최소한의 인터페이스 추상적인 인터페이스 객체의 상태(x) 행동에 집중해야함 .. 2023. 6. 18. 이전 1 2 3 4 5 다음