Development/디자인 패턴
-
[수정중] 헤드퍼스트 디자인 패턴 [13]Development/디자인 패턴 2018. 1. 9. 19:06
헤드퍼스트 디자인 패턴[13] 패턴과 함께하는 행복한 삶 패턴: 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다. 컨텍스트: 패턴이 적용되는 상황문제: 컨텍스트 내에서 이루고자 하는 목적해결책: 누구든지 적용가능하되, 제약조건 내에서 목적을 달성할 수 있는 일반적인 디자인. GoF Design Patterns를 보면 패턴 카탈로그에 의해 패턴들이 정의되어 있다!Intent: 패턴 이름Motivation: 패턴이 만들어지게 된 부분Applicability: 어디 적용가능한지?Structure: 구조... 클래스간 관계를 다이어그램으로 표현Participant: 이 디자인에 포함된 클래스와 객체에 대한 설명Collaborations: 각 participant 간 패턴내에서 어떻게 서로 도움을 주는지 설명..
-
[수정중] 헤드퍼스트 디자인 패턴 [11]Development/디자인 패턴 2018. 1. 9. 19:06
헤드퍼스트 디자인 패턴[11] 프록시 패턴 프록시: 자신이 대변하는 객체와 그 객체에 접근하고자 하는 클라이언트 사이에서 작업을 처리. gumball 프로그램의 위치, 현황, 현재상태에 대해 원격으로 모니터링하고싶다! 원격 프록시를 통해 구현!프록시: 진짜 객체를 대신함. -> 실제 객체인 것 처럼 행동하지만 실제로는 네트워크를 통해서 진짜 객체와 데이터를 주고받음.원격 프록시: 원격 객체에 대한 로컬 대변자 원격 객체: 다른 JVM의 힙에있는 객체(다른 주소공간에서 돌아가고 있는 원격객체) 로컬 대변자(Local Representative): 다른 원격 객체에게 메소드 호출을 전달해주는 역할을 맡음
-
[수정중] 헤드퍼스트 디자인 패턴 [10]Development/디자인 패턴 2018. 1. 9. 19:05
헤드퍼스트 디자인 패턴[10] 스테이트 패턴 상태를 나타내는데 유용한 패턴. 사용자가 어떤 행동을 하는 것에 대해 적절한 행동을 취하게 하도록 돕는다. state machine을 구현하는 방법: 상태를 모은다. (책의 예시에선 4가지 상태가 있음) 현재 상태를 저장하기 위한 인스턴스 변수를 만들고 상태값을 정의한다. 각 상태마다 정수를 부여, 현재상태를 저장하는 인스턴스 변수도 생성 이 시스템에서 일어날 수 있는 모든 행동을 정의. 행동들에 대해 상태가 변하는 것을 알 수 있음. -> 뽑기 기계에 대한 인터페이스 state machine 역할을 하는 클래스를 생성. 메소드 내에서는 조건문에 따른 다양한 상황에 대한 처리가 가능. 책의 첫번째 예제의 단점! 전혀 객체지향적이지 않은 소스코드! OCP를 지키..
-
[수정중] 헤드퍼스트 디자인 패턴 [9]Development/디자인 패턴 2018. 1. 9. 19:05
헤드퍼스트 디자인 패턴[9] 이터레이터 & 컴포지트 패턴 책의 예제로 이해하자. 아침메뉴 식당과 팬케이크 식당이 합쳐졌다! 식당메뉴 표시와 메뉴 구현이 원래 두개였고, 각각의 요리요소를 저장하는 컬렉션도 다르다. 이걸 한번에 하려면?-> 바뀌는 부분을 캡슐화하라!-> 객체 컬렉션의 형식이 다르기 때문에 반복작업을 하는 방법이 달라지는 부분이다. 소스로 이해하는게 더 빠를 듯 싶다! 373페이지의 클래스 다이어그램으로부터 이해! java.util.Iterator를 사용 createIterator가 정의된 인터페이스 Menu를 새로 불러옴. -> 구상 Iterator 클래스를 만들어서 리턴할 책임을 넘김 PancakeHouseMenuIterator는 그냥 ArrayList의 Iterator를 형태에 맞게 오..
-
[수정중] 헤드퍼스트 디자인 패턴 [8]Development/디자인 패턴 2018. 1. 2. 16:21
헤드퍼스트 디자인 패턴[8] 템플릿 메소드 패턴 공통점을 뽑아내서 코딩해보자! 커피와 홍차를 만드는 클래스가 있다고 가정하자. 이 둘의 만드는 법은 각각 다음과 같다. 그리고 이 둘의 공통점을 찾아보자. 커피 만드는 레시피 물을 끓인다 끓는 물에 커피를 우려낸다 커피를 컵에 따른다 설탕과 우유를 추가한다 홍차 만드는 레시피 물을 끓인다 끓는 물에 차를 우려낸다 차를 컵에 따른다 레몬을 추가한다 prepareRecipe까지 추상화할 수 있다! prepareRecipe 같은 것이 템플릿 메소드! 우려낸다 / 첨가물을 추가한다는 하나로 합칠 수 있는 기능이다. 이런것들은 서브클래스에 의존한다. 물끓이고 음료를 컵에 붓는건 걍 여기서 구현한다. 템플릿 메소드에서는 알고리즘의 각 단계들을 정의하며, 그 중 한개 ..
-
[수정중] 헤드퍼스트 디자인 패턴 [7]Development/디자인 패턴 2018. 1. 2. 01:07
헤드퍼스트 디자인 패턴[7] 어댑터 패턴 & 퍼사드 패턴 어댑터: 한 인터페이스를 다른 인터페이스로 변환시켜주는 역할을 수행. 객체지향에서도 비슷하게 받아들이면 된다. 다시말해 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스(서드파티 클래스)에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 수행한다. 1장에서의 duck 인터페이스를 통해 다시 봅시다. 클라이언트: 타깃 인터페이스에 맞게 구현되어있음. 즉, 어댑터와 호환됨.어댑터: 타깃 인터페이스를 구현하며, adaptee 인스턴스가 있다.adaptee: ducks에서는 Turkey가 adaptee 인터페이스. (adaptee: 어댑터를 중간에 두고 클라이언트와 정 반대의 위치에 있는 것. adapter에게서 adapt받는 ..
-
[수정중] 헤드퍼스트 디자인 패턴 [6]Development/디자인 패턴 2018. 1. 2. 01:06
헤드퍼스트 디자인 패턴[6] 커맨드 패턴 특정 객체에 대한 특정 작업 요청을 캡슐화함.커맨드 객체를 만들어서 특정 객체에 대한 특정 작업요청을 캡슐화 시켜줌.예를들어 거실 전등(객체)의 불좀 켜라(작업요청)을 캡슐화. 사용자는 그냥 버튼누름만 했는데 내부에서 저게 자동으로 되게... 7가지 슬롯에 제품을 연결하고 on/off 버튼으로 조작. 마지막 동작을 되돌리는 undo 버튼도 있고... 그 전에 앞서 커맨드 패턴을 이해해보자. 식당의 고객, 점원, 주문과 주방장 사이의 관계로부터 파악하자. 주문하는 방법에 대해 써보자면... 고객이 점원에게 주문을한다. 점원은 주문을 받아서 주방에 주문을 전달한다. 주방장이 주문대로 음식을 준비한다. -> createOrder() ... 주문이 들어옴. 이는 Orde..
-
[수정중] 헤드퍼스트 디자인 패턴 [5]Development/디자인 패턴 2018. 1. 2. 01:06
헤드퍼스트 디자인 패턴[5] 싱글턴 패턴 인스턴스가 단 하나! 뿐인 객체를 의미한다. 생성자가 private. 하지만 해당 객체에 대한 getter가 public static이기 때문에 필요에 따라 누구나 가리킬 수 있게 된다. 이것이 바로 싱글턴 패턴! 싱글턴 패턴: 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. concurrency가 필요하다면 상황이 좀 문제임. 멀티 스레딩을 처리할 수 있어야되는데 그게 안되면 큰일임.. getInstance()에 synchronized 키워드를 붙임(대신 상당히 느려짐!) 인스턴스를 그냥 처음부터 생성해버림 private static Singleton uniqueInstance = new Singleton..