일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 후니의쉽게쓴시스코네트워킹
- 튜터링
- 캡쳐링
- 정보
- 부분합알고리즘
- array
- 회사폐업
- 정보처리기사개정
- 사회초년생
- leetcode
- 네트워크
- 청년내일채움공제
- 프로그래머스
- C++
- 순열
- 알고리즘
- IT기초
- 막대기자르기
- 코딩테스트
- 실업인정인터넷신청
- 자취준비
- 전화영어
- 모여봐요동물의숲
- 취업사실신고
- 실업급여
- HeadFirstDesignPatterns
- 자료구조
- 동적계획법
- 생애첫계약
- 후니의쉽게쓴시스코라우팅
- Today
- Total
목록HeadFirstDesignPatterns (13)
따봉도치야 고마워

디자인 패턴이란 특정 컨텍스트 내에서 주어진 문제에 대한 해결책 컨텍스트(context) : 패턴이 적용되는 상황, 반복적으로 일어날 수 있는 상황이어야 함 문제(problem) : 그 컨텍스트 내에서 이루고자 하는 목적 / 컨텍스트 내에서 생길 수 있는 제약조건 해결책(sloution) : 일련의 제약조건 내에서 목적을 달성할 수 있는 디자인 + 포스(Force) = 문제 = 목적과 제약조건 (이 둘 사이에서 적절하게 균형을 잡아야 패턴의 해결책이 완성됨) 패턴 카탈로그 패턴의 배경, 용도, 해결책, 결과 등이 모든 내용이 수록되어 있음 ex. GOF의 디자인 패턴 디자인 패턴 분류 점점 많은 디자인 패턴이 발견되면서 패턴을 그룹화해서 분류하게됨 가장 유명한 분류 방법 : 용도에 따라 생성, 행동, 구..

컴파운드 패턴 두 개 이상의 패턴을 결합해 일반적으로 자주 등장하는 문제들에 대한 해법을 제공 SimUDuck 1장에서 사용했던 예제를 처음부터 다시 만들어보자 (bb-dochi.tistory.com/72) 1. Quackable 인터페이스 정의 public interface Quackable{ public void quack(); } 각 오리 클래스에서 종류에 맞게 구현하고 ex) MallardDuck, RedheadDuck 시뮬레이터를 생성해 테스트 해보자 void simulate(){ Quackable mallardDuck = new MallardDuck(); Quackable duckCall = new DuckCall(); Quackable rubberDuck = new rubberDuck(); ..

프록시 패턴 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 원격 객체 / 생성하기 힘든 객체 / 보안이 필요한 객체에 대한 대변자 객체 생성 프록시 패턴의 수많은 변종 - "접근을 제어하는 방법"에서 차이가 있음 원격 프록시를 사용해 원격 객체에 대한 접근 제어 가상 프록시를 사용해 생성하기 힘든 자원에 대한 접근 제어 보호 프록시를 사용해 접근 권한이 필요한 자원에 대한 접근 제어 프록시 원격 객체에 대한 로컬 대변자 원격 객체 : 다른 JVM에 있는 객체 ex) 뽑기기계 로컬 대변자 : 로컬 대변자의 메소드를 호출하면 원격 객체의 메소드를 호출하는 것처럼 행동 = 1. 클라이언트는 원격 서비스에 있는 메소드를 호출한다고 생각하고 작업 처리 2. 실제로..

스테이트 패턴 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음 마치 객체의 클래스가 바뀌는 것과 같은 결과 Q. 스테이트 패턴과 스트래티지 패턴의 다이어그램이 같은 것 같은데? 다이어그램은 같지만 용도의 차이 스테이트 패턴 스트래티지 패턴 - 상황에 따라 Context에서 여러 상태 객체 중 하나에 행동 위임 - 내부 상태가 변경됨에 따라 컨텍스트의 행동도 자연스럽게 바뀜. - 즉 클라이언트는 상태 객체에 대해 몰라도 됨 - 수많은 조건문 대신에 사용 - 일반적으로 클라이언트에서 컨텍스트한테 전략 객체를 결정해줌 - 실행 시 전략 객체를 변경할 수 있는 유연성 제공을 위해 사용 - 상속보다 구성을 이용한 유연성 극대화 Q. 반드시 구상 상태 클래스에서 다음 상태가 변경되어야 하는 건지? 아..

