Memento (GOF Pattern) TP Version 1.0

Slides:



Advertisements
Similar presentations
선진한국, 이렇게 만들자 재단법인 한국선진화포럼. 민생이 보는 선진화  윤택한 경제생활 ( 산업화 )  믿고 사는 사회생활 ( 민주화 ) - 개인의 재산, 자유와 권리를 보호하는 사회 모르는 사람과 믿고 협력하는 사회  함께 가는 공동생활 ( 복지사회 ) - 역경에.
Advertisements

어떻게 성경을 읽느냐 ?.  39+27=66 ( 삼구 이십칠 )  역사서 (17 권 )  시가서 (5 권 ): 욥기시편잠언전도서아가  선지서 (17 권 )
ㅋㅋ 다른 집단과 명확히 구별되는 가치체계와 지식 그리고 그에 부합하는 기술을 가지고 있어야 한다. 가치체계 - 사회복지사윤리강령, 선서 등 기본요소 완성 지식 - 사회복지사 1 급 자격증 시험으로 완성 기술 - 명확하지 않으나 실습, 보수교육을 통해 완성 Client.
일본주식시장의 신 고레가와긴조 투자전략 6 조 안승권. 신문수 발표자 : 신 문 수. 출 생 : 1897 효고현에서 출생 학 력 : 초등학교졸업, 사업가 1992 년 95 세 사망 유일한 자서전 1981 년 스미토모 금속광산 주식매매 200 억엔 벌다⇒ 일본 소득세 납세.
2009개정 중등 국어과 교육과정 울산광역시교육청 교육과정 컨설팅단 : 정일진.
이탈리아 피자스파게티올리브등.
6.1 사용사례 6.2 객체 모델링 6.3 동적 모델링 6.4 시스템 설계 6.5 객체 설계 6.6 디자인 패턴
달라지는 노동법 개정 내용 노무법인 正道 잠시나마… 주요 노동관계법 개정내용 3. 마무리 Contents
1. 던전 디자인 개요_1 1. ‘던전’ 룬스톤은 던전 한 층에도 여러 개가 존재하며, 각 룬스톤 마다 영향을 미치는 범위가 설정되어 있다. 룬스톤이 영향을 주는 범위에 일정시간 사용자가 위치해 있게 되면 사용자 캐릭터는 ‘유령화’ 되어 버리기 때문에, 사용자는.
UML의 모델링의 본질 다이어그램으로 쉽게 보이는 UML
Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실
Puzzle 1 To 50 관심분야연구회 박찬수 장진호 최효진.
2D 게임프로그래밍 프로젝트 2차 발표 유제원.
요한계시록 진행과정 장 차 될 일 천년왕국(20:4-6)/흰보좌(20:11-15) 20
Java로 배우는 디자인패턴 입문 Chapter 0. UML 과 Design Pattern
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
자바 5.0 프로그래밍.
예수님 탄생 목자.박사들 경배 (마2:1-12, 눅 2:1-7).
Memento Something writing to Memento Card, keep it in a drawer. When you need to recall it, open drawer and take it back 발표자 김지원.
6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성.
7. 자극과 반응 7-2. 신경계 3. 여러 가지 반응.
This, static, final 지정 예약어 자바 4대 중첩 클래스
김 정 석 Web Programming 김 정 석
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
본교에 오심을 환영합니다 나주공산중학교 교 직 원 일 동.
2013 전全 주州는 煎지질전 酒술주 다. 전주스퇄~! 클럽데이! +.
Chapter 3 클래스. 최호성.
Cairngorm(캔곰) : Flex UI 프레임워크
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
마을살이 제천덕산면을 중심으로 농촌공동체연구소장 한석주.
소프트웨어 공학 Lecture #7: 상세 설계
제12주제 갈보리언덕에서 누가복음 23:33-49.
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
비주얼 프로그래밍 1분반 화/목.
보라 처녀가 잉태하여 아들을 낳을 것이요 그 이름은 임마누엘이라 하리라 (이사야7:14)
자바 5.0 프로그래밍.
3장. 클래스의 기본.
JA V A W. 07 Sb.L.
소프트웨어 공학 (Software Engineering) 상세 설계 (Detailed Design)
The Party-State (1) 영 어 학 부 강물결 영 어 학 부 박우인
발표: G2 박진수 사도요한 준비: G2 박진수 사도요한 T3 김택준 미카엘
세종 패션타운 임대,분양,업종자유 브랜드입점 제안서 문 의 : 경 상재.
제 4 장 클래스 작성 Lab 4- 2.
耽羅國 建國神話 허남춘(제주대 국문학과 교수)
요한 계시록 2:12~17 버가모 교회 : 예수님의 모습-좌우에 날썬 검을 가진자 13절-예수님께서 사는 곳을 아신다.
동양의 색채 1.인 도 인더스 강 유역에서 고대(B.C 2000 ~ 3000)의 청동기시대에 문화가 이미 발달하였고, 메소포타미아와 유사하고 이는 신에 관한 것이 많고, 도시계획이 이루어져 있었으며, 이 시대부터 모자이크 타일이나 돌에 의한 다채로운 재료가 사용되었다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2015년 2학년 1반.
CONTENTS Ⅰ. 대회목적 Ⅱ. 대회개요 Ⅲ. 대회요강 Ⅳ. 대회규정 Ⅴ. 운영계획 Ⅵ. 홍보계획 Ⅶ. 예산계획.
직장생활 예절 ① - 인사 1.내가 먼저 [인사의 5point] 2.상대방의 눈을 보고 미소지으며 3.상대방에 맞춰서
후원단체 참여제안서.
김희정 Bridge Pattern.
제안 제도 운영방안.
통신 메모리 공유를 이용한 클라이언트/서버 설정 방법
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
Chapter 14. 템플릿(Template) 2
용인송담대학교 LMS (교수모드) Version 1.0.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
선 택 학 습 사 회 6학년 1학기 3. 대한 민국의 발전 [2] 대한민국의 수립과 발전 13/14
비축사업 전자계약시스템 도입 용역 사용자매뉴얼(업체담당자용) Version 1.0.
C++ 언어의 특징
근대 19세기 서양 복식.
2009개정 중등 국어과 교육과정.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
Presentation transcript:

