(Microsoft PowerPoint - 11_DesignPatterns\(2008\).ppt [\310\243\310\257 \270\360\265\345])

Similar documents
Microsoft PowerPoint - 11_DesignPatterns(2010).ppt [호환 모드]

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

설계란 무엇인가?

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

07 자바의 다양한 클래스.key

C# Programming Guide - Types

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

제목

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint Presentation

Microsoft PowerPoint - 2강

객체지향설계와패턴 Lecture #0: 강의소개 Eun Man Choi

JAVA PROGRAMMING 실습 05. 객체의 활용

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

JUNIT 실습및발표

슬라이드 1

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

학습목표 l 퍼싸드패턴과그적용 l 데코레이터패턴과그적용 l 실습문제 2

Design Issues

PowerPoint 프레젠테이션

제8장 자바 GUI 프로그래밍 II

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint Presentation

PowerPoint 프레젠테이션

Secure Programming Lecture1 : Introduction

Microsoft PowerPoint - Lect04.pptx

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

Æí¶÷4-¼Ö·ç¼Çc03ÖÁ¾š

Microsoft PowerPoint - Chap12-OOP.ppt

05-class.key

I. GoF 디자인패턴 의개요 I. GoF 디자인패턴의개요 가. 개념 소프트웨어개발시자주발생되는문제해결을위한솔루션 ( 재사용 ) 특정상황에서일반적설계문제해결을위해상호교류하는수정가능한객체와클래스들에대한설명 객체지향언어에디자인패턴을접목한 Erich Gamma, Richar

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

untitled

Microsoft PowerPoint - Chapter 6.ppt

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

chap x: G입력

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

5장.key

쉽게 풀어쓴 C 프로그래밍

09-interface.key

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

PowerPoint Presentation

PRO OBJECTIVE-C DESIGN PATTERNS FOR IOS by Carlo Chung Original English language edition published by Apress, Inc. Copyright c 2011 by Apress. Korean

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

유니티 변수-함수.key

쉽게 풀어쓴 C 프로그래밍

JVM 메모리구조

Spring Boot/JDBC JdbcTemplate/CRUD 예제

12-file.key

PowerPoint Presentation

소프트웨어공학개론 강의 11: UML 코드매핑 최은만동국대학교컴퓨터공학과

소프트웨어공학개론 강의 7: 시퀀스다이어그램 최은만동국대학교컴퓨터공학과

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

No Slide Title

rmi_박준용_final.PDF

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

03장.스택.key

No Slide Title

객체 Key Point 객체는그객체의특성을나타내는상태 (state) 와그객체의행동 (behaviors) 으로이루어진다. 좌표상의점 n 상태 : x 좌표값, y 좌표값 n 행동 : 점의이동 주사위 n 상태 : 표면값 n 행동 : 주사위굴리기 은행계좌 n 상태 : 예금주,

교육자료

PowerPoint Presentation

PowerPoint Presentation

bn2019_2

C++ Programming

ThisJava ..

JAVA PROGRAMMING 실습 05. 객체의 활용

Chapter 4. LISTS

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint Presentation

1

어댑터뷰

쉽게