이터레이터(Iterator) 패턴 컬렉션 구현 방법을 노출시키지 않으면서도 모든 항목에 접근할 수 있게 해주는 방법을 제공 (반복 작업 캡슐화) 또한 각 항목에 접근하는 기능을 집합체가 아닌 반복자 객체에서 책임져 집합체 인터페이스 및 구현이 간단해짐 + 컬렉션과 반복자 : 자바 Collection 인터페이스에선 집합체를 조작하기 위한 여러가지 유용한 메소드들을 포함하고 있음 : 그 중 하나가 iterator() 객체 마을 식당과 팬케이크 하우스의 합병 식당은 (점심) 메뉴를 ArrayList로, 하우스는 (아침메뉴를) 배열로 저장하고 있음. 두 가게의 메뉴 구현 방식이 달라 메뉴를 출력하고, 구별하는 웨이트리스 클래스를 만드는데 어려움이 생김 각 타입에 맞춰 두 번씩 반복해야 함 (식당이 추가되면 그만..
템플릿 메소드 패턴 메소드에서 알고리즘의 골격(틀)을 정의하고, 여러 단계 중 일부는 서브 클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다. 예제 커피와 차를 만드는 클래스를 추상화 해보자 Coffee Tea 1. 물을 끓인다. 2. 끓는 물에 커피를 우려낸다. 3. 커피를 컵에 따른다. 4. 설탕과 우유를 추가한다. 1. 물을 끓인다. 2. 끓는 물에 차를 우려낸다. 3. 차를 컵에 따른다. 4. 레몬을 추가한다. 기존 커피/차 클래스 public class Coffee{ void prepareRecipe(){ boilWater(); brewCoffeeGrinds(); pourInCup(); addSugarAndMi..

어댑터 패턴 한 클래스의 인터페이스를 다른 클라이너트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어탭터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용 가능. 클라이언트는 타겟 인터페이스에 맞게 구현이 되어있고, 그걸 통해 메소드 호출 어댑터는 타겟 인터페이스를 구현하며 *어댑티 객체를 가지고 있음 어댑터는 어댑티 객체를 사용해 클라이언트의 요청을 응답 클라이언트는 결과를 받지만 중간에 어댑터가 껴있는지 알지 못함 *어댑티 : 어댑터를 가운데 두고 클라이언트(타겟 인터페이스)와 반대의 위치에 있는 것 ex) 아래 예제에서 Turkey 객체지향 어댑터 - 말 그대로, 어떤 인터페이스를 클라이언트가 요구하는 형태의 인터페이스에 적응 시켜주는 역할 ex) 기존 시스템에..
커맨드 패턴 커맨드 패턴을 이용해 요청 내역을 객체로 캡슐화 할 수 있고, 매개변수를 사용해 여러 가지 다른 요청을 집어 넣을 수 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수 있고, 작업취소 기능도 지원이 가능하다. 요청을 하는 객체와(요청), 그 요청을 수행하는 객체(동작)를 분리 할 수 있음. 리시버에 대한 동작이 추가될 때마다 잡다한 클래스가 많이 추가될 수 있다는 단점이 있음. 요청 자체를 리시버한테 넘기지 않고 자신이 처리하는 '스마트' 커맨드 객체도 종종 사용 커맨드 패턴 구조 수신자 (Receiver) : 실제 행동을 하는 객체 커맨드 (Command) : 리시버와 리시버의 특정 행동을 호출하는 객체, 버튼에 할당될 행위 발동자 (Invoker) : 커맨드를 저장해놓고, 행위 ..