Korea Polytechnic University Advanced Game Software Engineering Student Presentation Advanced Game Software Engineering Student Presentation Chapter 2.

Slides:



Advertisements
Similar presentations
비즈쿨 - 정 성 욱 - - 금오공고 비즈쿨 - 정 성 욱 1. 나는 각 단원들의 활동들에 성실하게 참여 하겠습니다. 우리의 다짐 2. 나는 나와 전체의 발전을 위해 각 멘토들의 지도에 순종하겠습니다. 3. 나는 각 단원들을 숙지함으로써 비즈니스 마인드를 함양하고 자신의.
Advertisements

© Ian Sommerville 2004Software Engineering, 7th edition. Chapter 10 Slide 1 정형 명세 배재대학교 멀티미디어 정보공학 연구실 발표자 : 이 상 조
PRESENTATION 저온화상이란?
고전에서 미래를 읽다(5) 영양괘각(羚羊掛角) 영양이 훌쩍 뛰어 나뭇가지에 뿔을 걸다
Vision System Lab, Sang-Hun Han
14. 위피 게임: 가위바위보 게임 초기에 점수=0 처음 이기면 10 점 그 다음부터 이기면 점수=현재 점수*2 지면
Personal history Name : Kim Myoungsoo C.P “ Work Experience
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
김지영(42) Computer programmer 입사7년차 남편: IT분야 근무 남궁선(42) 백화점 전산실 출신
대학 특성화사업 (CK-Ⅰ, CK-Ⅱ) 한국연구재단 학술진흥본부 대학지원팀 대학지원팀.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
D. 지뢰찾기 분석 설계 예제.
데이터 관리의 모든 것 데이터 최적화하기 데이터 정렬하기 자동 필터와 고급 필터
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
C++ Espresso 제9장 다형성.
자바 5.0 프로그래밍.
임베디드 프로그래밍 Lecture #
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
Chapter 06. 스택(Stack) Chapter 06-1: 스택의 이해와 ADT 정의.
Java IT응용시스템공학과 김형진 교수 2장. 자바의 환경 public class SumTest {
Edus 충남 통합인증을 위한 교과부 표준보안 모듈 설치 안내 (smart.edus.or.kr)
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
DataScience Lab. 박사과정 김희찬 (월)
Java로 배우는 디자인패턴 입문 Chapter 17. Observer 패턴 상태의 변화를 통지한다
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
컴퓨터 활용 및 실습 Chapter 3 수식과 함수 김 정 석
프로그래밍2 및 실습 C언어 기반의 C++ 2.
QT/Embedded, iPop을 이용한 네트워크 오목게임
QT/Embedded, iPop을 이용한 네트워크 오목게임
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
POWER POINT PRESENTATION
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
재료의 기계적 성질 Metal Forming CAE Lab. Department of Mechanical Engineering
DataScience Lab. 박사과정 김희찬 (월)
Korea University of Technology and Education
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Software Engineering 프로젝트 과제물
역량 사전 목 차 I 공통/직무역량 ………………… Page 1 II 관리(리더)역량 ………………… Page 39.
단순기능 외국인력에 대한 정책방향 유 길 상 한국노동연구원 고용보험연구센터 소장.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
지도교수님 : 김 정배 기획 및 프로그램 : 양 승훈
칼빈의 생애와 개혁자로의 변모 사학과 김종식.
매스커뮤니케이션 신문 목원대학교 서 진 희.
[CPA340] Algorithms and Practice Youn-Hee Han
국제의료관광 관련 법, 제도.
Java로 배우는 디자인패턴 입문 Chapter 14. Chain of Responsibility 책임 떠넘기기
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
한 가지 모양 조각으로 도형 덮기 수학 5학년 나 단계 2. 무늬만들기>1/7 [제작의도] [활용방법]
Java Chapter 4 ~ 주차.
2d game pRogramming 1차 발표 이재남.
고전에서 미래를 읽다(3) 오동누습(吾東陋習) 우리나라의 제일 나쁜 더러운 버릇을 버려라.
남아메리카 선교 김수정, 이하정 전희진, 장성경.
자바 5.0 프로그래밍.
CHAPTER 9-1 한국의 사회복지정책 - 사회보험제도 -
제3장 시간 영역에서의 모델링.
양궁게임 게임기획서 1차안 2011/01/17 최가운.
민사소송실무 PRESENTATION 법무법인 소명 변호사 권 형 필.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
1차 발표: 내일은 홈런왕 학번: 이름: 주해성.
TrustNet 소모품 신청 사용설명서 < 목 차 > 작성,수정,삭제 결재함 처리현황
어서와 C언어는 처음이지 제23장.
근대 19세기 서양 복식.
Project Presentation Title
경찰학 세미나 제 5 강 경찰관직무집행법 2조 5호의 의미 신라대학교 법경찰학부 김순석.
2단원. 지표의 변화 마무리 폭탄 game!!!.
Presentation transcript:

Korea Polytechnic University Advanced Game Software Engineering Student Presentation Advanced Game Software Engineering Student Presentation Chapter 2 Observer Pattern 학번 : 이름 : 변현준 학번 : 이름 : 변현준

Advanced Game Software Engineering Student Presentation Presentation Outline Observer Pattern 의 정의 기상 모니터링 Application Observer Pattern 기상 스테이션 자바 내장 옵저버 패턴 정리

Advanced Game Software Engineering Student Presentation 옵저버 패턴의 정의 옵저버 패턴 ( Observer Pattern )  한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 개체들한테 연락이 가고 자동으로 내 용이 갱신되는 방식으로 일대다 (one-to-many) 의존성을 정의한다.

Advanced Game Software Engineering Student Presentation 기상 모니터링 Application Weater-O-Roma 에서 제공하는 정보를 통해 애플리케이션을 만들어라 !!! 이 시스템은 기상 스테이션과 WaetherData 객체, 그리고 디스플레이, 이렇게 세 요소로 이루어져 있음.  기상스테이션 : 실제기상 정보를 수집하는 장비  WeatherDate 객체 : 기상 스테이션으로부터 오는 데이터를 추적하는 객체  디스플레이 : 사용자에게 현재 기상 조건을 보여주는 디스플레이 WeatherData 객체에서는기상 스테이션 장비로부터 데이터를 가져올 수 있음. 데이터를 가져온 후에는 디스플레이 장비에서 세가지 항목 표시 가능.  현재조건 ( 온도, 습도, 압력 )  기상 통계  기상 예보 기상 스테이션 WeatherData 객체 현재조건 온도 : 72 도 F 습도 : 60 압력 : ↓ 디스플레이 장비

Advanced Game Software Engineering Student Presentation 기상 모니터링 Application 습도센서 온도센서 압력센서 기상 스테이션 WeatherData 객체 현재조건 온도 : 72 도 F 습도 : 60 압력 : ↓ 디스플레이 장비 화면에 표시 데이터 취득 Weather-O-Roma 와 계약을 체결하게 되면 WeatherData 객체를 사용하여 현재 조 건, 기상 통계, 기상 예측, 이렇게 세 항목을 디스플레이 장비에서 갱신해 가면서 보여주는 애플리케이션을 만들어야 한다. 시스템이 확장 가능해야 한다. 다른 개발자들이 별도의 디스플레이 항목을 만들 수 있고 사용자들이 디스플레이 항목을 추가 / 제거 가능해야 한다. Weather-O-Roma 에서 제공하는 부분 구현해야 할 부분

Advanced Game Software Engineering Student Presentation 기상 모니터링 Application WeatherData 소스 기상 스테이션용 코드 public void measurementsChanged() { float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); currentConditionDisplay.update(temp, humidity, pressure); statisticsDisplay.update(temp, humidity, pressure); forecastDisplay.update(temp, humidity, pressure); } 구체적인 구현 메소드를 사용하여 디스플레이 항목 추가 / 제거시 수정사항 많음. 세가지 형태의 디스플레이 되는 부분은 추가 / 삭제될 수 있으니 이 부분을 캡슐화해 야 한다. WeatherData getTemperature() getHumidity() getPressure() measurementsChanged() // 기타 메소드 measurementsChanged() 기상 관측값이 갱신될 때마다 알려주기 위한 메소드

