일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- raw 타입
- 브릿지 메소드
- throwable
- annotation processor
- 람다식
- System.out
- 정렬
- System.in
- 익명 클래스
- github api
- 접근지시자
- 항해99
- 바운디드 타입
- 합병 정렬
- yield
- docker
- 자바할래
- 제네릭 타입
- 자바스터디
- Study Halle
- 상속
- 스파르타코딩클럽
- junit 5
- 제네릭 와일드 카드
- auto.create.topics.enable
- System.err
- Switch Expressions
- 프리미티브 타입
- 함수형 인터페이스
- 로컬 클래스
- Today
- Total
목록Book/헤드 퍼스트 디자인 패턴 (5)
코딩하는 털보
디자인 패턴 4. 팩토리 패턴 디자인원칙, 추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다. (Dependency Inversion Principle) 위 원칙은 고수준 구성요소가 저수준 구성요소에 의존하면 안 된다는 것이 내포되어 있다. 예를 들면 처음에 예로 나왔던 PizzaStore는 고수준 구성요소이며 여러가지 저수준 구성요소인 Pizza 클래스들에 의존하고 있다. public class PizzaStore { Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if ( type.equals("pepperoni")) { piz..
디자인 패턴 4. 팩토리 패턴 이번 장의 예시는 PizzaStore였다. 여러 종류의 피자 중에서 한 가지 타입의 피자 객체를 생성하고 가공하여 반환하는 메서드 orderPizza. (재미있는건 클린 코드에서도 피자를 예로 들었던 빌더 패턴이 있었다.) String 아규먼트 type으로 피자 종류를 선택하고 인스턴스를 생성한다. public class PizzaStore { Pizza orderPizza(String type) { Pizza pizza; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if ( type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if ( type..
디자인 패턴 3. 데코레이터 패턴 디자인원칙, 클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다. (Open-Closed Principle) 기존 코드는 건드리지 않은 채로 확장을 통해서 새로운 행동을 간단하게 추가할 수 있도록 해야한다. 이렇게 하면 새로운 기능 추가가 매우 유연하여 급변하는 환경에 잘 적응하면서도 튼튼한 디자인을 만들 수 있다. 이 원칙은 어떻게 보면 모순되어 보일 수 있다. 하지만 직접 코드를 수정하지 않고 코드를 확장할 수 있게 해주는 기법들이 있다. 상속은 변경될 가능성이 높은 부분에는 적합하지 않다. 책에서는 스벅 음료 추상클래스를 상속받는 음료 메뉴들을 예로 들었다. public abstract class Beverage { String de..
디자인 패턴 2. 옵저버 패턴 옵저버 패턴을 정기 신문 구독으로 예를 들어 설명해줬다. 신문출판사 : 주제(subject) 객체, 구독자 : 옵저버 주제 객체에서 일부 데이터를 관리하며 데이터가 달라지면 옵저버에 새로운 데이터 값이 전달된다. 옵저버 객체들은 주제를 구독하고(주제 객체에 등록되어)있으며 주제의 데이터가 바뀌면 갱신 내용을 전달받는다. 옵저버 패턴 옵저버 패턴에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다. 일대다 관계 옵저버 패턴에서는 일련의 객체들(주제와 옵저버) 사이에서 일대다 관계를 정의한다. 옵저버 패턴은 대부분 주제 인터페이스와 옵저버 인터페이스가 들어있는 클래스 ..
디자인 패턴 1. 디자인 패턴 소개 / 스트래티지 패턴 객체지향 디자인 원칙 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 상속보다는 구성(컴포지션)을 활용한다. OOP의 핵심인 '상속', 하지만 이 책은 1부에서부터 상속의 단점을 먼저 보여주었다. 그것에 대한 책의 예시는 아래와 같다. public abstract class Duck { public void quack() { System.out.println("꽥!"); } public void swim() { System.out.println("수영을 합니다."); } public abstract void display(); } public class MallardD..