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

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

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

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

PowerPoint Presentation

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

설계란 무엇인가?

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

JAVA PROGRAMMING 실습 05. 객체의 활용

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

슬라이드 1

예제 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

C# Programming Guide - Types

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

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

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint - 2강

제11장 프로세스와 쓰레드

Design Issues

제목

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

JUNIT 실습및발표

PowerPoint Presentation

PowerPoint Presentation

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

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - Lect04.pptx

Secure Programming Lecture1 : Introduction

PowerPoint 프레젠테이션

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

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

Microsoft PowerPoint - 06_ClassDiagram(2010).ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

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

untitled

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

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

PowerPoint 프레젠테이션

유니티 변수-함수.key

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - 04_OOConcepts(2010).pptx

PowerPoint Presentation

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 프레젠테이션

Microsoft PowerPoint - Chap12-OOP.ppt

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

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 6.ppt

쉽게 풀어쓴 C 프로그래밍

chap x: G입력

쉽게 풀어쓴 C 프로그래밍

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

교육자료

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

JVM 메모리구조

Spring Boot/JDBC JdbcTemplate/CRUD 예제

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

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

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

쉽게

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

09-interface.key

05-class.key

PowerPoint 프레젠테이션

03장.스택.key

No Slide Title

PowerPoint Presentation

ThisJava ..

12-file.key

Chapter 4. LISTS

17장 클래스와 메소드

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - Java7.pptx

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

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

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 03-TCP Programming.ppt

Network Programming

Java Programing Environment

Microsoft PowerPoint - 06-Chapter09-Event.ppt

K&R2 Reference Manual 번역본

PowerPoint Template

Chapter 4. LISTS

gnu-lee-oop-kor-lec10-1-chap10

Transcription:

LECTURE 11 디자인패턴 최은만, CSE 4039 소프트웨어공학

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

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

참고자료 디자인패턴참고웹사이트 http://sourcemaking.com/design_patterns 최은만, CSE 4039 소프트웨어공학 4

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

LECTURE 11 11 싱글톤패턴 클래스가하나의객체만을생성 최은만, CSE 4039 소프트웨어공학 6

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

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

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

싱글톤순서다이어그램 최은만, CSE 4039 소프트웨어공학 10

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

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

싱글톤사례 3 Locking으로병렬처리의문제점해결 public class RandomGenerator { private static RandomGenerator gen = null; public static synchronized RandomGenerator getinstance() { if (gen == null) { gen = new RandomGenerator(); } return gen; }... } 최은만, CSE 4039 소프트웨어공학 13

LECTURE 11 팩토리패턴 ( 팩토리메소드, 추상팩토리 ) 객체를쉽게생성하는클래스나메소드 최은만, CSE 4039 소프트웨어공학 14

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

사용과생성을분리 최은만, CSE 4039 소프트웨어공학 16

팩토리순서다이어그램 최은만, CSE 4039 소프트웨어공학 17

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

팩토리사례 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( (i is ); // etc. } } } 최은만, CSE 4039 소프트웨어공학 19

LECTURE 11 데코레이터패턴 유용한기능을추가하기위하여다른객체를싸고있는객체 최은만, CSE 4039 소프트웨어공학

데코레이터패턴 데코레이터 : 다른객체의행위를바꾸거나기능을추가하는객체 객체에동적으로책무를추가 데코레이션당하는객체가데코이터를알지못함 데코레이터는랩핑하려는객체에통일된인터페이스를제공해야 최은만, CSE 4039 소프트웨어공학 21

데코레이터사례 : GUI 최은만, CSE 4039 소프트웨어공학 22

데코레이터객체의사용 Widget* awidget = new BorderDecorator( new HorizontalScrollBarDecorator( new VerticalScrollBarDecorator( llb t new Window(80, 24)))); awidget->draw(); 최은만, CSE 4039 소프트웨어공학 23

LECTURE 11 퍼싸드패턴 서로다른인터페이스위에통일된인터페이스또는 복잡한인터페이스위에간단한인터페이스를씌움 최은만, CSE 4039 소프트웨어공학

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

퍼싸드사례 최은만, CSE 4039 소프트웨어공학 26

Compiler 퍼싸드 class Compiler { public: Compiler(); }; virtual void Compile(istream&, BytecodeStream&); void Compiler::Compile ( istream& input, BytecodeStream& output) t) { Scanner scanner(input); ProgramNodeBuilder builder; Parser parser; parser.parse(scanner, builder); } RISCCodeGenerator generator(output); t t) ProgramNode* parsetree = builder.getrootnode(); parsetree->traverse(generator); 최은만, CSE 4039 소프트웨어공학 27

LECTURE 11 11 플라이웨이트패턴 최은만, CSE 4039 소프트웨어공학

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

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

플라이웨이트의구현 플라이웨이트객체는잘변하지않는객체에적합 의사코드 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 최은만, CSE 4039 소프트웨어공학 31

플라이웨이트순서다이어그램 최은만, CSE 4039 소프트웨어공학 32

LECTURE 11 반복자패턴 최은만, CSE 4039 소프트웨어공학

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

반복자의구현 class List { public: int size() { } boolean isempty() { } ListElement* get(int index) { } } public class ListIterator t { int currentindex; public: boolean hasnext() { } ListElement* first() { } ListElement* next() { } ListElement* current() { } } 최은만, CSE 4039 소프트웨어공학 35

디자인패턴의선택 디자인패턴이주어진문제를어떻게해결하고있는지스터디 먼저디자인패턴을잘숙지 주어진상황에제일잘맞는패턴이무엇인지숙고 생성 구조 행위 시스템의변경, 발전, 재사용어느측면이유력한지고려하여적용 최은만, CSE 4039 소프트웨어공학 36