SlideShare a Scribd company logo
1 of 17
최범균 (madvirus@madvirus.net)
  blog: javacan.tistory.com




     사진출처: http://www.flickr.com/photos/cdm/366676021/
연봉은 제리가
           협상해




설계에서 Delegation(위임)이란?
                   사진출처: 다음 영화
기능의 확장&재사용:상속으로 푼다면….


            Person




    Agent   Coach    Player




     플레잉 코치를 추가하려면….
기능의 확장&재사용:상속으로 푼다면….
                  Person




   Agent       Coach           Player




            PlayingCoach    GoalKeeper       MF




           GKPlayingCoach       MFPlayingCoach
상속은 Kind(종류,종)에 대한 것

         JComponent




        AbstractButton




            JButton




       BasicArrowButton
KIND 맞어?
               Person




Agent       Coach           Player




         PlayingCoach    GoalKeeper       MF




        GKPlayingCoach       MFPlayingCoach
이건 사실 Role(역할)에 대한 문제


      선수가 누구야?


      코치가 누구야?


   에이전트가 누구야?
Delegation을 이용하여 Role을 분리
                        Role

               Player




    Person     Coach




               Agent
Delegation의 구조

Delegator                        Delegate
                          usee

            user




                             public class Delegator {

                                 public void do() {
                                     delegate.some();
                                 }

                             }
Delegation …
• 클래스 기능을 확장하고 재사용하는 방법
 – 상속에 비해 확장 유연
 – 런타임에 기능의 교체가 필요한 경우 유용


• 좋은 설계의 바탕

• 다양한 패턴의 기본
 – Decorator, Proxy, Strategy, …
예 - 콜렉션의 처리

                상속                                위임


                List



                                  LuggageCompartment     List
                              -pieces : List
         LuggageCompartment




class LuggageCompartment      class LuggageCompartment {
      extends List {            List pieces;
  void add(Luggage piece) {
    ...                           void add(Luggage piece) {
    super.add(piece);               ...
  }                                 pieces.add(piece);
}                                 }
                              }
Delegation의 기본 - Strategy (Policy)

                      어떻게 돈을
                            벌지?




               사진출처: 스타뉴스
Strategy: 기능 정의, 구현 변경 가능



                    어떻게 돈을 벌지?




기능: 돈을 벌다
구현안1: 대성을 패밀리에 출현
구현안2: 태양을 솔로로 데뷔
구현안3: 단체로 교복 광고
변이를 조건문으로 구현한다면…


if (conditionA) {

    … // 알고리즘1 구현
                           코드가 복잡해짐
} else if (conditionB) {
                           특정 런타임에 사용되지 않는 코드 포함
    … // 알고리즘2 구현
                           신규 알고리즘 추가의 어려움
} else if (conditionC) {

    … // 알고리즘3 구현

}
Strategy 패턴의 구조

Context                                                         Strategy

          EntertainmentCompany                    MakingMoneyPlan
  +setMoneyPlan(plan : MakingMoneyPlan)          +makeMoney()




                                          Solo        Famiyly        AD
                                     -person




                                           Strategy의 구현체
Strategy 적용 결과
• 동일한 기능을 제공하는 알고리즘의 집합 정의
• Delegation으로 상속 대체
• 조건문 제거
  – Context 클래스 크기가 작아짐
• Context 변경 없이 Strategy 교체 가능
  – 이슈: 누가 Strategy 구현체를 Context에 설정할지
    • DI(dependecy injection)으로 설정 (예, 스프링)
    • 또는 Context를 사용할 객체가 설정
여기 질문이요!

More Related Content

What's hot

6 1강(Powerpoint2007)
6 1강(Powerpoint2007)6 1강(Powerpoint2007)
6 1강(Powerpoint2007)
guest527dad5
 
사업계획서작성 과제안내
사업계획서작성 과제안내사업계획서작성 과제안내
사업계획서작성 과제안내
Jonghun Park
 
Benchmark 1 reading 2
Benchmark 1 reading 2Benchmark 1 reading 2
Benchmark 1 reading 2
Maria BREEN
 
Departamentalizacion y tipos de departamentalizacion
Departamentalizacion y tipos de departamentalizacionDepartamentalizacion y tipos de departamentalizacion
Departamentalizacion y tipos de departamentalizacion
andresf123
 
CHN-009-國際物流中心運作機制
CHN-009-國際物流中心運作機制CHN-009-國際物流中心運作機制
CHN-009-國際物流中心運作機制
handbook
 
Alfabet Hebrajski
Alfabet HebrajskiAlfabet Hebrajski
Alfabet Hebrajski
natan
 
창세기1-pdf
창세기1-pdf창세기1-pdf
창세기1-pdf
kimwnd
 
Pillo buena gente trombon
Pillo buena gente   trombonPillo buena gente   trombon
Pillo buena gente trombon
Marcos Burbano
 

What's hot (20)

Jawi th6 part2
Jawi th6 part2Jawi th6 part2
Jawi th6 part2
 
Rating Bar in Android Example
Rating Bar in Android ExampleRating Bar in Android Example
Rating Bar in Android Example
 
Shared Preference in Android App
Shared Preference in Android AppShared Preference in Android App
Shared Preference in Android App
 
Brand Management through Social Media
Brand Management through Social MediaBrand Management through Social Media
Brand Management through Social Media
 
"Social" Feed Aggregator - 깨작이
"Social" Feed Aggregator - 깨작이"Social" Feed Aggregator - 깨작이
"Social" Feed Aggregator - 깨작이
 
