Java로 배우는 디자인패턴 입문 Chapter 10. Strategy 알고리즘을 모두 교체하다

Slides:



Advertisements
Similar presentations
저소득층을 위한 부실 공교육 강화 필요성 제고 한국어문학부 이예지 영어영문학부 김미진.
Advertisements

비즈쿨 - 정 성 욱 - - 금오공고 비즈쿨 - 정 성 욱 1. 나는 각 단원들의 활동들에 성실하게 참여 하겠습니다. 우리의 다짐 2. 나는 나와 전체의 발전을 위해 각 멘토들의 지도에 순종하겠습니다. 3. 나는 각 단원들을 숙지함으로써 비즈니스 마인드를 함양하고 자신의.
노인복지론 담당교수 : 최 병태 교수님 학과 : 보건복지경영학과 학번 : 이름 : 김 태인 날짜 :
2014년도 주요법령 개정사항 (월) ~ (금) 대한전문건설협회 강원도회.
직장내 성희롱, 성폭력, 성매매 예방연수.
6.1 사용사례 6.2 객체 모델링 6.3 동적 모델링 6.4 시스템 설계 6.5 객체 설계 6.6 디자인 패턴
마케팅 담당자 : 서병진 팀장 / / 회 사 소 개 서 TWO & I 본사 : 서울시 영등포구 도림동 265-1번지 하나 아파텔 A동 714호 / TEL) / FAX)
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
경기도교육정보기록원 월호 월간 사이버보안 소식 경기교육사이버안전센터(GECSC)
미국경제의 신용위기가 한국경제에 미치는 영향
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
고급 컴퓨터 프로그래밍 팀명:지식인 팀원:홍광수 원대연 이소정.
데이터 관리의 모든 것 데이터 최적화하기 데이터 정렬하기 자동 필터와 고급 필터
Power Java 제4장 자바 프로그래밍 기초.
Chapter 10 Unit 23 to부정사의 역할 to부정사.
Java로 배우는 디자인패턴 입문 Chapter 20. Flyweight 동일한 것을 공유해서 낭비를 없앤다
등록공종 미입력시 협력업체로 등록이 되었더라도 업체추천시 검색이 되지 않으므로 입찰업체에서 배제됩니다.
Java의 정석 제 12 장 쓰레드(thread) Java 정석 남궁성 강의
Edus 충남 통합인증을 위한 교과부 표준보안 모듈 설치 안내 (smart.edus.or.kr)
효율적인 포인터 오류 검증 이욱세 한양대학교 컴퓨터공학과
프리젠테이션 활용 및 데이터활용 Chapter 6 인쇄 미리 보기와 인쇄 김 정 석
컴퓨터 활용 및 실습 Chapter 3 수식과 함수 김 정 석
인터넷 웹구축 7조 제안서 조장 : 임동진( ) 조원 : 임효종( ) 한상길( )
자바 5.0 프로그래밍.
Choi Younghwan CSE HUFS
모음(母音) 10개 양성(陽性)모음 음성(陰性)모음 중성모음 ㅏ(ㅑ) ㅓ(ㅕ) ㅗ (ㅛ) ㅜ (ㅠ) ㅣ ㅡ
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
지도교수님 : 김 정배 기획 및 프로그램 : 양 승훈
연구실안전관리시스템 안전교육 이수방법 사무국 시설과.
칼빈의 생애와 개혁자로의 변모 사학과 김종식.
HTML CSS 자바스크립트 무작정 따라하기
연구실 안전정보시스템 사용설명서 - 사용자 -.
국제의료관광 관련 법, 제도.
Java로 배우는 디자인패턴 입문 Chapter 14. Chain of Responsibility 책임 떠넘기기
Office 365 서비스 사용 안내 정보지원센터/ 두원공과대학교.
Java Chapter 4 ~ 주차.
북한에 대한 조사서 이리부천초등학교 2학년 2반 원선영 한국에서는 ‘인공기’, 북한에서는 ‘공화국 국기’라고 부른다.
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
CHAPTER 06 청소년의 행동문화 : 폭력(따돌림), 위험행동, 참여.
작성일 참고서적 – Programing Game AI by Example
나는 땅에서 키는 작지만 하늘로부터 재는 키는 이 세상 어느 누구보다도 크다
국제 갈등과 협상관리 제2강. 갈등이란 무엇인가? 개념과 기본 속성 신라대학교 국제관계학과 교수 이 동 윤.
남아메리카 선교 김수정, 이하정 전희진, 장성경.
게임 엔진 : 프로젝트 PPT_2 참참참 김 현 원.
중등교원 전보시스템 로그인 오류시 해결 해결방안 * 작성일 2016 년 12 월 15일 * 작성자 광주광역시교육청.
자바 5.0 프로그래밍.
CHAPTER 9-1 한국의 사회복지정책 - 사회보험제도 -
중앙대 지식경영학부 온라인 튜터링 프로그램 학업 계획 및 소개(인사/조직/전략)
우리는 알게모르게 매일 협상을 하면서 살아간다
말하기 영어 Seed는 현재와 미래의 길잡이 말하기 영어 교육은 부모님이 100% 의존하는 관리 시스템 과학적으로 검증된 비디오 피드백은 부모님 마음을 사로 잡는 힘.
김희정 Bridge Pattern.
Ⅲ. 남부 지방의 생활 제 4장 관광산업이 발달한 제주도 주제1. 화산 활동으로 이루어진 섬, 따뜻한 기후.
간호관리Ⅱ Chapter 4. 인적자원관리 동아인재대학교 장 광 심.
성경의 맥을 잡아라 박소원
자료구조 강의소개 정성훈 연락처 : 이메일 : 연구실 : 연219호 연락처 : 이메일 : 홈페이지: 정성훈.
자바 암호 프로그래밍 Java Cryptography Programming
11장 다형성과 추상 클래스, 인터페이스 Section 1 객체의 형 변환 Section 2 연산자 Section 3 다형성
Algorithms and Practice
동작 및 배포방법이 특이한 샘플
Hoons닷넷 Windows8 Study 1 조. 양수영 – yangsoo87 (조장).
코칭론 강원대학교 레저스포츠학과.
서술형 평가 확대 한국교육과정평가원 김 소 영.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
13. 词的来源 1. 基本词 2. 来源分类 2.1. 传承词 2.2. 古语词 2.3. 方言词 2.4. 外来词 2.5. 新词.
입점 제안서 (대학병원 건물).
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
제2부 전략경영 미래 CEO를 위한 경영학 제5장 전략유형 기업수준의 전략 사업수준의 전략 기능수준의 전략.
바람과 파도는 언제나 가장 능력 있 는 향해사의 편이다. -에드워드 기번
Chapter 1 인간행동의 이해와 사회복지실천
경찰학 세미나 제 5 강 경찰관직무집행법 2조 5호의 의미 신라대학교 법경찰학부 김순석.
Presentation transcript:

