소프트웨어 공학 Lecture #5: 모델링 최은만 저 6차 개정판 1
학습 목표 객체지향 개념 UML 정적 모델링 동적 모델링 모델링 도구
모델링 모델링 도메인 지식을 체계화 하는 과정 중요한 도메인 개념과 특성, 관계를 파악하여 다이어그램으로 정형화 모델링 과정
5.1 객체지향 개념 모델링이 개발자에게 주는 도움 객체지향의 장점 응용문제를 이해하는 데 도움을 줌 개발팀원들 사이에 응용문제의 공통 개념으로 대화하게 하고 개선시킴 파악한 개념을 사용자와 고객에게 전달 할 때 도움을 줌 후속 작업 즉 설계, 구현, 테스팅, 유지보수에 개념적인 기준을 제공 객체지향의 장점 개발자가 설계를 작성하고 이해하기 쉬움 자료와 함수를 함께 추상화 함으로써 변화에 영향을 적게 받음 사용자 중심, 대화식 프로그램의 개발에 적합 프로그램을 뚜렷하게 구별되는 단위(object)로 분할 가능
객체지향과 절차적 방법의 비교 객체지향은 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 보며, 객체들은 서로 정보를 주고받아 상호 작용한다고 여김
클래스와 객체 클래스 : 속성과 오퍼레이션을 캡슐화 객체 : 클래스의 인스턴스
객체와 속성 객체 : 속성과 오퍼레이션을 가진 애플리케이션의 독립된 존재 속성 : 객체의 특징을 결정 객체의 구조 소프트웨어 모듈(객체) = 자료구조 + 함수 객체는 상태(state), 능력(behavior), 정체성(identity)을 가짐 상태 능력 : 연산(operation)을 수행 할 수 있는 능력 정체성 : 구별 가능성
캡슐화(Encapsulation) 캡슐화의 정의 추상화의 수단 정보은닉(information hiding) 속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것 예> 대학 학사 관리 시스템 데이터 : 학번, 이름, 주소 캡슐화 함수 : 평점 계산, 주소 변경, 수강 신청 캡슐화 추상화의 수단 객체의 속성, 오퍼레이션 등의 세부사항은 차후에 생각 정보은닉(information hiding) 캡슐 속에 있는 항목에 대한 정보를 외부에 감추는 것 외부의 직접적 접근 불가, 일종의 블랙박스 구현에 따라 선택 가능 문법 : public, private, protected
연관(association) 객체는 일반적으로 상호작용하여 동작 연관 객체에 있는 서비스를 호출하면 두 객체는 관계가 맺어져야 함 상호작용할 필요가 있는지 찾아내는 작업이 필요 연관 하나 또는 그 이상의 클래스와의 관계 예> 은행시스템과 학사업무 시스템
연관(association) 가시성(visibility) : 객체의 접근 가능성 연관을 맺은 두 객체가 서로를 알게 하고 접근하게 하는 방법 연관된 객체(Course)를 전역으로 선언하여 클라이언트 객체(Student)가 접근할 수 있게 함 연관된 객체(Course)를 클라이언트 객체(Student)의 메시지 호출 오퍼레이션의 매개변수로 만듬 연관된 객체(Course)를 클라이언트 객체(Student)의 일부로 만듬 연관된 객체(Course)를 클라이언트 객체(Student)에서 선언
집합(aggregation) 집합 관계 전체 개념(whole)과 부분 개념(part) 사이의 관계 격납(containment)의 의미 예> 디스크 트랙 섹터 class Disk { private: Track *tracks; disk information ... }; class Track { Sector sectors[MAX]; class Sector {
상속(inheritance) 상속의 의미 한 클래스가 다른 클래스의 일반화된 개념인 경우 성립 슈퍼클래스(superclass), 서브 클래스(subclass) 예> 직원 : 슈퍼클래스 , 관리자 : 서브클래스
상속(inheritance) 복수상속 (multiple inheritance) 두 개 이상의 수퍼 클래스에서 상속 받음
다형성(polymorphism) 다형성의 정의 같은 이름의 메시지를 다른 객체 or 서브클래스에서 호출 여러 형태를 가지고 있다 (=여러 형태를 받아들일 수 있다) 같은 이름의 메시지를 다른 객체 or 서브클래스에서 호출 예> getarea() 를 도형의 모양이 달라도 호출 메소드 : 특정한 클래스를 위하여 오퍼레이션을 구현 하나 이상의 메소드를 가진 오퍼레이션 매개변수나 객체가 속한 클래스의 이름으로 구분
다형성(polymorphism) 현재 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있음 getArea()의 호출 다형성의 예 getArea()의 호출 twoDShape.getArea(); Polygon Area getarea() Circle getarea() Rectangle getarea()
5.2 UML(Unified Modeling Language) 객체지향 소프트웨어를 모델링 하는 표준 그래픽 언어 시스템의 여러 측면을 그림으로 모델링 하드웨어의 회로도 같은 의미
UML의 배경과 역사 1988년부터 1992년까지 제안된 객체지향 분석 및 설계 방법 Sally Shlaer와 Steve Mellor가 저술한 두 책에서 제안된 분석 및 설계한 이 방법은 재귀적 접근 방법(recursive design)으로 발전 [Shlaer, 1997] Peter Coad와 Ed Yourdon이 제안한 프로토타입 중심의 가벼운 방법[Coad,1991a][Coad, 1991b][Coad, 1995] Smalltalk 그룹에서 제안한 의무 중심 (Responsibility-Driven) 설계 및 클래스-의무-협동 (Class-Responsibility-Collaboration) 방법[Beck, 1989] Rational Software에서 일한 Grady Booch의 방법[Booch, 1994, 1995] General Electric 연구소의 Jim Rumbaugh의 팀에서 제안한 객체 모델링 테크닉(Object Modeling Technique) 방법[Rumbaugh 1991, 1996] Jim Odell이 James Martin과 함께 정보 공학 방법론을 기초로 제안한 방법[Martin, 1994, 1996]. Ivar Jacobson이 UseCase 개념을 소개한 방법[Jacobson, 1994, 1995].
UML의 배경과 역사 UML은 OMT(Object Modeling Technique)[Rumbaugh, 1991]와 Booch[Booch,1994], OOSE(Object-Oriented Software Engineering)[Jackson, 1992] 방법의 통합으로 만들어진 표현
UML 다이어그램 시스템의 모델링은 기능적 관점, 구조적 관점, 동적 관점으로 구성
UML 다이어그램 UML 다이어그램과 모델링 다이어그램 이름 설명 모델링 적용 사용 사례 (use case) 다이어그램 클래스 업무 프로세스를 나타내는 사용사례와 액터가 정점에 표시된 그래프 간선은 어떤 액터가 업무 프로세스와 상호작용하는지 나타냄 현재 존재하는 어플리케이션이나 사용자가 개발 요구한 시스템의 업무 프로세스의 개관을 나타내는 데 사용됨 시스템 또는 서브시스템의 범위를 나타냄 클래스 정점은 클래스 방향이 있는 간선에는 클래스의 관계를 나타내는 방향성 그래프. 정점에는 클래스가 가지고 있는 속성과 오퍼레이션의 정보가 표시되어 있음 도메인 모델을 나타내는데 사용. 개발자가 도메인 개념과 이들 사이의 관계를 이해하고 전달하는 데 도움이 됨 시퀀스 정점은 객체를 나타냄. 방향성 있는 간선은 객체 사이에 오가는 메시지를 시간 순으로 나타냄 개발팀이 현재의 업무프로세스를 이해하고 분석하는 데 도움이 됨
UML 다이어그램 UML 다이어그램과 모델링 다이어그램 이름 설명 모델링 적용 상태 다이어그램 액티비티 패키지 배치 정점에는 시스템의 상태 방향이 있는 간선에는 상태의 변환을 나타낸 방향성 있는 그래프 상태 의존적이며 반응적인 시스템 또는 서브시스템의 동작을 나타내는 데 사용 액티비티 각 정점은 정보를 처리하는 작업을 나타내며 방향이 있는 간선은 자료 및 제어 흐름을 나타내는 방향성 있는 그래프. 제어흐름은 순차, 병렬, 동기화를 나타냄 시스템 또는 서브시스템의 복잡한 작업 흐름을 나타내는 데 사용됨 패키지 정점은 클래스의 묶음인 패키지, 방향이 있는 간선은 패키지의 의존관계를 나타냄 복잡한 클래스를 묶어서 서브시스템으로 조직화하는 데 사용 배치 정점은 분산 시스템의 물리적인 컴퓨팅 파워와 그 위에 실행되는 컴포넌트를 나타내며 간선은 네트워크 연결을 나타냄 배피 다이어그램은 분산 시스템의 각 컴퓨팅 노드, 컴포넌트, 커넥터 등 시스템의 물리적 자원 배치를 나타내는 데 사용됨
UML 모델링 과정 ➊ 요구를 사용 사례로 정리하고 사용 사례 다이어그램을 작성 ➋ 클래스 후보를 찾아내고 개념적인 객체 모형을 작성 ➌ 사용 사례를 기초하여 순서 다이어그램을 작성 ➍ 클래스의 속성, 오퍼레이션 및 클래스 사이의 관계를 찾아 객체 모형을 완성 ➎ 상태 다이어그램이나 액티비티 다이어그램 등 다른 다이어그램을 추가하여 UML 모델을 완성 ➏ 서브시스템을 파악하고 전체 시스템 구조를 설계 ➐ 적당한 객체를 찾아내거나 커스텀화 또는 객체를 새로 설계
UML 모델링 과정 UML 모델링 과정
UML 모델링 과정 성공적인 모델링을 위한 기타 조건 복잡한 문제라면 도메인을 잘 아는 전문가와 같이 모델링 함 각 모델의 목적을 잘 이해하고 모델링을 위하여 어떤 정보가 필요한지 잘알아둠 한번 그린 모델로 만족하지 않고 계속 논의하고 향상시켜 나감 (이를 리팩토링이라 함) 소그룹 회의를 열어 모델을 칠판에 그리고 토의 디자인 패턴을 잘 숙지하고 필요하면 이를 이용
5.3 정적 모델링 정적 모델 : 시간의 개념이 개입되지 않은 모델 클래스 다이어그램이 대표적 클래스 다이어그램의 표현 요소
5.3 정적 모델링 클래스 다이어그램 객체, 클래스, 속성, 오퍼레이션, 연관 등을 표현
클래스의 표현 클래스 심볼 속성 : 객체가 가지는 모든 필드를 포함 오퍼레이션/메소드 세 개의 부분으로 나누고 맨 위는 클래스의 이름, 중간에는 클래스의 속성, 아래 부분은 오퍼레이션을 적음 추상클래스는 이탤릭체, 인터페이스 클래스는 <<interface>>추가 속성 : 객체가 가지는 모든 필드를 포함 오퍼레이션/메소드 아주 흔한 메소드(get/set)는 생략
관계의 표현 연관(association): 객체 사이에 관련 예> Inventory와 Video 클래스 사이의 연관 관계
관계의 표현 집합(aggregation) 상속(inheritance) 어떤 클래스가 다른 클래스의 모임으로 구성 예> 자동차와 부품과의 관계 전파현상(propagation) 상속(inheritance) 일반화된 개념의 클래스와 더 구체적인 개념의 클래스 사이의 관계 일반화(generalization)
클래스 다이어그램 작성 과정 Step 1 클래스가 될 만한 후보를 파악 Step 3 클래스의 주요 임무(responsibility)를 찾아내어 오퍼레이션으로 추가
클래스 찾기 도메인 개념, 즉 사용 사례로부터 클래스가 될 만한 것을 찾는 일 클래스가 될 수 있는 요소 구조 외부 시스템 디바이스 역할 운용 절차 장소 조직 완성된 시스템에 의하여 조작되어야 할 정보
클래스 찾기 엔티티 클래스 찾기 사용 사례를 이해하기 위하여 사용자와 개발자가 명확히 규정한 용어 사용 사례에서 반복되어 나오는 용어 (예를 들면 Video Tape) 시스템이 계속 추적하여야 하는 실세계의 엔티티 (예를 들면 Rental, Title) 자료저장소 또는 단말(예를 들어 Scanner) 자주 사용하는 응용 도메인의 용어(예를 들어 Customer)
클래스 찾기 경계 클래스 찾기 사용자가 자료를 시스템에 입력하기 위하여 필요한 양식과 윈도우를 찾음 (예를 들면 RentalUI, ReportRental) 시스템이 사용자에게 반응하는 메시지나 알림을 찾음(예를 들어 PendingRentalNotice) 인터페이스가 어떻게 보이는지는 경계 객체에 모형화 하지 않음 인터페이스를 나타내는 사용자 언어는 구현 기술과 관련 없는 용어 사용 제어 클래스 찾기 사용 사례가 복잡하여 소규모의 이벤트로 분할해야 한다면 하나 이상의 사용 사례 당 1개의 제어 클래스를 찾음 사용 사례에서 액터 하나 당 하나의 제어 클래스를 찾음 제어 클래스는 사용 사례 또는 사용자 세션 안에서만 유효. 제어 클래스가 활성되는 시점과 끝이 명확하지 않다면 사용 사례가 명확히 파악되지 못한 것
연관 찾기 연관(association) : 연관의 속성 어떤 클래스의 인스턴스가 작업을 수행하기 위하여 다른 클래스를 알아야 함 연관의 속성 이름 - 두 클래스 사이의 연관 관계를 나타냄 역할 - 연관 관계의 양쪽 끝에 있는 클래스의 기능을 나타냄 다중도 - 연관 관계를 구성하는 인스턴스의 개수
연관 찾기 비디오 대여 시스템에 대한 클래스들의 관계
속성 추가 속성 : 개별 객체들이 가지는 특성 속성의 요소 이름 - 객체 안에서 구별할 수 있는 속성의 이름. 예를 들어 VideoTape은 PurchaseDate와 Supplier 속성을 가짐. PurchaseDate은 테이프를 구매한 날짜이며 Supplier는 비디오 공급업체를 나타냄 간단한 설명 - 구현하는 프로그래머를 위하여 간단히 설명을 첨가 속성값의 타입 - 예를 들어 Name 속성은 스트링. 또한 Status는 열거형으로 rentable, rented, returned라는 값을 가질 수 있음
클래스 다이어그램 작성 항공권 예매 시스템 클래스 다이어그램 작성
클래스 다이어그램 작성 항공권 예매 시스템 클래스 다이어그램 작성
클래스 다이어그램 작성 항공권 예매 시스템 클래스 다이어그램 작성
클래스 다이어그램 작성 항공권 예매 시스템 클래스 다이어그램 작성
5.4 동적 모델링 동적 모델링 : 클래스들의 상호작용이나 클래스의 상태 변화 등 시스템 내부의 동작을 모델링 동적 모델링의 세가지 다이어그램 인터랙션 다이어그램 : 사용 사례를 실현시키기 위하여 내부 클래스들 이 어떻게 협동하는지 나타내는 그림 상태 다이어그램 : 복잡한 객체의 상태 변화를 나타낸 것 액티비티 다이어그램 : 절차나 작업의 흐름을 나타낸 것
시퀀스 다이어그램의 요소 시스템의 동작을 정형화하고 객체들의 메시지 교환을 울타리 형태로 시각화하여 나타낸 것 참여객체(participating object)
시퀀스 다이어그램의 요소
시퀀스 다이어그램 작성 Step 1. 참여하는 객체를 파악 Step 2. 파악한 객체를 X축에 나열하고 라이프라인을 그음 을 화살표로 나타냄
상태 다이어그램 객체가 가질 수 있는 가능한 상태 표현 이벤트 : 서브시스템 또는 객체나 컴포넌트에 대하여 요청이나 관심이 일어난 것 상태 : 이벤트의 발생으로 들어가거나 빠져 나오게 되는 서브시스템 또는 객체의 조건을 추상적으로 이름 붙여 놓은 것
상태 다이어그램 예> 비디오 대여 시스템의 비디오테이프 객체의 상태 변화 모델링
상태 다이어그램 상태 다이어그램을 모델링하기에 적합한 속성의 조건 속성의 값으로 가질 수 있는 종류가 적어야 함 속성의 값에 따라 허용되는 오퍼레이션이 제한되어야 함 Athorizing [age<=18] [age>18] 그림 5.33 상태 다이어그램의 예
액티비티 다이어그램 시스템의 동적이 부분을 모델링하는 목적으로 사용 액티비티 사이의 제어흐름을 보여 주는 일종의 흐름도 액티비티 다이어그램의 사용 시스템의 수준에서 시스템과 상호작용하는 각 액터의 관점에서 모델링 복잡한 오퍼레이션의 수행흐름을 표현
액티비티 다이어그램 예> 비디오 대여 시스템의 비즈니스 프로세스
액티비티 다이어그램 예> 주문처리 시스템
5.5 모델링 도구 많이 알려진 모델링 도구 IBM의 Rational Modeler, 마이크로소프트의 Visio, ArgoUML, StarUML, NetBeans UML 플러그인 예> StarUML
5.5 모델링 도구 UML 도구의 기능 프로젝트 관리 코드 및 문서 생성 모델 검사 다이어그램과 코드를 모델별로 그루핑하여 프로젝트 별로 보관하고 불러냄 서브시스템이나 패키지별로 그루핑 프로젝트의 내용은 주로 하나의 파일로 관리하지만 여러 팀으로 나누어 작업하기 위하여 유닛별로 쪼개어 관리 코드 및 문서 생성 사용자가 템플릿을 정의하고 템플릿을 이용하여 문서를 일괄 생성 StarUML의 경우 텍스트 문서만이 아니라 엑셀, 프레젠테이션 파일도 만듬 모델 검사 연관의 이름이 고유한지, 순환적 상속이 없는지, 동일한 속성이 없는지 등의 규칙을 가지고 모델을 자동 검증
Questions?