Advanced Game Software Engineering Student Presentation 옵저버 패턴 출판사 + 구독자 = 옵저버 패턴  신문 구독 메커니즘을 알면 옵저버 패턴을 이해할 수 있다.  신문사는 신문이 바뀔 때마다 정기구독자에게 알린다.  정기구독자는 본인의 의사에 의해 신문 구독을 해지 / 신청이 가능하다.  신판사 = 주제 (subject)  구독자 = 옵저버 (Observer)  주제가 변경되면 옵저버에게 주제가 전달되고 옵저버는 추가되거나 제거될 수도 있다.  이때 옵저버는 주제에게 등록요청을 하고 해지요청을 한다.  하나의 신문사가 여러 명의 구독자에게 정보를 전달하는 것은 일대다의 관계이다.  이는 옵저버의 상태를 관장하는 객체는 하나이고, 옵저버는 여러 개란 말.

Advanced Game Software Engineering Student Presentation 옵저버 패턴 Duck 객체가 주제 객체에게 옵저버가 되고 싶다고 함.  Duck 객체는 공식적인 옵저버가 됨.  주제 객체의 값이 바뀌면 Duck 을 포함한 모든 옵저버들이 연락을 받게 됨. Mouse 객체가 옵저버 목록에서 탈퇴 요청.  Mouse 는 빠지게 됨.  주제 객체에 새로운 int 값이 들어오면 Mouse 한테는 연락이 가지 않음. 옵저버 객체 Int 2 Dog 객체 Cat 객체 Mouse 객체 Duck 객체 주제 객체 옵저버가 아니라 연락 못 받음 주제의 데이터가 바뀌면 갱신내용 전달받음. 주제의 데이터가 달라지면 옵저버한테 소식 전달 주제 객체에서 일부 데이터 관리

