객체지향소프트웨어공학 6 장 아키텍처설계 2017 최은만, 객체지향소프트웨어공학
목차 01 설계과정 02 설계원리 03 설계안결정 04 아키텍처모델 05 패키지다이어그램과배치다이어그램 06 아키텍처패턴 07 아키텍처문서화 2017 최은만, 객체지향소프트웨어공학 2
01 설계과정 설계는다음의방법을찾기위한문제해결과정임 시스템의기능적요구를구현하기위한방법 비기능적요구에의하여받는제약을준수하는방법 재정적제약도포함 좋은품질의일반적원칙을고수하는방법 2017 최은만, 객체지향소프트웨어공학 3
설계 - 의사결정과정 설계사는일연의설계이슈에직면하게됨 전체설계문제에포함된작은문제 각이슈에는여러가지선택적인해결책이있음 이를설계옵션이라함 설계사는각이슈를해결하기위한설계의사결정을내림 여러선택사항에서가장좋은방안을찾는과정이포함 2017 최은만, 객체지향소프트웨어공학 4
설계범위 서로다른대안들의집합을선택함으로써달성할수있는가능한모든설계방법의영역을설계범위 (design space) 라부름 2017 최은만, 객체지향소프트웨어공학 5
컴포넌트 분명한역할을가지고있는하드웨어또는소프트웨어조각 독존할수있으며같은기능을가진다른컴포넌트로대체시킬수있어야함 대부분의컴포넌트는재사용가능하도록설계 특정목적을가진컴포넌트도있음 사용자인터페이스 뱅킹업무 창고관리등 2017 최은만, 객체지향소프트웨어공학 6
모듈 프로그래밍언어수준에따라정의된컴포넌트 예 - 메소드, 클래스, 패키지 (Java) 2017 최은만, 객체지향소프트웨어공학 7
시스템 정의가능한책임과목적들을가지고있고소프트웨어나하드웨어로구성된논리적개체 시스템은명세를가지며컴포넌트의집합으로구현될수있음 시스템은컴포넌트가변하거나다른컴포넌트로대치되더라도지속적으로존재 요구분석의목적은시스템의역할을결정하는것 서브시스템 대규모시스템의일부분으로규정된인터페이스를가짐 2017 최은만, 객체지향소프트웨어공학 8
시스템을이루는요소들 UML 로표현한요소들사이의관계 2017 최은만, 객체지향소프트웨어공학 9
하향식과상향식설계 하향식설계 먼저시스템의최상위부분을설계 다음에하위수준의자세한결정을내리면서점차적으로하향 최종적으로도달하는자세한결정은 특정데이터아이텀의포맷 사용할개별알고리즘 상향식설계 재사용가능한하위수준의유틸리티들에대한결정 높은수준의구조를만들기위해이것들을어떻게함께배치할까를결정 2017 최은만, 객체지향소프트웨어공학 10
혼용방법 상향식과하향식을혼용한방법 하향식방법은항상시스템에좋은구조를가지게함 상향식방법은재사용가능한컴포넌트를만들게된다는면에서유용 2017 최은만, 객체지향소프트웨어공학 11
설계의종류 아키텍처설계 소프트웨어를서브시스템과컴포넌트로분할 어떻게연결될것인가? 어떻게상호작동할것인가? 인터페이스는? 클래스설계 클래스의여러기능 사용자인터페이스설계 알고리즘설계 컴퓨팅메커니즘의설계 프로토콜설계 통신프로토콜의설계 2017 최은만, 객체지향소프트웨어공학 12
02 설계원리 좋은설계를위한목표 비용절감으로인한이익과수익증가 요구한것과일치하는지확증 개발가속화 다음품질의향상 유용성 효율성 신뢰성 유지보수성 재사용성 2017 최은만, 객체지향소프트웨어공학 13
설계원리 1: 분할정복 한번에큰것을개발하는것이작은것을연속적으로다루는것보다어려움 나누어진사람들이각부분을작업할수있음 개별소프트웨어엔지니어가자신이맡은분야에서전문화될수있음 각컴포넌트는더작아지고더이해하기쉬워짐 부품이교체되거나변경되어야할때다른부분을변경또는교체할필요가없음 2017 최은만, 객체지향소프트웨어공학 14
소프트웨어를분할하는방법 분산시스템은클라이언트와서버로분할 시스템은서브시스템으로분할 서브시스템은하나또는그이상의패키지로분할 패키지는여러클래스로분할 클래스는여러메소드들로분할 2017 최은만, 객체지향소프트웨어공학 15
설계원리 2: 응집력을증진 서브시스템이나모듈이서로관련있는것들은같이있게하고그외의것은외부에존재하게함 전체시스템을이해하거나변경하기쉬워짐 응집력의종류 기능적응집 계층적응집 교환적응집 순차적응집 절차적응집 시간적응집 실용적응집 2017 최은만, 객체지향소프트웨어공학 16
기능적응집 단일결과를계산하기위한코드만이모여있고나머지는밖으로추출할때달성됨 즉모듈이단일작업을수행하여결과를내고외부효과 (side-effect) 가없는것 시스템에대한이익 이해가쉬움 재사용용이 다른것으로쉽게대치 데이터베이스를갱신하거나새로운파일을만드는모듈, 사용자와상호작용하는모듈은기능적응집이아님 2017 최은만, 객체지향소프트웨어공학 17
계층적응집 연관되는서비스를제공하는기능들을모아놓고그이외의것은밖으로 각층은계층을형성하여야 고위층은하위층의서비스를접근 하위층은고위층을접근하지않음 어떤층이서비스를제공하는프로시저의집합은 API(Application Programming Interface) 라함 다른층에영향을주지않고층을대체할수있음 API 는복제 2017 최은만, 객체지향소프트웨어공학 18
계층사례 2017 최은만, 객체지향소프트웨어공학 19
교환적응집 특정데이터 ( 예, 클래스 ) 를접근하거나조작하는모듈은같이두고그외의것은밖으로 좋은교환적응집을갖는클래스의조건 특정자료를저장하고조작하는시스템의기능을한클래스안에포함시킨다면 클래스가그데이터를조작하는이외의일은하지않는다면 주요장점 데이터를조작할때한곳에서모든코드를찾을수있음 2017 최은만, 객체지향소프트웨어공학 20
순차적응집 한프로시저의출력이다음프로시저의입력이될때이들을함께두고나머지는밖으로 앞에나열한응집이모두성취되었다면다음은순차적응집이되도록노력 예 ) 문서인식시스템 비트맵을받아글자를구성하는구획으로나눔 해당글자가결정 단어의순서결정 2017 최은만, 객체지향소프트웨어공학 21
절차적응집 한프로시저이후에차례로수행되는프로시저를모아놓은응집 한프로시저의결과가다음프로시저에입력으로사용되지않더라도 순차적응집보다약함 2017 최은만, 객체지향소프트웨어공학 22
시간적응집 프로그램수행에서같은단계에있는오퍼레이션들이같이모여있음 예를들어한시스템의시작이나초기화하는동안사용되는코드들을같이둠 절차적응집보다약함 2017 최은만, 객체지향소프트웨어공학 23
실용적응집 다른응집도에는해당되지않고서로연관된유틸리티기능들을함께두는경우 실용적기능이란다른서브시스템들을위하여광범위하게응용되는즉재사용을위하여설계된프로시저나클래스 예 ) java.lang.math 2017 최은만, 객체지향소프트웨어공학 24
설계원리 3: 결함력감소 결합은두모듈사이에의존관계가있을때발생함 의존관계가존재하면한부분이변경되면다른부분의변경을유발 의존관계가복잡하면컴포넌트들이어떻게수행되는지한눈에보기어려움 결합력의종류 내용결합, 공통결합, 제어결합, 스탬프결합, 자료결합, 루틴호출결합, 타입사용결합, 포함결합, 외부결합 2017 최은만, 객체지향소프트웨어공학 25
내용결합 다른컴포넌트의내부데이터를알리지않고수정하는컴포넌트 내용결합을피하기위하여모든인스턴스변수를캡슐화하여야함 private 으로선언 get 과 set 함수제공 인스턴스변수안에포함된인스턴스변수를직접적으로수정할때내용결합발생 2017 최은만, 객체지향소프트웨어공학 26
내용결합사례 public class Line { private Point start, end;... public Point getstart() { return start; } public Point getend() { return end; } } public class Arch { private Line baseline;... void slant(int newy) { Point theend = baseline.getend(); theend.setlocation(theend.getx(),newy); } } 2017 최은만, 객체지향소프트웨어공학 27
공통결합 전역변수를사용할때항상발생 전역변수를사용하는모든모듈은서로결합됨 공통결합의더약한형태는변수가시스템에있는클래스일부가접근가능할때 Java 패키지 시스템전체가사용하는디폴트값을나타내는전역변수는허용할만함 싱글톤패턴은객체에캡슐화된전역변수를제공 2017 최은만, 객체지향소프트웨어공학 28
제어결합 프로시저가플래그나커맨드를사용하여다른프로시저를호출하여제어하려할때발생 변경하려면호출하는메소드와호출당하는메소드모두변경하여야 다형성을가진오퍼레이션을사용하면제어결합을피할수있음 제어결합을감소시키는한가지방법은 look-up 테이블을만드는것 명령이구동될때호출되어야하는메소드로매핑 2017 최은만, 객체지향소프트웨어공학 29
제어결합의사례 public routinex(string command) { if (command.equals("drawcircle") { drawcircle(); } else { drawrectangle(); } } 2017 최은만, 객체지향소프트웨어공학 30
스탬프결합 응용클래스들중의하나가메소드의매개변수로정의될경우 다른클래스를매개변수로사용하기때문에시스템의변경이쉽지않다 그클래스를다시사용하려면다른클래스도자동적으로재사용하여야 스탬프결합을줄이는두가지방법 매개변수로인터페이스를사용 단순변수를전달 2017 최은만, 객체지향소프트웨어공학 31
스탬프결합의사례 public class Emailer { public void sendemail(employee e, String text) {...}... } 위사례를단순변수를사용하여개선하면 public class Emailer { public void sendemail(string name, String email, String text) {...}... } 2017 최은만, 객체지향소프트웨어공학 32
스탬프결합의예 인터페이스를이용하여개선하면 public interface Addressee { public abstract String getname(); public abstract String getemail(); } public class Employee implements Addressee { } public class Emailer { public void sendemail( Addressee e, String text) {...}... } 2017 최은만, 객체지향소프트웨어공학 33
자료결합 메소드의매개변수타입이기본적이거나단순한라이브러리클래스인경우 매개변수가많을수록결합도가높음 메소드를사용하는모든메소드들은매개변수를전달해주어야 불필요한매개변수를줄임으로결합도를낮출수있음 자료결합과스탬프결합의 trade-off 하나를낮추면다른하나는올라감 2017 최은만, 객체지향소프트웨어공학 34
루틴호출결합 하나의루틴 ( 객체지향에서는메소드 ) 이다른루틴을호출할때결합이발생 서로의행위에의존하기때문에결합이있음 루틴호출결합은어느시스템이나항상존재함 어떤연산을위하여두개이상의메소드를반복하여사용한다면 이런부분을캡슐화하여하나의루틴을정의하여루틴호출결합을줄임 2017 최은만, 객체지향소프트웨어공학 35
타입사용결합 어떤모듈이다른모듈에서정의된자료형을사용할때발생 클래스안에서인스턴스변수를선언하거나지역변수를정의할때는언제든지이런결합이발생 타입사용결합의결과만일타입이바뀐다면타입을사용하는쪽도영향을받음 변수타입을 2017 최은만, 객체지향소프트웨어공학 36
포함결합 컴포넌트가패키지를 import 하는경우 (Java) 컴포넌트가다른파일을 include 하는경우 (C, C++) include 나 import 하는컴포넌트는 include 또는 import 당하는컴포넌트에노출됨 include 또는 import 당하는컴포넌트에변경이가해질경우 include 또는 import 하는컴포넌트안의어떤요소와상충되어변경을하게됨 import 당하는컴포넌트안의어떤요소가 inport 하는컴포넌트의어떤것과이름이같은경우 2017 최은만, 객체지향소프트웨어공학 37
외부결합 어떤모듈이운영체제, 공유라이브러리, 하드웨어등에의존하는경우 코드에의존성갖는부분을줄이는것이최선의방법 퍼싸드 (façade) 설계패턴으로외부결합을줄일수있음 2017 최은만, 객체지향소프트웨어공학 38
설계원리 4: 높은수준의추상화 상세하고구체적인부분을숨기거나상세화를지연함으로써복잡도를줄여야함 좋은추상화는정보은닉을제공 추상화는불필요하게상세한사항을알지않아도서브시스템의근본을알수있게해줌 2017 최은만, 객체지향소프트웨어공학 39
추상화와클래스 클래스는프로시저추상을포함한자료추상 모든변수를 private 으로선언하면추상성은높혀짐 클래스안에메소드가적을수록추상화는좋아짐 슈퍼클래스와인터페이스사용은추상성을높여줌 속성과연관관계도또다른추상 메소드는절차적추상 좋은추상이되려면더적은수의매개변수를가진메소드나오퍼레이션제공 2017 최은만, 객체지향소프트웨어공학 40
설계원리 5: 재사용성증진 시스템의다양한측면을고려하여다른환경에서도다시사용될수있도록설계 설계를가능하면범용화 (generalize) 앞에서소개한세가지설계원리를따름 후크를가진시스템으로설계 설계를가능하면단순화 2017 최은만, 객체지향소프트웨어공학 41
설계원리 6: 설계와코드의재사용 재사용을위한설계와설계재사용은서로보완적 적극적으로설계나코드를재사용하는것은다른사람들이투자한재사용컴포넌트로이득을얻는것 복제 (cloning) 는재사용의형식으로볼수없음 2017 최은만, 객체지향소프트웨어공학 42
설계원리 7: 유연성고려 미래에이루어질변경을미리적극적으로예상하고이를준비하는것 결합력감소와응집력증가 추상화생성 하드코딩금지 선택의여지를남김 시스템을나중에변경하는사람의선택권을제한하지말도록 재사용가능코드를사용하고코드를재사용가능하게만들것 2017 최은만, 객체지향소프트웨어공학 43
설계원리 8: 노후예측 기술과환경은변화되도록계획되어있어소프트웨어도쉽게변경되고실행되도록하여야 성숙되지않은기술은피함 특정한환경에서만사용되는라이브러리는피함 문서화되지않은기능이나사용하지않는기능은피함 작은회사나길게갈것같지않은회사가제공하는소프트웨어나하드웨어는피함 표준언어나다수의회사가제공하는기술을사용함 2017 최은만, 객체지향소프트웨어공학 44
설계원리 9: 이식성 가능하면소프트웨어를많은플랫폼에서실행할수있게 특정환경에만있는기능의사용은피함 예 ) MS-Windows 에만있는라이브러리 2017 최은만, 객체지향소프트웨어공학 45
설계원리 10: 테스트가능성 한발더나가테스트가쉽도록 소프트웨어를자동으로테스트할수있게자동화 코드의모든기능이 GUI 를통하지않고도실행될수있게설계 Java 언어에서는클래스에 main() 함수를만들어다른메소드들을검사할수있게함 2017 최은만, 객체지향소프트웨어공학 46
설계원리 11: 방어적인설계 설계하는컴포넌트를사용하는다른사람이항상올바로사용한다고생각하지않도록 컴포넌트를부적절하게사용할경우를대비 구현한컴포넌트에대한모든입력이올바른지체크 : precondition 하지만과도한방어설계는불필요한반복적체크를유발함 2017 최은만, 객체지향소프트웨어공학 47
03 설계안결정 우선순위와목표를이용하여설계안결정 1 단계 설계안을모두나열하고기술함 2 단계 목표와우선순위를고려하여각설계안에대하여장점과단점을기술 3 단계 하나이상의목표를만족시키지못하는설계안은배제 4 단계 목표를가장잘만족시키는설계안선택 5 단계 계속되는설계의사결정을위하여우선순위조정 2017 최은만, 객체지향소프트웨어공학 48
설계안결정사례 다음순서로우선순위가높은목표를설정한시스템을생각해보자. 보안 공개키기법을사용하며 400 MHz 프로세서로 100 시간안에암호를풀지못해야한다. 유지보수성 구체적목표없음 CPU 효율성 400 MHz 프로세서에서수행될때 1 초이내로반응하여야 네트워크대역효율성 트랜젝션당 8 KB 이상의데이터가전송되어서는안됨 메모리효율성 20 MB 램이상소요되면안됨 이식성 윈도우 98, 2000, XP 뿐만아니라리눅스에서도실행되어야 2017 최은만, 객체지향소프트웨어공학 49
설계안평가의예 설계안보안유지보수 메모리효율성 CPU 효율성 대역폭효율성 이식성 A 안높음중간높음중간낮음낮음 B 안높음높음낮음중간중간낮음 C 안높음높음높음낮음높음낮음 D 안 - - - 중간 - - E 안 - - - 낮음 - - 50
04 아키텍처모델 소프트웨어시스템에대한전반적인구조를설계하는과정으로다음사항을포함 소프트웨어를서브시스템으로분할 이들이어떻게상호작동하는지결정 인터페이스를결정 아키텍처는설계의핵심으로소프트웨어엔지니어모두가이해하고있어야함 아키텍처가시스템전체의효율성, 재사용성, 유지보수성을결정 2017 최은만, 객체지향소프트웨어공학 51
소프트웨어아키텍처의중요성 아키텍처모델을개발하는이유 소프트웨어시스템을누구나잘이해하게하기위해 시스템의일부를독립적으로작업하게하기위해 시스템의확장을준비하기위해 재사용과재사용가능성을용이하게하기위해 2017 최은만, 객체지향소프트웨어공학 52
좋은아키텍처모델 시스템의아키텍처는여러가지관점으로표현됨 논리적으로분할된서브시스템 서브시스템사이의인터페이스 컴포넌트사이의동적인인터랙션 서브시스템사이에공유하는데이터 컴포넌트가런타임에존재하는위치 2017 최은만, 객체지향소프트웨어공학 53
아키텍처모델의개발 아키텍처를 refine 어떤컴포넌트가상호작용하며서로인터페이스하는중요한방법을찾음 자료와기능이여러컴포넌트사이에어떻게분배되는지결정 현재의프레임워크를재사용할수있는지, 프레임을구축할수있는지결정 각사용사례를살펴보고아키텍처를조금씩고쳐나감 아키텍처를성숙시킴 2017 최은만, 객체지향소프트웨어공학 54
05 패키지다이어그램 패키지 공통적인특성을가진클래스들의모임 재사용의단위가됨 관계 점선화살표는의존관계를나타냄 컴파일타임에바인딩 2017 최은만, 객체지향소프트웨어공학 55
패키지다이어그램 - 사례 2017 최은만, 객체지향소프트웨어공학 56
배치다이어그램 개발될시스템의소프트웨어및하드웨어컴포넌트의물리적인설치관계를나타냄 노드 : 컴퓨팅유닛 링크 : 시스템의통신경로 ( 물리적으로표시 ), 참조방향도표시 2017 최은만, 객체지향소프트웨어공학 57
06 아키텍처패턴 패턴이나스타일이란말이아키텍처에도적용됨 건축에서철골형, 철근콘크리트형, 고딕양식등분명한유형이존재하는것처럼소프트웨어구조에도유형이있음 컴포넌트를이용하여융통성있는시스템을설계하도록만들어줌 컴포넌트는가능하면서로독립적이되도록 2017 최은만, 객체지향소프트웨어공학 58
계층구조스타일 계층구조에서는하나의층이바로아래있는층만서로커뮤니케이션함 상위층에서는하위층을하나의서비스로여김 복잡한시스템은추상수준을높이면서층을포개어구성할수있음 UI 를위한별도의층을갖은것이중요 UI 바로아래층은사용사례에서결정된어플리케이션기능들을제공하는것으로설계 하위층은공통적인서비스를제공 네트워크커뮤니케이션, 데이터베이스접근 2017 최은만, 객체지향소프트웨어공학 59
다계층구조의사례 2017 최은만, 객체지향소프트웨어공학 60
다계층구조의설계원리 1. 분할정복 분리된계층이독립적으로설계됨 2. 응집도증진 계층응집도 ( 층안에관련서비스가응집 ) 3. 결합력감소 잘설계된하위층은상위층에대하여알지못함. 층사이에커넥션만 API 를통하여이루어짐 4. 추상화증진 하위층이어떻게구현되었는지상세히알필요가없음 5. 재사용성증진 하위층은범용적으로설계될수있음 6. 재사용확대 다른곳에서개발된층을재사용 2017 최은만, 객체지향소프트웨어공학 61
다계층구조의설계원리 7. 융통성 새로운기능을하위층서비스에추가하거나상위층을교체 8. 노후를예측 컴포넌트를분리된층에고립시킴으로노후를대비할수있음 9. 이식성 특정플랫폼에의존된부분을계층하나에격리시킬수있음 10. 테스트가능성 각층을분리하여테스트가능 11. 방어적설계 각층의 API 를엄격한 assertion 체크로구축할수있음 2017 최은만, 객체지향소프트웨어공학 62
클라이언트서버스타일 커넥션을기다리고처리해주는하나의클라이언트가있음 서비스를제공받으려고커넥션을시도하는하나이상의클라이언트가있음 확장된형태는 peer-to-peer 스타일 여러호스트에분산되어있는여러소프트웨어컴포넌트로구성됨 2017 최은만, 객체지향소프트웨어공학 63
분산시스템의사례 2017 최은만, 객체지향소프트웨어공학 64
분산시스템의설계원리 1. 분할정복 클라이언트와서버로확실히분리별도개발할수있음 2. 응집도증진 서버가클라이언트에게응집도높은서비스를제공 3. 결합력감소 단순메시지를교환하는통신체널이유일함 4. 추상화증진 별도의분산컴포넌트가좋은추상성을제공 6. 재사용확대 분산시스템을구축하기위한좋은프레임워크는발견할수있으나 l 클라이언트 - 서버시스템은매우특수한경우가많음 2017 최은만, 객체지향소프트웨어공학 65
분산시스템의설계원리 7. 융통성 서버와클라이언트를추가하여쉽게분산시스템을재구성 9. 이식성 서버를이식하지않고클라이언트를새플랫폼에올릴수있음 10. 테스트가능성 서버와클라이언트를별도로테스트할수있음 11. 방어적설계 메시지처리코드를엄격히체크하여야함 2017 최은만, 객체지향소프트웨어공학 66
브로커스타일 여러노드에투명하도록소프트웨어시스템을분산 원거리에있는객체의메소드를호출가능 CORBA(Common Object Request Brocker Architecture) 가잘알려진표준 2017 최은만, 객체지향소프트웨어공학 67
브로커패턴의설계원리 1. 분할정복 원격객체가독립적으로설계됨 5. 재사용성증진 다른시스템도사용할수있도록원격객체의설계가가능 6. 재사용확대 다른곳에서생성된원격객체를재사용할수있음 7. 융통성 브로커가필요에따라변경될수있고프록시가다른원격객체와통신할수있음 9. 이식성 동일브로커를접근하는새로운플랫폼을위한클라이언트를작성할수있음 11. 방어적설계 원격객체에대한신중한 assertion 체크 2017 최은만, 객체지향소프트웨어공학 68
트랜젝션처리스타일 연달아들어오는입력을하나씩읽어 각입력은트랜젝션을명시 - 시스템에저장되어있는데이터를조작하는명령들 트랜젝션을어디서처리할것인지를나타내는트랜젝션사령 (dispatcher) 컴포넌트가필요 사령컴포넌트는프로시저호출이나메시지를트랜젝션을처리할컴포넌트에배치 2017 최은만, 객체지향소프트웨어공학 69
트랜젝션처리의예 2017 최은만, 객체지향소프트웨어공학 70
트랜젝션처리의설계원리 1. 분할정복 트랜젝션처리기는별도의엔지니어가담당할수있는잘분리된단위 2. 응집도증진 트랜젝션처리기는원래응집된단위 3. 결합력감소 처리기에서사령컴포넌트를분리함으로결합력낮춤 7. 융통성 새로운트랜젝션처리기를추가하기쉽다. 11. 방어적설계 트랜젝션처리기와사령컴포넌트에 assertion 추가 2017 최은만, 객체지향소프트웨어공학 71
파이프필터스타일 비교적단순한데이터스트림이프로세스에차례로전달되어 특정한형태로변환시킴 데이터는파이프라인으로계속주입됨 프로세스는병렬적으로실행 아키텍처는매우융통적 거의모든컴포넌트가삭제될수있음 컴포넌트가대치될수있음 새로운컴포넌트가추가될수있음 어떤컴포넌트는수서를재배치할수있음 2017 최은만, 객체지향소프트웨어공학 72
파이프필터아키텍처사례 2017 최은만, 객체지향소프트웨어공학 73
파이프필터아키텍처설계원리 1. 분할정복 각프로세스가별도로설계될수있음 2. 응집도증진 각프로세스가기능적응집 3. 결합력감소 각프로세스가일반적으로단일입력과단일출력 4. 추상화증진 파이프라인컴포넌트들이매우높은추상성을가짐 5. 재사용성증진 각프로세스들은다른환경에서도사용가능 6. 재사용확대 재사용컴포넌트를찾아파이프라인에추가할수있음 2017 최은만, 객체지향소프트웨어공학 74
파이프필터아키텍처설계원리 7. 융통성 프로세스의순서를자유롭게바꿀수있음 10. 테스트가능성 개별프로세스를테스트하기쉬움 11. 방어적설계 각컴포넌트의입력을엄격하게체크 2017 최은만, 객체지향소프트웨어공학 75
MVC 스타일 사용자인터페이스를시스템의다른부분과분리하기위한스타일 모델은사용자에게보여주고조작될수있는중요한클래스의인스턴스를포함 뷰는모델에있는데이터를사용자인터페이스에보여주는역할을담당 제어부분은사용자가모델과뷰와인터랙션하는것을제어하는객체를포함 옵서버패턴이뷰로부터모델을분리하는데사용됨 2017 최은만, 객체지향소프트웨어공학 76
MVC 스타일의사례 2017 최은만, 객체지향소프트웨어공학 77
MVC 스타일의설계원리 1. 분할정복 세가지컴포넌트가독립적으로설계될수있음 2. 응집도증진 뷰와제어부분이단일 UI 계층에같이있다면계층응집도가큼 3. 결합력감소 세컴포넌트사이의통신채널이최소화됨 6. 재사용확대 뷰와제어부분은여러가지 UI 제어를위하여재사용컴포넌트로사용될수있음 7. 융통성 뷰, 제어를변경하여 UI 를쉽게갱신할수있음 10. 테스트가능성 애플리케이션을 UI 와분리하여테스트가능 2017 최은만, 객체지향소프트웨어공학 78
07 아키텍처문서화 설계문서는더좋은설계를만들기위한도우미 구현을시작하기전에중요한설계이슈를들어냄 참여그룹이설계를검토하고개선할수있게함 문서는다음참여자들의커뮤니케이션수단 설계를구현할사람 미래에필요에따라설계를수정할사람 설계한시스템에인터페이스하여새로운시스템을작성할사람 2017 최은만, 객체지향소프트웨어공학 79
문서구조 목적 문서가기술하는대상시스템이무엇인지기술 설계가다루고있는요구사항에대한참고문헌을소개 (traceability) 우선순위 설계작업과정을설명할우선순위를기술 설계의아웃라인 개괄적인소개를하기위하여최상위로추상화된설계를제시 주요설계이슈 해결되어야할중요한이슈 고려해야할다른대안이나최종결정, 결정이유등을기술 설계상세사항 아직언급되지않은것중독자가꼭알아야할사항 2017 최은만, 객체지향소프트웨어공학 80
설계문서예 : 네비게이션시스템 A. 목적 자동차에장착되어목적지까지방향을지시하여운전을안내하는네비게이션시스템에대한아키텍처를설계한것이다. B. 우선순위 MyNavigation 시스템에서는 다음과 같은 순서로 중요하다고결정하였다. 1) 성능 - 네비게이션지시반응시간, 기억공간효율성 2) 의존성 - 입력오류에대한강인성, 신뢰성, 보안 3) 사용성 - 사용자인터페이스친밀성 4) 유지보수성 - 확장성, 이식성, 적응성 2017 최은만, 객체지향소프트웨어공학 81
설계문서예 : 네비게이션시스템 C. 설계이슈 이슈 1: GIS 정보를어디에저장할것인가? 1.1 안 : 중앙서버에저장하고이동통신에의하여실시간접근하게하는방법. 1.2 안 : 네비게이션시스템에다운로드하여메모리에저장하는방법. 결정안 : 1.1 안은주행중통신이끊길수있고통신비용도 2017 최은만, 객체지향소프트웨어공학 82
설계문서예 : 네비게이션시스템 Crossing Destination Direction Location PlanningService RouteAssistant Segment Trip 여러운전자가여러세그멘트사이에택할수있는지리적교차점 운전자가가고싶은위치교차점과근처의세그멘트가주어졌을때자연어로표현된 Direction 이차를어떤방향으로몰아야하는지를안내함 GPS 시스템이나차바퀴의방향전환횟수로파악하는차의위치 여정, 즉여러연결된목적지를교차점과세그멘트로제공할수있는서비스 현재의위치와다가오는교차점이주어졌을때운전자에게 Direction 을제공 두교차점사이의길 두위치점사이에운행하여야할 Direction 의순서있는집합 2017 최은만, 객체지향소프트웨어공학 83