Java로 배우는 디자인패턴 입문 Chapter 10. Strategy 알고리즘을 모두 교체하다 2004-1

전략 Strategy 패턴 01. Strategy 적과 싸울 때의 책략 군대를 움직일 때의 작전 문제를 해결해 나갈 때의 바업 프로그래밍에서는 ‘알고리즘’ Strategy 패턴 알고리즘을 구현한 부분이 모두 교환 가능하도록 함 알고리즘(전략, 작전, 책략)을 교체해서 동일한 문제를 다른 방법으로 해결하는 패턴 10. Strategy /42

컴퓨터로 ‘가위바위보’ 하는 게임 두 가지 전략 02. 예제 프로그램 WinningStrategy ProbStrategy 전략: 이기면 다음 번에도 같은 손을 내민다. ProbStrategy 전략: 바로 전에 내밀었던 손에서 다음에 내밀 손을 확률적으로 계산한다. 10. Strategy /42

02. 예제 프로그램 클래스와 인터페이스 10. Strategy /42

02. 예제 프로그램 클래스 다이어그램 위임 10. Strategy /42

Hand 클래스 02. 예제 프로그램 가위바위보의 손을 나타내는 클래스 handvalue 필드: 주먹은 0, 가위는 1, 보는 2로 표현 getHand( ) 가위바위보를 나타내는 숫자로부터 해당 손을 반환함 isStrongerThan( ) 현재 손이 입력 인자로 들어온 손을 이기면 true를 반환함 isWeakerThan( ) 현재 손이 입력 인자로 들어온 손에게 지면 true를 반환함 10. Strategy /42

Hand 클래스 02. 예제 프로그램 fight( ) toString( ): 현재 손해 해당하는 문자열을 반환한다. 현재 손이 입력인자 손과 무승부면 0, 이기면 1, 지면 -1을 반환함 우열 판정하는 수식 현재 손이 주먹(0)이고 입력 손이 가위(1)라면 또는, 현재 손이 가위(1)이고 입력 손이 보(2)라면 또는, 현재 손이 보(2)이고, 입력 손이 주먹(0)이라면 현재 손이 이긴다. => 1을 반환한다. 코드에서 this를 생략해도 된다. toString( ): 현재 손해 해당하는 문자열을 반환한다. (this.handvalue + 1) % 3 == h.handvalue (handvalue + 1) % 3 == h.handvalue 10. Strategy /42

Strategy 인터페이스 02. 예제 프로그램 가위바위보의 ‘전략’을 위한 추상 메소드를 모아놓은 곳 nextHand( ) 다음에 내밀 손을 얻기 위해 호출하는 메소드 이 메소드가 호출되면, Strategy 인터페이스를 구현한 클래스가 지혜를 모아 ‘다음 손’을 결정함 study( ) 전략을 위한 준비를 하는 메소드 이긴 경우에는 Player가 study(true)를 호출하고, 진 경우에는 Player가 study(false)를 호출한다. 10. Strategy /42

WinningStrategy 클래스 02. 예제 프로그램 Strategy 인터페이스를 구현한 클래스 nextHand( )에서의 전략 직전의 승부에서 승리했으면, 동일한 손을 내민다 직전 승부에서 패했으면, 난수를 사용해서 다음 손을 정한다. java.util.Random 클래스 이용 nextInt(3) : 0 부터 2 사이의 난수 정수 생성 어리석은 전략이다 won 필드: 지난번 승부에서 이겼으면 true, 졌으면 false 저장 prevHand 필드: 지난번 승부에서 내민 손 저장 10. Strategy /42