[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

PowerPoint Presentation

(Microsoft PowerPoint - java2-lecture3.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

01-OOPConcepts(2).PDF

Network Programming

PowerPoint 프레젠테이션

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

Transcription:

LECTURE 11 디자인패턴

설계작업에대한도전 소프트웨어설계는어려운일 문제를잘분할하고 유연하고잘모듈화된우아한디자인이되어야함 설계는시행착오 (trial and error) 의결과 성공적인설계가존재 두설계가똑같은일은없음 반복되는특성 2

디자인패턴 디자인패턴은공통된소프트웨어문제에오래동안사용되어검증된솔루션 디자인작업에사용되는공통언어. 의사소통을향상시키며구현, 문서화에도움 패턴은전문기술을담고있고그것을전수시킬수있음 3

참고자료 디자인패턴참고웹사이트 http://sourcemaking.com/design_patterns 4

Gangs of Four(GoF) 패턴 생성패턴 ( 추상객체인스턴스화 ) 추상팩토리, 팩토리, 빌더, 프로토타입, 싱글톤 구조패턴 ( 객체결합 ) 어뎁터, 브리지, 컴포지트, 데코레이터, 퍼싸드, 플라이웨이트, 프록시 행위패턴 ( 객체간커뮤니케이션 ) 책임체인, 커맨드, 인터프리터, 반복자 (iterator), 중재자, 메멘토, 옵서버, 상태, 전략 (stretegy), 템플릿메소드, 비지터 5

LECTURE 11 싱글톤패턴 클래스가하나의객체만을생성 6

객체의생성을제한 문제 : 클래스의객체를하나만만들어야하는경우가있음 두개이상만들면안되게하고싶을때 예 : 키보드리더, 프린터스풀러, 점수기록표 고려해야하는이유 객체를많이만드는것은시간이많이걸림 잉여객체는메모리낭비 여러가지다른객체가메모리에떠도는것은유지보관에골치덩어리 7

싱글톤패턴 싱글톤 : 그타입의유일한객체 많아야하나의인스턴스를가짐을보장 인스턴스에대하여어디서든접근할수있게하여야 프로그래머가인스턴스를없애버리는 ( 또는더생성할 ) 관리책무는빼앗음 사용자에게유일한인스턴스를접근할수있는메소드를제공 많이알려진디자인패턴중의하나 8

싱글톤패턴의구현 생성자를밖에서부르지못하도록 private 으로만든다. 클래스안에클래스의인스턴스를 static private 으로선언 단일인스턴스를접근할수있는 public getinstance() 나유사메소드를둔다. 이메소드는다중스레드로도실행될수있기때문에보호되어야하고동기화되어야 9

싱글톤순서다이어그램 10

싱글톤예 난수를만들어내는 RandomGenerator 를싱글톤으로만들어보자 public class RandomGenerator { private static RandomGenerator gen = new RandomGenerator(); public static RandomGenerator getinstance() { return gen; } private RandomGenerator() {}... } 이프로그림의문제점은? 11

싱글톤사례 2 필요할때까지는객체를만들지않는다. public class RandomGenerator { private static RandomGenerator gen = null; public static RandomGenerator getinstance() { if (gen == null) { gen = new RandomGenerator(); } return gen; }... } 이버전의문제점은? 12

싱글톤사례 3 Locking 으로병렬처리의문제점해결 public class RandomGenerator { private static RandomGenerator gen = null; public static synchronized RandomGenerator getinstance() { if (gen == null) { gen = new RandomGenerator(); } return gen; }... } 이버전의또다른문제점은? 13

싱글톤패턴사례 4 불필요한 Locking 없이병렬처리의문제점해결 public class RandomGenerator { private static RandomGenerator gen = null; public static RandomGenerator getinstance() { if (gen == null) { synchronized (RandomGenerator.class) { // must test again -- can you see why? // sometimes called test-and-test-and-set if (gen == null) { gen = new RandomGenerator(); } } }... } return gen; 14

싱글톤연습 프로젝트문제에서싱글톤이적용될부분은? 15

LECTURE 11 11 팩토리패턴 ( 팩토리메소드, 추상팩토리 ) 객체를쉽게생성하는클래스나메소드 16

팩토리패턴 팩토리 : 다른클래스의인스턴스를쉽게생성하고리턴하는임무를가진클래스 생성자를부르는대신팩토리클래스의정적메소드를사용하여객체를셋업 구축정보를사용정보에서분리 ( 응집을높이고결합을약하게하기위하여 ) 하여객체의생성과관리를쉽게 서브클래스의인스턴스화를지연하는효과 17

사용과생성을분리 18

팩토리순서다이어그램

팩토리구현 필요한팩토리를만드는방법 팩토리자체를인스턴스로만들어야 Private 생성자로 팩토리는컴포넌트를생성할때 static 메소드를사용 팩토리는인터페이스를가능하면간단하게만들어클라리언트가쉽게부르도록해야 20

팩토리사례 public class ImageReaderFactory { public static ImageReader createimagereader( InputStream is ) { int imagetype = figureoutimagetype( is ); switch( imagetype ) { case ImageReaderFactory.GIF: return new GifReader( is ); case ImageReaderFactory.JPEG: return new JpegReader( is ); // etc. } } } 21

LECTURE 11 데코레이터패턴 유용한기능을추가하기위하여다른객체를싸고있는객체

데코레이터패턴 데코레이터 : 다른객체의행위를바꾸거나기능을추가하는객체 객체에동적으로책무를추가 데코레이션당하는객체가데코이터를알지못함 데코레이터는랩핑하려는객체에통일된인터페이스를제공해야 23

데코레이터사례 : GUI 24

데코레이터객체의사용 Widget* awidget = new BorderDecorator( new HorizontalScrollBarDecorator( new VerticalScrollBarDecorator( new Window(80, 24)))); awidget->draw(); 25

LECTURE 11 퍼싸드패턴 서로다른인터페이스위에통일된인터페이스또는복잡한인터페이스위에간단한인터페이스를씌움

퍼싸드패턴 문제 : 현재인터페이스가너무복잡하여쉽게사용할수없거나서브시스템을사용하는데너무많은선택이있어 퍼싸드 : 서로다른인터페이스위에통일된인터페이스또는복잡한인터페이스위에간단한인터페이스를제공하는객체 27

퍼싸드사례 28

Compiler 퍼싸드 class Compiler { public: Compiler(); }; virtual void Compile(istream&, BytecodeStream&); void Compiler::Compile ( istream& input, BytecodeStream& output) { Scanner scanner(input); ProgramNodeBuilder builder; Parser parser; parser.parse(scanner, builder); } RISCCodeGenerator generator(output); ProgramNode* parsetree = builder.getrootnode(); parsetree->traverse(generator); 29

LECTURE 11 플라이웨이트패턴

중복되는객체문제 문제 : 중복되는객체는비효율적임 여러객체들이같은상태를가짐 예 : 문서편집기나오류메시지에서사용하는텍스트나스트링구조, 게임에나오는수많은캐릭터들 예 : 디스크에있는같은파일을나타내는파일객체 new File( note.txt ) new File( note.txt ) new File( note.txt ) 그리드에점을나타내는객체 new Point(x, y) new Point(5.23432423, 3.14) 31

플라이웨이트패턴 플라이웨이트 : 어떤클래스의인스턴스도동일한상태를갖지않는다는보장이있어야 객체구축의노력을줄이기위하여객체들의동일한부분을캐쉬로만듦 싱글톤과유사하나많은인스턴스를가지며각객체마다고유한상태를가짐 타입의인스턴스는많으나각인스턴스에유사한부분이많은경우에유용함 32

플라이웨이트의구현 플라이웨이트객체는잘변하지않는객체에적합 의사코드 public class Flyweighted { o static collection (list) of instances o private constructor o static method to get an instance: if (we have created this kind of instance before), get it from the collection and return it else, create a new instance, store it in the collection and return it 33

플라이웨이트순서다이어그램 34

LECTURE 11 반복자패턴

반복자패턴 반복자 : 집합에포함된객체를검사하여반복하는일을할수있도록표준방법을제공하는객체 장점 : 클라이언트자세한표현방법을몰라도됨 접근인터페이스의단순화 36

반복자의구현 class List { public: int size() { } boolean isempty() { } ListElement* get(int index) { } } public class ListIterator { int currentindex; public: boolean hasnext() { } ListElement* first() { } ListElement* next() { } ListElement* current() { } } 37

LECTURE 11 전략패턴 문제를해결하기위하여별도의여러알고리즘을가진객체

전략패턴 전략 (strategy): 알고리즘이알고리즘을사용하는객체에서분리되어캡슐화된객체 각전략이하나의동작 ( 동일한문제를해결한구현 ) 을구현 동작을위한알고리즘과구동하는객체와분리 객체를확장하거나변경하지않고동적으로객체의동작을바꾸고싶을때 39

전략사례 : 카드게임 // Strategy hierarchy parent // (an interface or abstract class) public interface Strategy { public Card getmove(); } // setting a strategy player1.setstrategy(new SmartStrategy()); // using a strategy Card p1move = player1.move(); // uses strategy 모든전략은같은인터페이스로정의되어야 40

디자인패턴의선택 디자인패턴이주어진문제를어떻게해결하고있는지스터디 먼저디자인패턴을잘숙지 주어진상황에제일잘맞는패턴이무엇인지숙고 생성 구조 행위 시스템의변경, 발전, 재사용어느측면이유력한지고려하여적용 각프로젝트에패턴을적용시킬수있는부분을생각해볼것 41