객체지향설계와패턴 Lecture #0: 강의소개 Eun Man Choi emchoi@dgu.ac.kr
교육목표 l 강의소개 l 목표, 평가방법, 일정계획 l 설계란무엇인가? l 창의적인설계 2
강의목표 l 소프트웨어설계에기본이되는설계원리와 UML 을학습한다. l 객체지향설계에쓰이는중요한패턴에대하여공부한다. l 배운설계기법을적용하는능력을기른다. 3
강의방법 l Part 1: 강의 (100 분 ) l 10 분지난주복습과 Q&A l 80 분매주강의슬라이드를사용하여분석과설계와관련된특정한주제를설명하고토론 l 10 분실습문제또는과제설명 l Part 2: 실습과설계 (100 분 ) l 요구분석, 설계에관한실습 ( 전반부 ) l 설계과제 #1: 마이크로웨이브설계 ( 개인별 ) l 패턴에관한프로그래밍실습 ( 후반부 ) l 설계과제 #2: 자유과제설계 ( 팀별 ) 4
평가방법 l 강의출석및참여도 : 10% l 3 번의지각은 1 번의결석 l 1/5 이상결석은 F l 중간및기말시험 : 60% l 응용형 l 추가시험없음 l 과제 : 30% l 실습과제 l 설계프로젝트 5
교과서및참고서적 l 교과서 : l 최은만, UML 을활용한시스템분석설계, 생능출판사, 2010. l 에릭감마, 리처드헬름, 랄프존슨, 존블라시디스공저, GoF 의디자인패턴, 피어슨에듀케이션, 2007( 번역본 ). l l 참고서적 : l l l Headfirst 디자인패턴 Larman C., Applying UML and Patterns: An Introduction to Analysis and Design and Iterative Process, 3rd Edition, Prentice-Hall, 2004( 번역본도있음 ). Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2002. 데이비드토머스외, 이용원공역, 실용주의프로그래머를위한단위테스트, 인사이트, 2004. 6
강의일정 l Lecture 1: 강의소개, 설계란무엇인가? l Lecture 2: 프로젝트계획, 비즈니스목표설정, 타당성분석등 l Lecture 3: 기능적모델링 ( 사용사례 ) l Lecture 4: 구조적모델링 ( 클래스와속성, 연관, 오퍼레이션 ) l Lecture 5: 동적모델링 ( 순서다이어그램, 커뮤니케이션다이어그램, 상태다이어그램 ) l Lecture 6: 아키텍처설계 ( 설계원리, 아키텍처유형 ) l Lecture 7: 패턴의소개 l Lecture 8: 중간시험 7
강의일정 l Lecture 9: 생성패턴 (1) 팩토리, 싱글톤패턴 l Lecture 10: 생성패턴 (2) 추상팩토리, 프토토타입패턴 l Lecture 11: 구조패턴 (1) 퍼싸드, 데코레이터패턴 l Lecture 12: 구현패턴 (2) 컴포지트, 어뎁터, 프록시패턴 l Lecture 13: 행위패턴 (1) 인터프리터, 반복자, 중재자패턴 l Lecture 14: 행위패턴 (2) 옵서버, 상태, 책임체인패턴 l Lecture 15: 소프트웨어아키텍처패턴 - 아키텍처패턴이란?, 블랙보드, 브로커, PAC, 마이크로커널아키텍처패턴, 리플렉션아키텍처패턴 l Lecture 16: 기말시험 8
실습 l 실습과제 l 방법의설명 강의, 조교의설명 l Self 스터디 도구 l 개인별과제 방법의적용, 문제해결 l 내용 프로그래밍, 설계표현 l 설계과제 l UML 설계 l 작업과튜터링중심 l 개인별설계작업 l 팀별설계 9
설계의사전적정의 l 건축, 토목, 기계제작따위에서그목적 에따라실제적인계획을세워도면따위 로명시하는일. 표준국어대사전 10
과학과엔지니어링의차이 왜? 과학 지식 Need 과학 / 기술 엔지니어링 설계 프로토타입 Specification 11
설계란? l 설계에는의도 (conscious) 가있다. l 설계의중심에는사람의관심사 ( 비용, 효율, 선호도등 ) 가있다. l 설계는재료 (material) 와함께하는것이다. l 설계는창의적 (creative) 이다. l 설계는의사소통 (communication) 이다. l 설계는협동작업 (social activity) 이며협동에의한결과물을만든다. - Bringing Design to Software by Terry Winograd 12
설계란? l ( 사용자 ) 를위하여 ( 기능 ) 을가진 ( 프로젝트 ) 을만들기위하여설계 l 프로젝트 : l 사용자 : l 기능 : 무선 MP3 음악또는라디오청취자 선이꼬이는것이없음 l 기술 : 아날로그 / 디지털전자공학, 무선통신 13
창의적통찰 (creative insight) 표면아래숨어있는진실을발견 문제의정의재해석새로운개념의도입, 재조직벤치마킹 새로운아이디어의탄생 14
창의적인설계의결과 15 15
창의적인통찰 l 어떤문제와결핍이있는지해결 l 의도를가지고충분한주의를기울여라 l 문제를재해석 l 새로운개념을만나게하라. l 정보를조직화 l 강점을최대로살려라. l 성공사례를배워라. - 신병철지음, 통찰의기술 16
설계의표현 17
엔지니어링설계과정 l 필요를인식 l 문제가무엇인가? l 문제를정의 l 목표, 목적, 제한사항 l 프로젝트를계획 l 작업일정, 예산계획 l 작업의순서 l 여러가지안을고안 l 광범위한제안 l 여러가지안을평가 l 성능분석 l 최적안을결정 l 설계를구현 18
소프트웨어설계 l 상품이될대규모소프트웨어를개발하려면수많은추상적표현이필요 l 소프트웨어의구조적측면, 행위적측면, 자료적측면등여러특성에대한설계, 의사결정과문서작성이필요 l 소프트웨어설계를잘하려면 l 추상적표현을이해하고 l 설계의도를표현할수있어야 l 좋은설계 ( 패턴 ) 를많이알고있어야 19
소프트웨어제작 l 좋은소프트웨어제작의장애물 l 공장의조립과정으로생각하는잘못된인식 l 적절하지않는교육 l 한정된도구 l 응용분야와설계방법의다양함 l 소비자와제작자의의사소통의어려움 l 문제자체와작업의복잡 l 품질을관리하기어려움 20
코드와디자인 l 프로그램이좋다고설계가좋다고할수있나? l No l 코드에오류가없더라도설계가좋지않을수있음 l 고치기어려움 l 검증하기어려움 l 다시사용하기어려움 l 알아보기어려움 l 사용하기어려움 21
좋은품질을위하여고려할사항 l 모든기능이잘구현되었나?(Correctness) l 사용자가실수하였을때시스템이중단되지않는가?(Robustness) l 계좌개수의오류 l 잘못된계좌번호 l 잘못된금액 ( 정수가아닌 ) l 잘못된명령 (Stop, Quit) l 어떤메소드가무엇을하는것인지분명하지않음 (Documentation) 22
좋은품질을위하여고려할사항 l 프로그램을수정하고추가, 제거하기쉬운가? l Flexibility l 충분히빠른가? l Speed Efficiency l 기억용량요구를만족하는가? l Space Efficiency l 다른응용에사용할수있는가? l Reusability 23
설계작업 l 엔지니어링작업의핵심 l 목표로하는생산물을만들기전에경제적, 기술적, 법적등여러측면을고려하여궁리한해결책 l 설계작업의특징 l 주어진문제를알고있는이론과기술을동원하여해결하는탐구작업 l 모델이중요 l 품질을중요시하는작업이며프로덕트에대한전반적인관점이필요 l 프로덕트를완성하기위한팀작업의일부 24
소프트웨어에서의설계 l 다른엔지니어링설계와다름 l 추상적모델이더욱중요 l 무형의정보나프로그램의구조가중요 l 계속변경하고발전하므로설계도따라서발전 l 컴퓨터와관련된설계 l 하드웨어설계 모듈화, 설계와제조가정확히분리 l 소프트웨어설계 설계와구현의갭이크므로분리하기어려움 l Co-design 25
소프트웨어설계의특징 l 구현을모르면설계하기어려움 l 구현기술에따라설계하는방법이달라짐 l C 언어 자료흐름도, 모듈구조도 l Java, C++ 언어 UML l Lisp, Prolog 룰 l EJB 컴포넌트 l 소프트웨어설계 l 프로덕트를제작하는여러원리들을잘이해하고이를적용하여비전을잘표현할수있어야 26
좋은설계교육방법 l 좋은설계교육방법은? l 강의, 주입식 (?) l 토론식 l 협동작업위주 l 튜터링 l 멀티미디어 l 컴퓨터기반교육 l 27
디자인스튜디오 l 현장에서일어나는복잡한문제와다수의클라이언트, 모호한요구등을다루기위한교육방법 l 건축설계나그래픽설계, 패션디자인등에서도스튜디오스타일의강좌를운영 l 예비전문가들의창의성과기술통합력을교육 l 스튜디오강좌는프로젝트문제에대하여아이디어를내고, 논의하고직접해보고, 이를비평하는작업 28
설계패턴 l 좋은설계의조각들을이해하고기억 l 설계작업의숙어 l 사례 : 팀장 : 이번프로그램은홍길동씨가만들어보세요. 주식값이실시간으로바뀌는내용을화면에띄워야하니이번설계에는옵서버패턴을써야겠어요. 홍 : 네제가하겠습니다. 그런데옵서버패턴이뭔가요? 팀장님 팀장 : 그걸모르나요? 그걸설명하려면일일이프로그램짜는것만큼설명이필요한데 l 좋은설계사례들을보고적용하는기술을익힘 29
Questions?