6 1강(Powerpoint2007)
6 1강(Powerpoint2007)6 1강(Powerpoint2007)
6 1강(Powerpoint2007)
 
Pendidkan th6 part2
Pendidkan th6 part2Pendidkan th6 part2
Pendidkan th6 part2
 
사업계획서작성 과제안내
사업계획서작성 과제안내사업계획서작성 과제안내
사업계획서작성 과제안내
 
Benchmark 1 reading 2
Benchmark 1 reading 2Benchmark 1 reading 2
Benchmark 1 reading 2
 
Departamentalizacion y tipos de departamentalizacion
Departamentalizacion y tipos de departamentalizacionDepartamentalizacion y tipos de departamentalizacion
Departamentalizacion y tipos de departamentalizacion
 
048 alfath iphone
048 alfath iphone048 alfath iphone
048 alfath iphone
 
Tablaexce lb
Tablaexce lbTablaexce lb
Tablaexce lb
 
Key boards
Key boardsKey boards
Key boards
 
CHN-009-國際物流中心運作機制
CHN-009-國際物流中心運作機制CHN-009-國際物流中心運作機制
CHN-009-國際物流中心運作機制
 
Alfabet Hebrajski
Alfabet HebrajskiAlfabet Hebrajski
Alfabet Hebrajski
 
창세기1-pdf
창세기1-pdf창세기1-pdf
창세기1-pdf
 
Android app - Creating Live Wallpaper (tamil)
Android app - Creating Live Wallpaper (tamil)Android app - Creating Live Wallpaper (tamil)
Android app - Creating Live Wallpaper (tamil)
 
049 alhujrat iphone
049 alhujrat iphone049 alhujrat iphone
049 alhujrat iphone
 
Pillo buena gente trombon
Pillo buena gente   trombonPillo buena gente   trombon
Pillo buena gente trombon
 
Bhale chance
Bhale chanceBhale chance
Bhale chance
 

More from beom kyun choi

ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
beom kyun choi
 

More from beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
 
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
 
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
 
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
 
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
 
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 

패턴스터디-1 Delgation&Strategy

  • 1. 최범균 (madvirus@madvirus.net) blog: javacan.tistory.com 사진출처: http://www.flickr.com/photos/cdm/366676021/
  • 2. 연봉은 제리가 협상해 설계에서 Delegation(위임)이란? 사진출처: 다음 영화
  • 3. 기능의 확장&재사용:상속으로 푼다면…. Person Agent Coach Player 플레잉 코치를 추가하려면….
  • 4. 기능의 확장&재사용:상속으로 푼다면…. Person Agent Coach Player PlayingCoach GoalKeeper MF GKPlayingCoach MFPlayingCoach
  • 5. 상속은 Kind(종류,종)에 대한 것 JComponent AbstractButton JButton BasicArrowButton
  • 6. KIND 맞어? Person Agent Coach Player PlayingCoach GoalKeeper MF GKPlayingCoach MFPlayingCoach
  • 7. 이건 사실 Role(역할)에 대한 문제 선수가 누구야? 코치가 누구야? 에이전트가 누구야?
  • 8. Delegation을 이용하여 Role을 분리 Role Player Person Coach Agent
  • 9. Delegation의 구조 Delegator Delegate usee user public class Delegator { public void do() { delegate.some(); } }
  • 10. Delegation … • 클래스 기능을 확장하고 재사용하는 방법 – 상속에 비해 확장 유연 – 런타임에 기능의 교체가 필요한 경우 유용 • 좋은 설계의 바탕 • 다양한 패턴의 기본 – Decorator, Proxy, Strategy, …
  • 11. 예 - 콜렉션의 처리 상속 위임 List LuggageCompartment List -pieces : List LuggageCompartment class LuggageCompartment class LuggageCompartment { extends List { List pieces; void add(Luggage piece) { ... void add(Luggage piece) { super.add(piece); ... } pieces.add(piece); } } }
  • 12. Delegation의 기본 - Strategy (Policy) 어떻게 돈을 벌지? 사진출처: 스타뉴스
  • 13. Strategy: 기능 정의, 구현 변경 가능 어떻게 돈을 벌지? 기능: 돈을 벌다 구현안1: 대성을 패밀리에 출현 구현안2: 태양을 솔로로 데뷔 구현안3: 단체로 교복 광고
  • 14. 변이를 조건문으로 구현한다면… if (conditionA) { … // 알고리즘1 구현 코드가 복잡해짐 } else if (conditionB) { 특정 런타임에 사용되지 않는 코드 포함 … // 알고리즘2 구현 신규 알고리즘 추가의 어려움 } else if (conditionC) { … // 알고리즘3 구현 }
  • 15. Strategy 패턴의 구조 Context Strategy EntertainmentCompany MakingMoneyPlan +setMoneyPlan(plan : MakingMoneyPlan) +makeMoney() Solo Famiyly AD -person Strategy의 구현체
  • 16. Strategy 적용 결과 • 동일한 기능을 제공하는 알고리즘의 집합 정의 • Delegation으로 상속 대체 • 조건문 제거 – Context 클래스 크기가 작아짐 • Context 변경 없이 Strategy 교체 가능 – 이슈: 누가 Strategy 구현체를 Context에 설정할지 • DI(dependecy injection)으로 설정 (예, 스프링) • 또는 Context를 사용할 객체가 설정