제목

Similar documents
제목

제목

제목


example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

MVVM 패턴의 이해

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

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

01-OOPConcepts(2).PDF

SW¹é¼Ł-³¯°³Æ÷ÇÔÇ¥Áö2013

PowerPoint Template

Inclusion Polymorphism과 UML 클래스 다이어그램 구조에 의거한 디자인패턴 해석

OOP 소개

제목

C# Programming Guide - Types

Microsoft PowerPoint - CSharp-10-예외처리

09-interface.key

Something that can be seen, touched or otherwise sensed

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional08.ppt [호환 모드]

C++ Programming

Design Issues

C++ 기본문법 정리

Microsoft PowerPoint - Gof - What is Design Patterns - Gof Design Pattterns

03.Agile.key

thesis

JAVA PROGRAMMING 실습 08.다형성

소프트웨어 개발의 성공 열쇠 - 오브젝트 디자인

13 Who am I? R&D, Product Development Manager / Smart Worker Visualization SW SW KAIST Software Engineering Computer Engineering 3

Microsoft PowerPoint - additional07.ppt [호환 모드]

UML

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Slide 1

Microsoft PowerPoint - 04-UDP Programming.ppt

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

Microsoft PowerPoint - java2 [호환 모드]

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

1

No Slide Title

자바GUI실전프로그래밍2_장대원.PDF

쉽게 풀어쓴 C 프로그래밍

1106 학원과정

PowerPoint Template

#KM560

PowerPoint Template

Microsoft PowerPoint - chap11

PowerPoint Presentation

Journal of Educational Innovation Research 2018, Vol. 28, No. 3, pp DOI: NCS : * A Study on

SchoolNet튜토리얼.PDF

04_오픈지엘API.key

PowerPoint 프레젠테이션

PowerPoint Presentation

Intro to Servlet, EJB, JSP, WS

Network Programming

PowerPoint 프레젠테이션

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

오버라이딩 (Overriding)

신림프로그래머_클린코드.key

PowerPoint Presentation

Microsoft PowerPoint - 2강

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

2002년 2학기 자료구조

00829A_SHR-6164-KOR.indb

IKC43_06.hwp

쉽게 풀어쓴 C 프로그래밍

2Q SWG Teleweb Business Plan & 1Q Recovery Plan April 2, 2003

¿ÀǼҽº°¡À̵å1 -new

Interstage5 SOAP서비스 설정 가이드

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

제 1 강 희망의 땅, 알고리즘

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Vol.257 C O N T E N T S M O N T H L Y P U B L I C F I N A N C E F O R U M

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

bn2019_2

Chapter 6 Objects and Classes

<4D F736F F F696E74202D2031C1D6C2F72D31C2F7BDC32028B0ADC0C7C0DAB7E D20C7C1B7CEB1D7B7A1B9D6BEF0BEEE20B0FAB8F1BCD2B

Social Network

Slide 1

소프트웨어개발방법론

#KM-235(110222)

PowerPoint Presentation

final_thesis

PowerPoint Presentation

Slide 1

Service-Oriented Architecture Copyright Tmax Soft 2005

5장.key

쉽게 풀어쓴 C 프로그래밍

05-class.key

Blog

Microsoft PowerPoint - Java7.pptx

초보자를 위한 C# 21일 완성

제11장 프로세스와 쓰레드

1

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

17장 클래스와 메소드

2 KHU 글로벌 기업법무 리뷰 제2권 제1호 또 내용적으로 중대한 위기를 맞이하게 되었고, 개인은 흡사 어항 속의 금붕어 와 같은 신세로 전락할 운명에 처해있다. 현대정보화 사회에서 개인의 사적 영역이 얼마나 침해되고 있는지 는 양 비디오 사건 과 같은 연예인들의 사

thesis

thesis

untitled

Transcription:

Object-Oriented Design Agile for Software Development Story 4. 작 성 자 : 고형호 메 일 : hyungho.ko@gmail.com 홈페이지 : 최초작성일 : 2007.06.12 최종작성일 : 2007.08.31 1

2 Goal Flexibility & Reusability

Content 1. Flexibility & Reusability Definition 2. Interface 3. Inheritance 4. Summary 3

4 1. Flexibility & Reusability Definition

