요약 실전 디자인 패턴 책임 연쇄 패턴 플라이웨이트 패턴 인터프리터 패턴 중재자 패턴 메멘토 패턴 프로토타입 패턴 비지터 패턴 메모 책임 연쇄 패턴 1개의 요청을 2개 이상의 객체에서 처리해야 한다면 책임 연쇄(Chain of Responsibility) 패턴을 사용하면 됨. ex) 스팸 메일, 팬 메일, 항의 메일, 신규 설치 요청 메일을 분류해야 함. 검출기를 써서 메일 분류하는 디자인을 만들어야 함. 책임 연쇄 패턴은 주어진 요청을 검토하는 객체 사슬을 생성함. 사슬 속에 속해 있는 각 객체는 자기가 받은 요청을 검사해서 직접 처리하거나 사슬에 들어있는 다른 객체에게 넘김 p637 참고 장점 요청을 보낸 쪽과 받는 쪽을 분리할 수 있음 객체는 사슬의 구조를 몰라도 되고 그 사슬에 들어있는 다른 객체..
요약 실전 디자인 패턴 패턴을 찾아 떠나기 사악한 안티 패턴 섬별하기 기타 패턴 브리지 패턴 빌더 패턴 메모 패턴을 찾아 떠나기 디자인 패턴의 정석 GOF 디자인 패턴 모든 기초 패턴을 찾을 수 있음. 패턴 교과서 패턴이라는 개념은 버클리 건축학과의 크리스토퍼 알렉산더가 처음으로 고안함. 전산학자가 아닌 건축가임. 디자인 패턴이 어떻게 시작되었는지 알 수 있음. 주거용 건축을 만드는 일이 확장성 좋은 소프트웨어를 만드는 것이 서로 얼마나 유사한지 깨달을 수 있음. 사악한 안티 패턴 섬별하기 안티 패턴(Anti-Pattern) : 어떤 문제의 나쁜 해결책에 이르는 길을 알려줌. 안티 패턴은 나쁜 해결책을 문서로 만들어두어 다른 개발자들이 똑같은 실수를 하지 않도록 방지할 수 있음. 안티 패턴의 요소 어떤 ..
요약 실전 디자인 패턴 디자인 패턴 분류하기 디자인 패턴 범주 알아보기 패턴으로 생각하기 최대한 단순하게 디자인 패턴은 만병통치약이 아님 패턴이 필요할 때 리팩터링과 패턴 꼭 필요하지 않은 패턴은 빼버리자. 지금의 디자인에서 디자인 패턴을 제거하는 일을 두려워하지 말자. 꼭 필요하지 않은 패턴을 미리 적용할 필요가 없음. 패턴을 대하는 마음가짐 전문 용어의 위력 되새기기 용어를 공유하는 5가지 방법 4인방과 함께하는 객체마을 여행 메모 디자인 패턴 분류하기 같은 그룹에 속하는 패턴끼리 비교하기 좋게 종류에 따라 분류할 필요성이 생김. 생성, 행동, 구조라는 3가지 범주로 용도에 따라 나눔. 디자인 패턴 범주 알아보기 생성 패턴(Creational Pattern) : 객체 인스턴스를 생성하는 패턴으로, 클..
요약 실전 디자인 패턴 디자인 패턴의 정의 자세히 살펴보기 메모 디자인 패턴의 정의 자세히 살펴보기 패턴은 반복적으로 등장하는 문제에 적용할 수 있어야 함. ex) 열쇠를 차 안에 두고 내렸다고, 차 유리를 깨는 방법을 반복적으로 적용할 수 있는 건 아님. 이 패턴은 다른 사람의 상황에서 동일하게 적용되어야 함. 패턴에는 이름이 있어야 함. 패턴을 단순하게 문제, 컨텍스트, 해결책만 가지고 기술되거나 문서화 되지 않음. 패턴을 기술하고 패턴 카탈로그에 수록할 때 사용할 수 있는 훨씬 훌륭한 방법이 있음. 패턴 카탈로그에는 일련의 패턴을 정해서 각각의 패턴을 다른 패턴과 비교하며 자세하게 설명함. ex) GoF 패턴 → 23개의 기본 디자인 패턴이 수록됨. 패턴이 기술되는 예 (p605참고) 패턴의 이름 ..
요약 실전 디자인 패턴 디자인 패턴의 정의 메모 CHAPTER 13. 패턴과 행복하게 살아가기 : 실전 디자인 패턴 디자인 패턴의 정의 📍 패턴(Pattern) : 특정 컨텍스트 내에서 주어진 문제의 해결책이다. 컨텍스트(context) : 패턴이 적용되는 상황을 뜻함. 반복적으로 일어날 수 있는 상황이어야만 함 문제(problem) : 컨텍스트 내에서 이뤄야 하는 목표를 뜻함. 컨텍스트 내의 제약 조건도 포함됨. 해결책(solutiuon) : 우리가 찾아내야 하는 것임. 제약조건 속에서 누가 적용해도 목표를 이룰 수 있는 일반적인 디자인을 뜻함. 이렇게 정의를 따지는 이유는? 패턴을 정의할 수 있어야 다양한 장점을 제공하는 패턴 카탈로그를 만들 수 있기 때문.
요약 복합 패턴 모델, 뷰, 컨트롤러 만들기 모델 만들기 뷰 알아보기 뷰 만들기 컨트롤러 만들기 MVC 속 전략 패턴 자세히 알아보기 디자인 도구상자 안에 들어가야 할 도구들 메모 모델, 뷰, 컨트롤러 만들기 모델은 데이터, 상태, 애플리케이션 로직을 모두 관리하는 임무를 맡고 있음. BeatModel 에는 뭐가 들어가야 하는가? 현재 BPM 관리하는 상태 소리를 내는 여러 가지 미디를 생성하는 코드가 필요함. 컨트롤러에서 비트를 조절하거나, 뷰와 컨트롤러에서 모델의 상태를 알아낼 때 사용할 수 있도록 외부에 공개된 인터페이스도 있어야 함. 모델이 옵저버 패턴을 사용한다는 사실도 잊으면 안됨. p565 참고 모델 만들기 이 모델은 오디오 클립을 이용해서 비트를 만듦. p566 참고 뷰 알아보기 뷰를 연결..
요약 복합 패턴 모델-뷰-컨트롤러 알아보기 모델-뷰-컨트롤러에 사용되는 패턴 알아보기 모델-뷰-컨트롤러로 BPM 제어 도구 만들기 메모 모델-뷰-컨트롤러 알아보기 음악 소프트웨어를 비유로 들어보자. 새로운 노래를 재생한다. 사용자가 인터페이스를 건드리면 그 행동이 컨트롤러에게 전달됨. 컨트롤러에서 Player 모델에게 음악 재생을 요청함. MP3파일을 관리하고 재생하는 데 필요한 모든 상태, 데이터, 애플리케이션 로직 등은 모델에 들어있음. 모델에서 뷰에게 상태가 변경되었음을 알림. 디스플레이가 갱신되는 것을 볼 수 있고, 음악이 재생되는 것을 들을 수 있음. 뷰 디스플레이가 갱신됨. 모델 모든 데이터, 상태와 애플리케이션 로직이 들어 있음. 뷰와 컨트롤러에서 모델의 상태를 조작하거나, 가져올 때 필요한..
요약 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 CHAPTER 12. 패턴을 모아 패턴 만들기 : 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 12. 오리 무리를 만듦. 오리를 1마리씩 관리하지 않고, 오리로 구성된 컬렉션을 다룰 방법이 필요함. 오리 객체로 구성된 컬렉션을 개별 객체와 같은 방식으로 다룰 수 있게 해주는 컴포지트 패턴을 사용함. p541 참고 13. 오리 무리(복합 객체)를 만든 것을 시뮬레이터에 적용함. p542 참고 14. 이번엔 개별 오리의 행동을 관찰하기 위해 옵저버 패턴을 적용함. QuackObservable 인터페이스를 추가함. Quacakble은 QuackObservable 인터페이스를 확장함. 15. Quackable을 구현하는 모든 구상클래스..
요약 복합 패턴 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 오리 시뮬레이션 게임에 다양한 패턴 적용하기 12. 오리 무리를 만듦. 오리를 1마리씩 관리하지 않고, 오리로 구성된 컬렉션을 다룰 방법이 필요함. 오리 객체로 구성된 컬렉션을 개별 객체와 같은 방식으로 다룰 수 있게 해주는 컴포지트 패턴을 사용함. p541 참고 13. 오리 무리(복합 객체)를 만든 것을 시뮬레이터에 적용함. p542 참고 14. 이번엔 개별 오리의 행동을 관찰하기 위해 옵저버 패턴을 적용함. QuackObservable 인터페이스를 추가함. Quacakble은 QuackObservable 인터페이스를 확장함. 15. Quackable을 구현하는 모든 구상클래스에서 QuackObservable에 있는 메소드를 구현하도록 ..
요약 복합 패턴 패턴 섞어 쓰기 오리 시뮬레이션 게임에 다양한 패턴 적용하기 메모 CHAPTER 12. 패턴을 모아 패턴 만들기 : 복합 패턴 패턴 섞어 쓰기 여러 패턴을 함께 사용해서 다양한 디자인 문제를 해결하는 방법을 복합 패턴이라고 부름. 복합 패턴이라고 불리려면 여러 가지 문제의 일반적인 해결법을 제시해야 함. 반복적으로 생길 수 있는 일반적인 문제를 해결하는 ****용도로 2개 이상의 패턴을 결합해서 사용하는 것을 뜻함. 복합 패턴의 왕이라 불리는 모델-뷰-컨트롤러(MVC)를 알아본다. 오리 시뮬레이션 게임에 다양한 패턴 적용하기 우선 Quackable 인터페이스를 만듦. 모든 Duck 객체에 Qucakable 인터페이스를 구현함. 꽥꽥거리는 행동을 구현하는 quack() 메소드를 구현해야 함..
요약 프록시 패턴 디자인 도구상자 안에 들어가야 할 도구들 메모 디자인 도구상자 안에 들어가야 할 도구들 프록시 패턴 특정 객체로의 접근을 제어하는 대리인(특정 객체를 대변하는 개체)을 제공함.
요약 프록시 패턴 보호 프록시 만들기 객체마을 데이팅 서비스 Person 인터페이스용 동적 프록시 만들기 1단계 : Invocationhandler 만들기 호출 핸들러 만들기 2단계 : 동적 프록시 생성 코드 만들기 메모 보호 프록시 만들기 java.lang.reflect 패키지 안에 프록시 기능이 내장되어 있음. 즉석에서 하나 이상의 인터페이스를 구현하고, 지정한 클래스에 메소드 호출을 전달하는 프록시 클래스를 만들 수 있음. 진짜 프록시 클래스는 실행 중에 생성되므로 이러한 자바 기술을 동적 프록시(dynamic proxy)라고 부름 이번에는 프록시가 2개의 클래스로 구성됨. 자바에서 Proxy클래스가 Subject 인터페이스 전체를 구현함. Proxy 객체의 모든 메소드 호출을 전달받는 Invoca..