Memento (GOF Pattern) TP Version 1.0 POSA2/Dispatcher 4/27/2019 Memento (GOF Pattern) TP Version 1.0 Hyun-koo Kang h9kang@gmail.com Devpia A&D Eva

Contents Motivation 활용성 구조 참여객체 협력방법 구현관련사항 예제코드 패턴과의 연관관계 결과 POSA2/Dispatcher 4/27/2019 Contents Motivation 활용성 구조 참여객체 협력방법 구현관련사항 예제코드 패턴과의 연관관계 결과 http://www.EvaCast.net Devpia A&D Eva

Motivation 객체의 내부 상태 기록 객체를 이전 상태로 복구하려면 복구할 시점의 상태 정보가 필요 POSA2/Dispatcher 4/27/2019 Motivation 객체의 내부 상태 기록 오류 복구 오퍼레이션 수행 결과를 취소하는 메커니즘 구현 객체를 이전 상태로 복구하려면 복구할 시점의 상태 정보가 필요 객체는 캡슐화를 유지하며 상태를 공개하지 않 는다. Undo 메커니즘은 ConstraintSolver클래스와 연관되어 수행되어야 하는데, ConstraintSolver클래스는 자신의 내부 상태 공개 않함 http://www.EvaCast.net 7/19/2008 Devpia A&D Eva

Motivation Box1 Box1 Box1’ Box2 Box2 Box2’ POSA2/Dispatcher 4/27/2019 http://www.EvaCast.net Devpia A&D Eva

활용성 객체 상태를 저장한 후 나중에 이 상태로 복 구해야 할 경우 상태를 얻는 데 필요한 직접 인터페이스는 객체의 캡슐화를 위배 방지 직접 접근이 어렵거나 복잡 할 때 정보 은닉 유지 http://www.EvaCast.net

구조 http://www.EvaCast.net

참여객체 Memento(SolverState) Oringinator 객체의 내부 수식과 변수의 상태를 표현하는 자료 구조 포함 POSA2/Dispatcher 4/27/2019 참여객체 Memento(SolverState) Oringinator 객체의 내부 수식과 변수의 상태를 표현하는 자료 구조 포함 Oringinator객체를 제외한 다른 객체는 Memento클래스에 접근 안됨 Memento클래스는 두 개 인터페이스 CareTaker클래스는 Memento에 정의된 모든 인터페이스를 볼 수 없다 Originator는 자신의 상태를 복구하기 위해 Memento의 모든 자료에 접근하기 위한 인터페이스 사용 http://www.EvaCast.net Devpia A&D Eva

참여객체 Originator(ConstaintSolver) Caretaker(undo mechanism) Memento를 생성하여 현재 객체의 상태를 저장 내부 상태를 복구 및 접근 권한 소유 Memento의 다양한 인터페이스 사용 Originator만이 내부 상태에 접근 Caretaker(undo mechanism) Memento에 정의된 제한된 인터페이스 사용 Memento를 다른 객체에 전달 Memento의 보관을 책임 http://www.EvaCast.net