ProbStrategy 클래스 02. 예제 프로그램 좀 더 머리를 쓰는 전략 history 필드: 과거의 승패를 유지하는 테이블 history[이번에 내밀었던손][다음에 내밀손] 예 history[0][0]: 주먹, 주먹 순으로 손을 내밀어서 이긴 횟수 history[0][1]: 주먹, 가위 순으로 손을 내밀어서 이긴 횟수 history[0][2]: 주먹, 보 순으로 손을 내밀어서 이긴 횟수 10. Strategy /42

ProbStrategy 클래스 02. 예제 프로그램 prevHandValue 필드: 지난번에 냈던 손 currentHandValue 필드: 이번에 냈던 손 nextHand( ): 다음에 낼 손을 반환함 handValue: 다음에 낼 손의 값을 저장함 전략 이번에 주먹을 냈더라면, history[0][0], history[0][1], history[0][2]로부터 다음번에 낼 손의 확률을 계산하려고 한다. history[0][0]=3, history[0][1]=5, history[0][2]=7 이 있었다면, 세 숫자를 다 더해서(3+5+7=15) 그 값을 seed로 해서 난수를 얻음 난수가 0부터 3미만이라면, 주먹을 내고 난수가 3이상 8미만이라면, 가위를 내고 난수가 8이상 15미만이라면, 보를 낸다. 10. Strategy /42

ProbStrategy 클래스 02. 예제 프로그램 study( ) : 전략을 위한 준비 작업을 하는 메소드 이번에 이겼으면, history[직전에 냈던 손][이번에 냈던 손] 에 1을 더한다. 이번에 졌으면, history[직전에 냈던 손][이번에 안 냈던 손] 각각에 1을 더한다. 10. Strategy /42

Player 클래스 02. 예제 프로그램 가위바위보를 하는 사람을 표현한 클래스 생성 시, ‘이름’과 ‘전략’이 주어진다. 생성 시의 ‘전략’에 따라 다음에 내밀 손이 결정된다. nextHand( ) 메소드 안에서 Strategy의 nextHand( )를 호출한다. Strategy에게 위임한다. 이기든(win) 지든(lose) 무승부이든(even), 다음 승부를 위해서 Strategy의 study( ) 메소드를 호출한다. win( ), lose( ), even( ) 승패 횟수를 저장 wincount, losecount, gamecount 필드 10. Strategy /42

Main 클래스 02. 예제 프로그램 실제로 Player 둘을 생성해서 가위바위보 게임을 시킴 “Winner: “ + player1 “Winner: “ + player1.toString( ) 10. Strategy /42

ConcreteStrategy(구체적 전략)의 역할 03. 등장 역할 Strategy(전략)의 역할 Strategy 패턴을 이용하기 위한 인터페이스(API) 결정 예제에서는 Strategy 인터페이스가 해당됨 ConcreteStrategy(구체적 전략)의 역할 Strategy 인터페이스를 실제로 구현 구체적 전략(작전, 책략, 알고리즘)을 나타냄 예제에서는, WinningStrategy와 ProbStrategy가 해당됨 Context(문맥)의 역할 Strategy를 이용하는 역할 ConcreteStrategy 인스턴스를 가지고, 필요에 따라서 이를 이용함 예제에서는, Player가 해당됨 10. Strategy /42

03. 등장 역할 클래스 다이어그램 위임 => Strategy를 쉽게 교체할 수 있다 10. Strategy /42

일부러 Strategy 역할을 만들 필요가 있을까요? 04. 독자의 사고를 넓혀주는 힌트 일부러 Strategy 역할을 만들 필요가 있을까요? Strategy 역할을 구현하기만 한다면, ConcreteStrategy의 종류를 변경하기가 쉽다. 예1: 예전의 알고리즘과 개량한 알고리즘의 속도를 비교하고 싶은 경우, 간단히 교체해서 테스트할 수 있다. 예2: 장기 게임에서 사용자의 선택에 따라 사고 루틴의 레벨을 교체하는 것도 간단하게 실행할 수 있다. 실행 중에 교체하는 것도 가능하다 프로그램 동작 중에 ConcreteStrategy 역할을 교체할 수 있다 예: 메모리가 적은 환경에서는 SlowButLessMemoryStrategy를 사용하고, 메모리가 충분한 환경에서는 FastButMoreMemoryStrategy를 사용한다. 10. Strategy /42

Abstract factory 패턴 (8장) State 패턴 (19장) 05. 관련 패턴 Flyweight 패턴 (20장) Abstract factory 패턴 (8장) State 패턴 (19장) 10. Strategy /42

알고리즘(전략)을 쉽게 교체할 수 있는Strategy 패턴 06. 요약 알고리즘(전략)을 쉽게 교체할 수 있는Strategy 패턴 위임(delegation) 덕택에 가능함 10. Strategy /42

연습 문제 각자 공부할 것 10. Strategy /42