Flexibility & Reusability Definition Flexibility is the popular term for the ability to easily bend an object or the ability to adapt to different circumstances. 유연성은어떤객체를원하는대로손쉽게변경할수있는능력을말하는데, 때로는한객체가서로다른여러환경에적응하는능력을가리키기도한다. Reusability is the likelihood a segment of source code can be used again to add new functionalities with slight or no modification. 재사용성이란새로운기능을추가하기위해, 기존소스코드의일부를매우최소로변경하거나또는전혀수정없이다시사용할수있는가능성을말한다. 유연한소프트웨어 From the user's point of view, flexible software accommodates varying conditions or requirements. 사용자의관점에서보았을때, 유연한소프트웨어는계속변화하는조건이나요구사항들을수용한다. From a developer's point of view, flexible software can be modified or extended with ease. 개발자의관점에서보았을때, 유연한소프트웨어는쉽게변경하거나확장할수있는것이다. 5 ( 출처 : Object Design)

6 2. Interface

Interface <<interface>> IShape IShape* pshape = new Rectangle; +Draw(const Graphics&) Rectangle +Draw(const Graphics&) Object Object s Type (Object 의인터페이스만을정의한다.) Object s Class (Object 의구현을정의한다.) 정리 Interface* pobject = new Implementation; An object's interface characterizes the complete set of requests that can be sent to the object. Object 의 Interface 는 Object 가받아서처리할수있는오퍼레이션들의집합이다. ( 출처 : GoF Design Patterns) 7

Interface Interface* pobject = new Implementation; C++ 의 class는 Interface와 Implementation을구분하지않는다. (Object s Type) (Object s Class) 올바른 Class Definition Shape +Draw(const Graphics&) Rectangle Ellipse 1. Rectangle* pshape; (Implementation) pshape = new Shape; ( 컴파일에러 ) pshape = new Rectangle; pshape = new Ellipse; ( 컴파일에러 ) ( X ) 구현종속다형성획득에러 +Draw(const Graphics&) Rectangle +Draw(const Graphics&) <<interface>> IShape +Draw(const Graphics&) +Draw(const Graphics&) Ellipse +Draw(const Graphics&) 2. Shape* pshape; (Implementation) pshape = new Shape; pshape = new Rectangle; pshape = new Ellipse; 3. IShape* pshape; (Interface) pshape = new IShape; ( 컴파일에러 ) pshape = new Rectangle; pshape = new Ellipse; ( ) 구현종속 ( O ) 8

Interface Interface* pobject = new Implementation; Inheritance Inheritance 인터페이스를상속 (Interface Inheritance) 구현코드를상속 (Implementation Inheritance) Meaning Meaning 객체가다른곳에서사용될수있음을의미한다. (Object 의 Type 이기때문에 ) 구현코드의재사용을의미한다. 9

Interface Log +SetOutputStream(IOutputStream*) delegation Has-a 관계 (Log has a IOutputStream.) <<interface>> IOutputStream Interface( 올바른 Class Definition) class Log private: IOutputStream* m_poutputstream; public: void SetOutputStream(IOutputStream* poutputstream) // do something m_poutputstream = poutputstream; } }; void Write(const void* lpbuf, UINT nlen) // do something m_poutputstream->write(lpbuf, nlen); } 런타임에 Write 구현이변경된다 (Concrete Class 가변경되므로 ). 런타임에 IOutputStream 인터페이스를상속받는임의의 Concrete Class 로변경할수있다. 10

Interface class Log private: IOutputStream* m_poutputstream; public: void SetOutputStream(IOutputStream* poutputstream) // do something m_poutputstream = poutputstream; // Dynamic Binding } }; void Write(const void* pdata, UINT nlen) // do something m_poutputstream->write(pdata, nlen); } 올바른 Class Definition 효과 1. 요청과요청을처리할객체를런타임에결정할수있다 ( 동적바인딩 : Dynamic Binding). (Log::Write) (m_poutputstream) (Log::SetOutputSream) 2. Log 는인터페이스에의존하므로 Concrete Class 를알필요가없다. 3. 즉, Log 는 Concrete Class 변화의영향을받지않는다 ( 구현종속성제거 ). 11

Interface Log +SetOutputStream(IOutputStream*) delegation Has-a 관계 <<interface>> IOutputStream class Log private: IOutputStream* m_poutputstream; (Interface) }; Programming to Interface, not an Implementation. 구현이아닌인터페이스에따라프로그래밍하자. 올바른 Class Definition을하자 (Interface* pobject = new Implementation;). 의존관계역전의원칙 (DIP: Dependency Inversion Principle) 인터페이스는 IOutputStream을사용하는곳 (Log) 과구현하는곳 (Concrete Class) 를분리시킨다. 클라이언트는구체클래스가아닌인터페이스에의존하여변화에대처한다. 12