협력방법 http://www.EvaCast.net

협력방법 caretaker 객체는 originator객체에 memento 객체를 요청 Memento객체는 수동태 요청 시간 저장 받은 Memento객체를 다시 originator객체에게 돌려 준다. originator객체가 이전 상태로 돌아갈 필요 없을때는 memento 객체를 전달 하지 않는다. Memento객체는 수동태 Originator객체만이 memento객체 상태 정의하고 읽는다. http://www.EvaCast.net

구현관련사항 Memento의 두 가지 인터페이스 Memento클래스 내부 정보 모두 공개 Friend로 선언 규정된 인터페이스를 통한 Memento클래스 접근 일반적인 클래스에서 사용 Public으로 선언 http://www.EvaCast.net

구현관련사항 많은 Memento객체가 생성되어야 할 때 문제 해결 방법 비용 생산성 새로 생성된 Memento객체는 바로 직전에 생성된 Memento객체에서 변경된 부분만 저장 바둑돌의 상태를 board[][]을 이용해 놓이는 좌표 값과 몇번째 수인지 대한 정보->돌의 색깔에 따라 음수와 양수로 나누어 저장 historyList를 이용하여 정보를 읽어서 돌을 놓는다. http://www.EvaCast.net

예제코드 class Graphic class MoveCommand{ public: MoveCommand(Graphic* tar, const Point& delta); void Execute(); void UnExecute(); private: ConstraintSolverMemento* _state; Point _delta; Graphic* _target; }; http://www.EvaCast.net

예제코드 class ConstraintSolver{ public: static ConstraintSolver* Instance(); void Solve(); void AddConstraint(Graphic* startConnection, Graphic* endConnection); void Remove Constraint(Graphic* startConnection, Graphic* endConnection); ConstraintSolverMemento* CreatMemento(); void SetMemento(ConstraintSolverMemento*); }; http://www.EvaCast.net

예제코드 class ConstraintSolverMemento{ public: virtual ~constraintSolverMemento(); private: friend class ConstraintSolver(); //originator를 friend로 정의 //originator에게만 보여질 인터페이스 constraintSolverMemento(); }; http://www.EvaCast.net

예제코드 void MoveCommand::Execute(){ constraintSolver* solver = ConstraintSolver::Instance(); _state = solver->CreateMemento(); // Memento생성 _target->move(_delta); solver->solver(); } void MoveCommand::Unexecute(){ ConstraintSolver* solver=constraintSolver::Instance(); solver->SetMemento(_state);//상태복구 http://www.EvaCast.net

예제코드 편집기 예제 편집기는 ConstrintSolver로 부터 Memento를 요청 POSA2/Dispatcher 4/27/2019 예제코드 편집기 예제 편집기는 ConstrintSolver로 부터 Memento를 요청 ConstraintSolver는 Memento를 생성해서 반환 ConstraintSolverMemento는 ConstraintSolver의 내부 수식과 변수의 상태를 표현하는 자료 구조를 포함 사용자가 이동 오퍼레이션을 취소할 때 편집기는 ConstraintSolverMemento 를 ConstrintSolver클래스에게 제공 ConstraintSolverMemento 정보를 바탕으로 ConstraintSolver는 이전 상태로 정확하게 반환하기 위해 내부 구조를 변경 http://www.EvaCast.net Devpia A&D Eva

패턴과의 연관관계 Originator 객체의 내부가 다른 객체에 의해 직접적으로 영향을 받지 않게 경계 Client가 스스로 자신이 원하는 시점의 Originator객체 상태 정보를 Memento객체 를 이용해 저장,관리 Memento객체의 생성은 Originator객체의 내부 상태를 모두 복사해야 하는 비용 Memento객체의 저장,관리,삭제는 Client에 서 수행 http://www.EvaCast.net

패턴과의 연관관계 Command Pattern과 함께 사용 Iterator Pattern 작업을 취소하고자 할 때 수행되기 이전 상태로 쉽게 복귀할 수 있게 도와준다. Iterator Pattern Iterator클래스 내부에서 현재 항목의 위치 정보를 저장, 관리하는 목적으로 사용 http://www.EvaCast.net

결과 캡슐화된 경계를 유지 할 수 있다. Originator클래스를 단순화 할 수 있다. Originator만 memento를 다룰 수 있기 때문에 memento는 외부에 노출되지 않는다. Originator클래스를 단순화 할 수 있다. 특정 목적에 맞게 originator를 구성하여 비용 및 개발 시간을 줄일 수 있다. http://www.EvaCast.net