Advanced Game Software Engineering Student Presentation 옵저버 패턴 옵저버 패턴은 신문사와 정기구독자로 이루어지는 신문 구독 서비스에 비유. 옵저버 패턴은 다음과 같은 식으로 정의  한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 개체들한테 연락이 가고 자동으로 내 용이 갱신되는 방식으로 일대다 (one-to-many) 의존성을 정의한다. 일대다 관계는 주제와 옵저버에 의해 정의  옵저버는 주제에 의존.  주제의 상태가 바뀌면 옵저버한테 연락.  연락 방법에 따라 옵저버에 있는 값이 새로운 값으로 갱신. 옵저버 패턴을 구현하는 방법은 여러 가지며, 대부분 주제인터페이스와 옵저버인 터페이스가 들어있는 클래스 디자인을 바탕으로 함. > Subject registerObserver() removeObserver() notifyObserver() > Observer Update() ConcreteSubject registerObserver() {…} removeObserver() {…} notifyObserver() {…} getState() setState() ConcreteObserver Update() // 기타 옵저버용 메소드 주제 옵저버

Advanced Game Software Engineering Student Presentation 옵저버 패턴 느슨한 결합  두 객체가 느슨하게 결합되어 있다는 것은, 그 둘이 상호작용을 하긴 하지만 서로에 대해 서로 잘 모른다는 것을 의미.  옵저버 패턴에서는 주제와 옵저버가 느슨하게 결합되어 있는 객체 디자인을 제공  느슨한 결합 (Loose Coupling) : subject 와 observer 가 느슨하게 묶임 ( 서로가 서로를 모 름 )  subject 가 observer 에 대해 아는 것은 observer 가 특정 인터페이스를 구현한다는 것 뿐 : update()  observer 는 언제든 새로 추가 가능. 제거 또한 마찬가지.  새 observer 를 추가해도 subject 를 변경할 필요 없음  subject 와 observer 는 독립적으로 재사용 가능  subject 또는 observer 가 변경되어도 서로 영향 안 미침 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사 용하라.  변경사항이 생겨도, 객체 사이의 상호 의존성을 최소화하여 변경 가능한 유연성 확보 가 능

Advanced Game Software Engineering Student Presentation 기상 스테이션 – 기상 스테이션 설계 다이어그램 > Subject registerObserver() removeObserver() notifyObserver() WeatherData registerObserver() removeObserver() notifyObserver() getTemperature() getHumidity() getPressure() measurementsChanged() > Observer Update() > DisplayElement Display() CurrentConditionsDisplay Update() Display() { 현재 측정값 표시 } StatisticsDisplay Update() Display() { 평균 / 최저 / 최고치 표시 } ForecastDisplay Update() Display() { 기상 예보 표시 } ThirdPartyDisplay Update() Display() { 측정값을 바탕으로 다른 내용 표시 } 옵저버 주제