Interface My rule of thumb is that as much as 80 percent of my code should be written in terms of interfaces. 나의경험법칙에따르면대부분코드의 80% 는인터페이스의관점에서재작성되어야한다. Allen Holub 13 출처 : 실전코드로배우는실용주의디자인패턴 ( 사이텍미디어, 송치형 )

14 3. Inheritance

Inheritance C++ for Reusability Implementation Inheritance Composition(Aggregation, Association) with Interface Inheritance Template(Generic) 15

Inheritance Implementation Inheritance White-Box Reuse 상속을받으면, 기반클래스의내부가파생클래스에게공개되기때문이다. 은닉 (Hiding) 이파괴된다. 구현에종속된다. 결합도를증가시킨다. 결론 유연성 (Flexibility) 과재사용성 (Reusability) 을감소시킨다. 16

Inheritance Implementation Inheritance 문제점 : 유연성과재사용성을감소시킨다. Ex. 상속한구현이새로운문제에맞지않을때, 기반클래스를재작성해야하거나다른것으로대체하는일이생기게된다. 그로인해, 모든파생클래스들은재컴파일되어야한다. 원인 : 구현종속 해결책 : 구현종속제거 17

Inheritance Interface Inheritance Black-Box Reuse 객체의내부는공개되지않고인터페이스를통해서만재사용되기때문이다. 은닉 (Hiding) 이유지된다. 구현에종속되지않는다. 결합도를감소시킨다. 결론 유연성 (Flexibility) 과재사용성 (Reusability) 을증가시킨다. 18

Inheritance 요청수신객체 요청위임자 (Delegate) Client 서비스요청 Log +SetOutputStream(IOutputStream*) delegation Has-a 관계 <<interface>> IOutputStream class Log private: IOutputStream* m_poutputstream; public: void SetOutputStream(IOutputStream* poutputstream) m_poutputstream = poutputstream; //dynamic binding } }; void Write(const void* lpbuf, UINT nlen) m_poutputstream->write(lpbuf, nlen); //delegation } 19 위임 (Delegation) : 수신객체가요청의처리를위임자 (Delegation) 에게보낸다. 위임의목적 위임을사용해서인터페이스를재사용할수있다. (Composition, Aggregation 또는 Association 관계에서 )

Inheritance Client Log +SetOutputStream(IOutputStream*) delegation Has-a 관계 <<interface>> IOutputStream class Log private: IOutputStream* m_poutputstream; public: void SetOutputStream(IOutputStream* poutputstream) m_poutputstream = poutputstream; //dynamic binding } void Write(const void* lpbuf, UINT nlen) m_poutputstream->write(lpbuf, nlen); //delegation } }; FileOutputStream DBOutputStream 인터페이스상속을통해인터페이스를구현한다. 위임과인터페이스상속 인터페이스상속기반으로위임을사용하여재사용가능한설계를할수있다. (Delegation 은 Composition, Aggregation 또는 Association 관계를통해 ) 20

Inheritance Log +SetOutputStream(IOutputStream*) delegation Has-a 관계 <<interface>> IOutputStream class Log private: IOutputStream* m_poutputstream; public: void SetOutputStream(IOutputStream* poutputstream) m_poutputstream = poutputstream; //dynamic binding } void Write(const void* lpbuf, UINT nlen) m_poutputstream->write(lpbuf, nlen); //delegation } }; FileOutputStream DBOutputStream 21 Favor Object Composition(with Interface Inheritance) over Class Implementation. (Implementation Inheritance) 구현상속 (Is-a 관계 ) 보다는 ( 인터페이스상속을기반으로한 ) 객체합성 (Has-a 관계 ) 을선호하자. 개방폐쇄원칙 (OCP: Open-Closed Principle) 인터페이스상속으로확장에대해열려있고, 수정에는대해닫혀있다. 결론 유연성 (Flexibility) 과재사용성 (Reusability) 이증가되므로재사용가능한설계를할수있다.

Summary Design Patterns leaves the debates about code reuse behindand shows the real key to software reuse: reusable design. 디자인패턴은코드재사용에대한논쟁을초월하여재사용가능한설계가진정한소프트웨어재사용의핵심임을보여주고있다. Steve Vinoski, Software Architect 22 ( 출처 : GoF Design Patterns)

23 4. Summary

Summary 재사용의목적은 Implementation Inheritance(Is-a 관계 ) 을기반으로한구현코드재사용이다. ( X ) Interface Inheritance 을기반으로한재사용가능한설계 (Has-a 관계 ) 이다. ( O ) 24

Summary Programming to Interface, not an Implementation. Favor Object Composition(with Interface Inheritance) over Class Implementation. (Implementation Inheritance) 재사용의목적은재사용가능한설계이다. 25