1 / 52

소프트웨어 공학 Lecture #6: 객체지향 설계

소프트웨어 공학 Lecture #6: 객체지향 설계. 안 병 익 biahn99@gmail.com 강의 블로그 Mobilecom.tistory.com. 학습 목표. 객체지향 분석과 설계 객체지향 개념 UML 2.0 다이어그램 정적 모델링 동적 모델링 디자인 패턴. 객체지향 기술. 절차적인 방법은 조그만 변화에도 영향이 큼 함수와 자료를 함께 클래스로 묶음으로 여러 가지 장점을 얻을 수 있음 장점 추상화 , 정보은닉 등 설계 원리에 충실 복잡함을 잘 다룰 수 있음 특징

kamin
Download Presentation

소프트웨어 공학 Lecture #6: 객체지향 설계

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 소프트웨어 공학Lecture #6: 객체지향 설계 안 병 익 biahn99@gmail.com 강의 블로그Mobilecom.tistory.com

  2. 학습 목표 객체지향 분석과 설계 객체지향 개념 UML 2.0 다이어그램 정적 모델링 동적 모델링 디자인 패턴

  3. 객체지향 기술 • 절차적인 방법은 조그만 변화에도 영향이 큼 • 함수와자료를 함께 클래스로 묶음으로 여러 가지 장점을 얻을 수 있음 • 장점 • 추상화, 정보은닉등 설계 원리에 충실 • 복잡함을 잘 다룰 수 있음 • 특징 • 유사성을 이용하는 방법을 제공 • 뚜렷하게 구별되는 단위로 분할 • 코드 재사용에 의하여 생산성을 높임 • 빠른 속도로 적용, 산업계 표준화

  4. 6.1 객체지향 분석과 설계 • 명확히 나누기 어려움 • 공통의 개념을 사용 • 반복적인 싸이클로 완성 • 분석은 문제 영역, 설계는 솔루션 영역을 다룸

  5. 객체지향 모델 여러 가지 관점에서 시스템을 모델링 객체지향에서는 크게 세 가지 관점의 모델을 작성

  6. 객체지향 분석 설계 과정 뚜렷한 표준 프로세스는 없음 사용사례는 맨 처음, 최종 목표는 클래스 다이어그램

  7. 프로그램= 자료구조 + 함수 프로그램 = 객 체 + 객 체 프로그램= 자료구조 + 함수 자 료 함 수 함 수 함 수 함 수 자료 자료 자료 자료 함수1 함수2 함수3 6.2 객체지향 개념 • 재래식 방법 • 기능중심, 변경의 파급효과 큼 • 객체 지향 방법 • 자료와 관련 함수의 결합

  8. 객 체 • 객체의 정의 • 소프트웨어 모듈(객체) = 자료구조 + 함수 • 객체는 상태(state), 능력(behavior), 정체성(identity)을 가진다. • 상태 • 능력 : 연산(operation)을 수행 할 수 있는 능력 • 정체성 : 구별 가능성 • 객체 인스턴스(instance) = 객체 • 비슷한 객체의 구조와 행동은 공통 클래스로 선언

  9. 클래스(Class) • 클래스(class) vs 인스턴스 (instance) • 클래스 : 객체의 타입(object type) • 인스턴스 :클래스에 속하는 개개의 객체 • 클래스의 속성(attribute) • 예 : 직원 클래스 • 속성 : 이름, 직위, 월급, 전화 번호 등 • 함수 : 진급, 월급 인상, 전화 변경 등 • 클래스는 객체들이 갖는 속성과 적용 연산을 정의하고 있는 틀(templet) • Employee Hong_kildong(); • Employee* Hone_kildong = new Emplyoee(); 직원클래스 홍길동 객체

  10. 캡슐화(Encapsulation) • 캡슐화의 정의 • 관련된 항목을 모아서 갭슐을 씌움 • 예> 학사 관리 시스템 • 데이터 : 학번, 이름, 주소 캡슐화 • 함수 : 평점 계산, 주소 변경, 수강 신청 캡슐화 • 추상화의 수단 • 세부사항은 차후에 생각 • 정보은닉(information hiding) • 외부의 직접적 접근 불가, 일종의 블랙박스 • 구현에 따라 선택 가능 • 문법 : public, private, protected

  11. 객체 사이의 관계 Publisher Book 1 * • 객체는 일반적으로 상호작용하여 동작 • 객체에 있는 서비스를 호출하면 두 객체는 관계가 맺어져야 함 • 상호작용할 필요가 있는지 찾아내는 작업이 필요 • 연관 • 서로 상대의 존재를 알 수 있도록 관련이 맺어진 것 • 예) 책과 출판사 • 서로 알게하고 접근 가능하게 하는 방법은 여러 가지가 있음 • 집합 관계 • 전체 개념과 부분 개념 사이의 관계 • 격납의 의미 • 예) 디스크  트랙  섹터

  12. 인사대상 학 생 교 수 직 원 학부생 대학원생 상속(inheritance) • 상속의 의미 • 상위 클래스의 속성과 연산을 물려 받음 • 슈퍼클래스(superclass), 서브 클래스(subclass) • 예>직원 : 슈퍼클래스 , 관리자 : 서브클래스 • 복수상속 (multiple inheritance) • 두개 이상의 수퍼클래스에서 상속 받음

  13. 다형성(polymorphism) • 다형성의 정의 • 여러 형태를 가지고 있다 (=여러 형태를 받아들일 수 있다) • 같은 이름의 메시지를 다른 객체 or 서브클래스에서 호출 • 예> getarea() 를 도형의 모양이 달라도 호출 • 메소드:특정한 클래스를 위하여 오퍼레이션을 구현 • 하나 이상의 메소드를 가진 오퍼레이션 • 매개변수나 객체가 속한 클래스의 이름으로 구분

  14. 다형성(polymorphism) • 현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있음 다형성의 예

  15. 6.3 UML이란? • 객체지향 소프트웨어를 모델링 하는 표준 그래픽 언어 • 시스템의 여러 측면을 그림으로 모델링 • 하드웨어의 회로도 같은 의미 • 역사 • 1980년대 말부터 1990년대 초에 객체지향으로 모델링 하는 과정과 모델링 언어 출현 • 설계와 표현 방법의 급증으로 혼란을 초래 • Rumbaugh와 Booch가 1994년 두 가지 방법을 합병하기로 함 • Rational Software 라는 회사 설립 • 1995년 Jacobson이 팀에 합류 • 사용 사례를 제안 • 1997년 Object Management Group(OMG)이 UML 표준화 추진

  16. UML의 배경과 역사 • Shlaer와 Mellor가 제안한 반복적 설계 방법 • Coad와 Yourdon이 제안한 프로토타입 중심 방법 • Worfs-Brock 등 폴랜드의 Smalltalk 그룹이 제안한 의무 중심 설계 및 CRC(Class-Responsibility-Collaboration) 카드 방법 • Rational Software의 Booch가 제안한 Ada 설계 방법 • GE 연구소의 Rumbaugh가 중심이 되어 제안한 OMT • Odell과 Martin의 정보공학을 기초로 한 방법 • Ericsson에서 일한 Jacobson의 use case 개념을 소개한 방법

  17. UML 다이어그램

  18. UML 다이어그램

  19. UML 다이어그램

  20. 6.4 정적 모델링 • 정적 모델 • 시간의 개념이 개입되지 않은 모델 • 클래스 다이어그램이 대표적 • 클래스 다이어그램 • 객체, 클래스, 속성, 오퍼레이션, 연관 등을 표현

  21. 클래스, 속성, 오퍼레이션의 표현 • 박스 위에 클래스 이름 • 추상 클래스는 이탤릭체 • 인터페이스 클래스는 <<interface>> 추가 • 속성 • 객체가 가지는 모든 필드를 포함 • 오퍼레이션/메소드 • 아주 흔한 메소드(get/set)는 생략 • 상속된 메소드도 포함할 필요 없음

  22. 클래스 사이의 관계 • 연관(association): • 객체 사이에 관련 • 예) Customer 객체가 Rental 객체에 대여 정보 문의 • 집합(aggregation): 어떤 클래스가 다른 클래스의 모임으로 구성 • 합성(composition): 포함된 클래스가 컨테이너 클래스가 없이는 존재할 수 없는 집합관계의 변형 • 일반화(generalization): 상속(isa) 관계 • 클래스 사이의 상속 • 인터페이스 구현

  23. 연관 관계 • 연관(association): • 어떤 클래스의 인스턴스가 작업을 수행하기 위하여 다른 클래스를 알아야 하는 함 • 다중도(multiplicity) • *  0, 1, or more • 1  정확히 1개 • 2..4  2개 내지 4개 • 3.. *  3개 이상 • 이름 –객체들의 관계 이름 • 방향성(navigability) –질의의 방향, 객체 사이의 선으로 표시하며 양쪽 방향인 경우는 화살표시 없음

  24. 연관 관계의 다중도 • 1 대 1 • 학생 1명이 학생증(id card) 한 개만을 가진다. • 1 대 다 • 학생 1명이 여러 클래스를 수강할 수 있다.

  25. 집합과 합성 • 영화관이 없어지면 • 매표소도 없어짐  합성 • 그러나 영화는 아직 존재  집합

  26. 일반화 관계 • 일반화(상속) • 부모를 향한 화살표로 표시되는 하향 계층 관계 • 선/화살표는 부모 클래스의 종류에 따라 다름 • 클래스: 실선/검은 헤드 화살표 • 추상 클래스: 실선/흰 헤드 화살표 • 인터페이스: 점선/흰 헤드 화살표

  27. 클래스 찾기 • 정적 모델링 • 사용사례를 작성하여 도메인 분석이 어느 정도 된 후 객체를 찾고 관계를 정의하는 작업 • 클래스가 될 수 있는 요소들 - 구조 - 외부 시스템 - 디바이스 - 역할 - 운용절차 - 장소 - 조직 - 완성된 시스템에 의하여 조작되어야 할 정보 • 클래스 후보의 세가지 유형 • 엔티티 클래스 • 경계 클래스 • 제어 클래스

  28. 엔티티 클래스 • 엔티티 클래스 • 시스템에서 계속 추적해야 할 자료가 들어 있는 클래스 • 엔티티 클래스를 발견하는 휴리스틱 • 사용사례를 이해하기 위하여 사용자와 개발자가 명확히 규정된 용어 • 사용사례에서 반복되어 나오는 용어 • 시스템이 계속 추적하여야 하는 실세계의 엔티티 • 자료저장소 또는 단말 • 자주 사용하는 응용 도메인의 용어

  29. 경계 클래스 • 시스템 외부의 액터와 상호 작용하는 클래스로 사용자 인터페이스를 제어하는 역할 • 액터와 연결된 시스템의 인터페이스 표현 • 사용자 인터페이스를 개괄적으로 모형화

  30. 제어 클래스 • 경계 클래스와 엔티티 클래스 사이에 중간 역할 • 사용 사례의 초기에 생성되고 끝까지 존재 • 경계 클래스로부터 정보를 받아 엔티티 클래스에 전달 • 예) 양식의 순서, undo, 히스토리 저장 큐 등 • 자료를 다른 클래스로부터 받아 처리하는 것이 주임무인 클래스

  31. 연관 관계 • 두 개 이상의 클래스 사이에 어떤 관계가 있음을 표현 • 연관관계의 속성 • 이름 : 두 클래스 사이의 연관관계 표현. 연관관계의 이름은 생략될 수도 있으며 유일한 이름을 붙일 필요 없음 • 역할 : 연관관계의 양쪽 끝에 있는 클래스의 기능 표현 • 다중도 : 연관관계를 구성하는 인스턴스의 개수 • 연관관계는 상태를 나타내는 동사나 동사구로 표현 • By Abbott 휴리스틱

  32. 연관 관계 1 Rent * Customer Video Tape Rental Customer와 VideoTape 클래스 사이의 연관관계 1 display * RentUI Video Tape RentUI와 VideoTape 클래스 사이의 연관관계

  33. 속 성 • 개별 객체들이 가지는 특성 • 속성의 요소 • 이름 : 객체 안에서 구별할 수 있는 속성의 이름 • 간단한 설명 : 구현하는 프로그래머를 위하여 간단히 설명 첨가 • 속성값의 타입 : 예를 들어 Name 속성은 스트링. 또한 Status는 열거형으로 rentable, rented, returned라는 값을 가질수 있다. • 소유격에 따라 나오는 구나 형용사절은 속성이 가능성 높음 • 엔티티 객체의 경우, 시스템에 의하여 저장될 필요가 있는 것들은 모두 속성임.

  34. 6.5 동적 모델링 • 클래스들의 상호작용이나 클래스의 상태 변화 등 시스템 내부의 동작 • 동적 모델링의 세가지 다이어그램 • 인터랙션 다이어그램 • 상태 다이어그램 • 액티비티 다이어그램

  35. 순서 다이어그램 • 객체 사이의 동작을 분산시키고 오퍼레이션을 찾는데 사용 • 단일 사용사례에 대한 시스템의 동작 표현 :RentUI :Rental :Customer :VideoTape :TitleI :Clerk 1.RentVideo() 1.Create() 3.getCustomerDetail() return() 4. 고객정보 고객확인 4.바코드스캔 4.getVideoTapeDetails() 4.getTitle return() return() display() 5.getTotal() 순서 다이어그램(비디오 대여 사용사례)

  36. 상호작용 다이어그램 • 객체 간의 메시지 호출은 반드시 호출한 객체가 속하는 클래스 안에 메소드로 구현되어야 함 * Person 1..* Company employee employer +setCompensation(s: Salary) +assign(d: Department) … Assign(d: Department) P:Person :Company 메시지 호출과 오퍼레이션의 관계

  37. 상태 다이어그램 • 객체가 가질 수 있는 가능한 상태 표현 • 많은 속성값과 메시지를 가진 다이나믹한 작용을 하는 객체에게만 의미가 있음 • 시작노드를 으로 종료 노드를 표시 • 둥근 사각형은 상태를 표현 • 조건은 화살표 위에 괄호 안에 기술, 화살표는 상태의 전환 의미

  38. 상태 다이어그램 • 상태 다이어그램을 모델링하기에 적합한 속성의 조건 • 속성의 값으로 가질 수 있는 종류가 적어야 한다. • 속성의 값에 따라 허용되는 오퍼레이션이 제한되어야 한다. Athorizing [age>18] [age<=18] 그림 9.13 상태 다이어그램의 예 Athorizing Athorizing Athorizing

  39. 액티비티 다이어그램 • 시스템의 동적이 부분을 모델링하는 목적으로 사용 • 액티비티 사이의 제어흐름을 보여 주는 일종의 흐름도 • 액티비티 다이어그램의 사용 • 시스템의 수준에서 시스템과 상호작용하는 각 액터의 관점에서 모델링 • 복잡한 오퍼레이션의 수행흐름을 표현

  40. 6.6 디자인 패턴 • 프로그램 개발에 자주 등장하는 문제를 기술하고 같은 작업을 반복하여 설계하지 않고 여러 번 반복하여 사용할 수 있는 문제에 대한 솔루션을 기술한 것 • 패턴 • 여러 가지 상환에 적용될 수 있는 템플릿과 같은 것 • 문제에 대한 설계를 추상적으로 표현한 것 • 문제를 해결하려는 요소들을 일반화하여 잘 정리한 것 • 커스텀화된 객체나 클래스의 연결을 나타낸 것 • 패턴의 구성 요소 • 패턴의 이름과 구분 : 패턴을 부를 때 사용하는 이름과 패턴의 유형 • 문제 및 배경 : 패턴이 사용되는 분야 또는 배경, 해결하는 문제를 의미 • 솔루션 : 패턴을 이루는 요소들, 관계, 협동 과정 • 사례 : 간단한 적용 사례 • 결과 : 패턴을 사용하면 얻게되는 이점이나 영향 • 샘플 코드 : 패턴이 적용된 원시코드

  41. 패턴의 분류[Gamma, 1995]

  42. Factory 메소드 패턴 • 목적 • 객체를 생성하기 위한 인터페이스를 정의하기 위하여 • 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 이루어지도록 책임을 미루기 위하여 • 위임(delegation)

  43. 팩토리 메소드 패턴 • 사용 사례 class Hyundai extends Automobile { . . . Automobile createAutomobile() { return new Hyundai(); } ... }

  44. Rectangle Circle Group Line 컴포지트 패턴 • 목적 • 객체를 집합을 다루기 위하여 • 객체들의 집합이 있고 또 다시 객체들이 집합을 가지게 되는 구조를 처리 할 때 • 사례 전체 그림개체들을 하나의 group으로 간주 Group Rectangle Circle Line Line Circle Line Line Line Group Line Line Line Line Circle Line Part-Whole 구조

  45. 컴포지트 패턴

  46. 어뎁터 패턴 • 목적 • 이미 개발된 클래스(레거시 시스템이 될 수 있음)의 인터페이스를 다른 클래스의 요구에 맞게 인터페이스를 변환해주기 위하여 • 서로 호환성이 없는 인터페이스들끼리 같이 작동할 수 있게 도와주는 변환기 • 적용 • 이미 만들어져 있는 클래스를 사용하고 싶지만 인터페이스가 원하는 방식과 일치하지 않을 때

  47. 어뎁터 패턴 • 상속을 이용한 방법 • 위임을 이용한 방법

  48. 반복자 패턴 • 목적 • 유사한 객체들의 집단(예를 들면 리스트 등)을 다루기 위하여 • 시스템 속에 존재하는 여러 객체들의 집단을 모두 동일한 인터페이스를 이용하여 접근할 수 있도록 만들어 주기 위하여 • 패턴 모형

  49. Iterator LinkedList Get(int i) Add(Element *) Remove(Element *) … LinkedListIterator First() Next() CurrentItem() IsDone() BalancedTreeIterator First() Next() CurrentItem() IsDone() BalancedTree Get(Element *root, int i) AddNode(Element *, Element*) RemoveNode(Element *) … 반복자 패턴의 사례 자료구조 검색을 위한 Iterator 객체 생성 // Client Code Iterator *iter = ds->CreateIterator(); iter->First(); Element *elm = iter->CurrentItem(); while ( elm ) { total += elm->GetValue(); iter->Next(); elm = iter->CurrentItem(); }

  50. Observer 패턴 • 1대 다의 객체 의존관계를 정의한 것 • 한 객체가 상태를 변화시켰을 때 의존관계에 있는 다른 객체들에게 자동적으로 통지하고 변화시킴. 일명 publish-subscribe패턴

More Related