Advanced Game Software Engineering Student Presentation 기상 스테이션 주제를 나타내는 Subject 인터페이스는 객체에서 옵저버로 등록하거나 옵저버 목록에서 탈 퇴하고 싶을 때 이 인터페이스의 메소드를 사용. 주제 역할을 하는 구상 클래스에서는 항상 Subject 인터페이스를 구현해야 한다. 주제 클래 스에서는 등록 및 해지를 위한 메소드 외에 상태가 바뀔 때마다 모든 옵저버들에게 연락을 하기 위한 notifyObservers() 메소드를 구현해야 한다. 주제 클래스에는 상태를 설정하고 알아내기 위한 setter/getter 메소드가 들어 있을 수 있다. 각 주제마다 여러 개의 옵저버가 있을 수 있다. 옵저버가 될 가능성이 있는 객체에서는 반드시 Observer 인터페이스를 구현해야 한다. 이 인 터페이스에는 주제의 상태가 바뀌었을 때 호출되는 update() 메소드만을 포함하고 있다. Observer 인터페이스만 구현한다면 무엇이든 옵저버 클래스가 될 수 있다. 각 옵저버는 특정 주제에 객체에 등록을 해서 연락을 받을 수 있다. Observer 의 구상 클래스 (CurrentConditionsDisplay, StatisticsDisplay, ForecastDisplay..) 에 서 registerObserver() 를 이용해 Subject 에 등록. removeObserver() 를 통해 Subject 에서 해제. Subject 에서 상태가 바뀜.  notifyObservers() 를 호출. 모든 Observer 클래스에서 update() 를 수행. Update() 함수 호출 시에 매개변수로 값을 넘김. Subject 에 setter/getter 함수를 두어 Observer 에서 참조 가능.

Advanced Game Software Engineering Student Presentation 자바 내장 옵저버 패턴 – 정보 취득 방식 주제는 계속 데이터를 보내는데 옵저버는 필요할 때만 데이터를 받고 싶다. 푸시 (push) 방식  주제가 데이터를 보내는 방식 풀 (pull) 방식  옵저버가 데이터를 가져가는 방식 자바에 내장된 옵저버 패턴을 통해 마음대로 사용가능  Observable 클래스 사용. java.util.Observer, java.util.Observable 에 있는 API 사용  addObserver, deleteObserver, notifyObservers 같은메소드를 상속 받음.

Advanced Game Software Engineering Student Presentation 자바 내장 옵저버 패턴 객체가 옵저버가 되는 방법  Observer 인터페이스를 구현  Observable 객체의 addObserver() 메소드를 호출  옵저버 목록에서 탈퇴하고 싶을 때는 deleteObserver() 호출 Observable 에서 연락을 돌리는 방법  Java.util.Observable 수퍼클래스를 확장하여 Observable 클래스를 만들어야 한다.  첫 번째로 할 일은 setChanged() 메소드를 호출해서 객체의 상태가 바뀌었다는 것을 알 림.  notifyObservers() 또는 notifyObservers(Object arg) 메소드 호출 옵저버가 연락을 받는 방법  Update(Observable o, Objecgt arg)

Advanced Game Software Engineering Student Presentation 자바 내장 옵저버 패턴 setChanged() { changed = true; } notifyObservers(Object arg) { if(changed) { for( 목록에 있는 모든 옵저버에 대해 ) { update(this, arg); } changed = false; } setChanged() : Observable 클래스에 포함되어있는 메소드  setChanged() 메소드는 changed 플래그의 값을 참으로 설정하고,  notifyObservers() 에서는 changed 플래그가 참인 경우만 옵저버에게 연락.

Advanced Game Software Engineering Student Presentation 자바 내장 옵저버 패턴 java.util.Observable 의 단점  Observable 은 클래스이기 때문에 서브클래스를 만들어야한다. 때문에 다른 수퍼클래스를 확장하고 있는 클래스에 Observable 기능 추가 못 함. 재사용성에 제약  Observable 인터페이스라는 것이 없어 Observer API 와 맞는 클래스 직접 구현 불가능.  java.util 구현을 다른 구현으로 바꾸는 것도 불가능. 멀티스레드 구현 X  Observable 클래스의 핵심 메소드를 외부에서 호출 불가. setChanged() 메소드가 protected 로 선언되어 Observable 서브클래스에서만 호출 가능.  java.util.Observable 을 확장한 클래스를 쓸 수 있는 상황일 때 사용.  직접구현.

Advanced Game Software Engineering Student Presentation 정리 객체지향 원칙  바뀌는 부분은 캡슐화  상속보다는 구성을 활용  구현이 아닌 인터페이스에 맞춰서 프로그래밍  서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인 사용 옵저버 패턴  한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내 용이 갱신되는 방식으로 일대다 (one-to-many) 의존성을 정의