728x90
반응형
모델링과 모델
모델링을 하는 이유
- 복잡함을 잘 관리하기 위해
- 형체가 없는 소프트웨어의 구조를 시각화 하기 위해
- 다른 사람과 커뮤니케이션 하기 위해
- 문제 도메인 및 제품 요구 사항을 이해하기 위해
- 개발 중인 시스템을 이해하기 위해
- 구현하기 전에 잠재적 솔루션을 실험해보기 위해
- 기존 시스템의 문서화
요구 모델링
- 고객과 개발자가 무엇이 개발되고 있는지에 동의하는 것을 주된 목적으로 하는 요구 명세를 생성
- 시스템에 대한 형식적 또는 준형식적 설명을 제공
모델 사이의 관계
모델링 방법 - 절차적 방법
- 미리 정해둔 순서대로 동작
모델링 방법 - 객체지향 방법
- 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 봄
- 객체들은 서로 정보를 주고 받아 상호 작용
UML(Unified Modeling Language)
객체지향 소프트웨어를 모델링 하는 표준 그래픽 언어
- 시스템의 여러 측면을 그림으로 모델링
- 하드웨어의 회로도 같은 의미
구성요소
정적 사물
- 클래스(Class)
- 동일한 속성, 오퍼레이션, 관계, 의미를 공유하는 객체를 기술한 것
- 속성과 오퍼레이션을 캡슐화
- 특징
- 캡슐화(Encapsulation)
- 속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것
- 정보은닉(Information Hiding)
- 캡슐 속에 있는 항목에 대한 정보를 외부에 감추는 것
- 외부의 직접적 접근 불가, 일종의 블랙박스
- 객체지향 언어에서 public, private, protected 등 사용
- 캡슐화(Encapsulation)
- 클래스를 통해 같은 속성을 가진 독립된 객체를 생성함
- 인터페이스(Interface)
- 특정 클래스나 컴포넌트의 전체 또는 일부 동작을 나타냄
- 원으로 표현하고 그 아래 인터페이스 명 표시 또는 클래스 형식으로 표현
- 스테레오 타입(<<>>) 사용
- 통신(Communication)
- 서로 다른 요소와 역할이 모여 교류를 정의
- 하나가 다수의 통신에 참여 가능
- 컴포넌트(Component)
- 전체 시스템을 구성하는 단위로 독립적으로 개발되고 배포되며 조립, 교환이 가능한 응집도가 높은 소프트웨어 산출물
- 점진적 개발 방식에 이용함
- 패키지(Package)
- 요소를 그룹으로 묶음, 정적 사물이나 동적 사물도 패키지 하나에 들어갈 수 있음
- 패키지 종류 - <<framework>>, <<subsystem>>, <<facade>> 등
- 노드(Node)
- 실행할 때 존재하는 물리적 요소
- 컴포넌트가 노드에 존재
- 노드에서 노드로 이동 가능
동적 사물
- 교류(Interaction)
- 동작이며, 목적을 달성하기 위해 특정 문맥에 속한 객체들 간에 주고 받는 메시지로 구성
- 객체 간 메시지, 활동 순서(메시지로 호출되는 동작), 객체 간의 연결 등을 표현하는 데 사용
- 유즈케이스(Use-case) == 요구 사항
- 시스템이 수행하는 활동들을 순차적으로 기술
- 액터에게 의미 있는 결과 값을 제공
- 동적 사물을 통신으로 실현
- 상태머신(State Machine)
- 외부 이벤트에 대한 객체의 상태와 상태의 변화 순서를 기술
- 상태 전이 - 상태에서 다른 상태로의 흐름
- 사건 - 전이를 유발하는 것
- 활동 - 전이에 따른 응답
주해 사물
- 노트(Note)
- 첨부되는 주석 또는 제약을 기술
- 정형, 비정형 문장으로 가장 잘 표현되는 제약과 주석을 다이어그램에 달아줌
- 노트의 변형으로 모델 외부 관점에서 모델에 바라는 동작을 기술하는 요구 사항이 있음
의존 관계
- 의존(Dependency)
- 두 사물 간의 의미적 관계로, 한 사물의 명세가 바뀌면 다른 사물에 영향을 줌
- 한 사물의 명세가 바뀌면 다른 사물에 영향을 줌(단! 반드시 반대가 성립하는 것은 아님)
- 한 클래스가 다른 클래스를 오퍼레이션의 매개변수로 사용하는 경우에 주로 나타남
연관 관계
- 연관(Association)
- 객체 사이의 연결 관계, 지속적으로 유지되는 관계
- 두 클래스가 연관 관계가 되면 한쪽 객체에서 다른 객체로 옮겨갈 수 있고 반대도 가능함
- 클래스에서 사용법
- 공용(public) + : 클래스 외부에서도 접근이 됨
- 보호(protected) # : 하위 클래스로부터의 접근이 가능함
- 전용(private) - : 클래스 내부에서만 접근이 가능함
- 패키지(package) ~ : 소속된 동일 패키지로부터 접근이 가능
- 이름
- 연관의 의미를 설명하기 위해 사용
- 의미가 모호 하지 않도록 방향성을 추가할 수 있음
- 읽히기 원하는 방향으로 삼각형 표기
- 역할
- 클래스가 연관에 참여하면 그 클래스가 수행해야 하는 특별한 역할이 있음
- 이 역할에 명시적으로 이름 붙힐 수 있음
- 다중성
- 한 연관에 참여하는 객체 하나에 객체가 몇 개 연결되어 있는지 알리는 것
- (1..*)이나 명시적인 값으로 표현
- 집합 연관
- 순수한 연관 - 두 클래스가 개념적으로 동일한 수준
- 전체와 부분 관계를 모델링할 때는 한 클래스가 더 큰 것을 대표하고 더 작은 것들로 이루어짐
- has-a 관계라고도 함
- 전체 쪽 객체 하나가 부분쪽 객체들을 소유하는 것
일반화 관계
- 일반화(Generalization)
- 한 가지 종류를 의미 kind-of 관계
- ex) 상속 -> {동물}과 {사자, 호랑이, 원숭이}의 관계
실체화 관계
- 실체화(Realization)
- 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정하는 의미적 관계
- 일반적으로 인터페이스와 인터페스에 오퍼레이션이나 서비스를 제공하는 클래스나 컴포넌트 사이의 관계를 지정하기 위해 사용
다이어그램
요소들과 사물 간의 관계를 그래프로 나타낸 것
크게 정적, 동적 다이어 그램으로 나뉨
모델링 과정
- 1. 요구를 유스케이스로 정리하고 유스케이스 다이어그램 작성
- 2. 클래스 후보를 찾고 개념적인 도메인 모델을 작성
- 3. 유스케이스를 기초하여 시퀀스 다이어그램을 작성
- 4. 클래스의 속성, 오퍼레이션 및 클래스 사이의 관계를 찾아 도메인 모델을 완성
- 5. 상태 다이어그램이나 액티비티 다이어그램 등 다른 다이어그램을 추가하여 UML 모델을 완성
- 6. 서브시스템을 파악하고 전체 시스템 구조를 설계
- 7. 적당한 객체를 찾아내거나 커스텀화 또는 객체를 새로 설계
정적 모델링
정적 모델
- 객체들의 공통 구조와 동작들을 추상화 시킨 것
객체지향 기본 개념의 이해가 필요
- 객체와 속성, 연관, 집합, 상속, 다형성
클래스 다이어그램이 대표적
- 클래스 및 클래스 사이의 관계를 표현
- 도메인 개념과 속성
정적 모델링 - 클래스(Class) 다이어그램
- 클래스 및 클래스 사이의 관계를 표현
- 클래스 종류
- 엔티티(Entity) 클래스
- 사용 사례를 이해하기 위하여 사용자와 개발자가 명확히 규정한 용어
- 사용 사례에서 반복적으로 나옴
- 시스템이 계속 추적해야하는 실세계의 엔티티 -> 자료저장소, 단말
- 자주 사용하는 응용 도메인의 용어
- 경계(Boundary) 클래스
- 사용자가 자료를 시스템에 입력하기 위하여 필요한 양식과 윈도우
- 시스템이 사용자게 반응하는 메시지나 알림
- 제어(Control) 클래스
- 사용 사례가 복잡하여 소규모의 이벤트로 분할해야 할 때 하나 이상의 사용 -> 사례 당 1개의 제어 클래스를 찾을 수 있음
- 사용 사례에서 액터 하나 당 하나의 제어 클래스를 찾을 수 있음
- 사용 사례 또는 사용자 세션 안에서만 유효
- 엔티티(Entity) 클래스
- 도메인 개념과 속성
- 클래스 간의 관계는 연관, 집합, 상속이 있음
- 실제 프로그래밍 언어에서 사용하는 추상 클래스, 인터페이스 등을 표현 가능
정적 모델링 - 컴포넌트(Component) 다이어그램
- 소프트웨어를 물리적으로 어떻게 구현할 것인지를 정의하여 모델링하는 것
- 시스템을 구성하는 물리적인 컴포넌트와 그들 사이의 의존관계를 나타냄
- 컴포넌트, 인터페이스, 의존관계로 표현
- 작성 순서
- 1. 컴포넌트 대상 정의
- 2. 컴포넌트 식별
- 3. 컴포넌트 배치
- 4. 의존 관계 정의
정적 모델링 - 배치(Deployment) 다이어그램
- 네트워크, 하드웨어 또는 소프트웨어들을 실행 파일 수준의 컴포넌트와 함께 표현 한 것
- 노드와 노드 간의 커넥션을 나타냄
- 노드
- 프로세서나 디바이스들에 대한 사항 표현
- 커넥션
- 네트워크 특성이나 프로토콜 등 표현
정적 모델링 - 패키지(Package) 다이어그램
- 패키지 - 다이어그램의 요소(클래스나 유스케이스)들을 그룹화 한 것
- 그룹화 요소는 탭이 달린 폴더 아이콘으로 나타냄
- 패키지 간의 관계(의존)를 표현함
- 한쪽이 export 한것을 다른 한쪽이 import 하여 사용
- 패키지 안에 여러가지를 포함할 수 있음
- 패키지
- 클래스 다이어그램
- 패키지를 다른 패키지와 합병할 수 있음
- 여러가지 스테레오 타입(<<>>)
- <<facade>> - 다른 패키지에 뷰를 제공해주는 패키지
- <<framework>> - 주로 패턴으로 구성된 패키지
- <<stub>> - 다른 패키지의 공용 내용물에 대한 대리자 역할을 수행하는 패키지
- <<subsystem>> - 전체 시스템의 독립된 일부분을 나타내는 패키지
- <<system>> - 전체 시스템을 나타내는 패키지
동적 모델링
- 동적 측면
- 소프트웨어가 실행될 때 변경 될 수 있는 뷰
- 시간의 함수로만 이해
- 예 : 객체 간 상호작용 패턴
- 정적 다이어그램을 보완
- 상호작용 다이어그램
- 시퀀스 다이어그램
동적 모델링 - 유스케이스(Use-case) 다이어그램
- 사용자의 요구사항을 유스케이스로 표현하고 사용자와 유스케이스의 상호작용을 표현한 것
- 유스케이스(Use-case) - 시스템 내부에 해당되는 단위 기능
- 액터(Actor) - 개발할 시스템 외부의 존재
- 유스케이스와 유스케이스, 액터와 액터, 액터와 유스케이스 간의 여러가지 관계
- 연관(Association)
- 일반적인 관계
- 확장(Extend)
- 의존 관계로 표시
- 상위 유스케이스로부터 어떠한 특정 조건에 의해 수행되는 관계
- 포함(Include)
- 의존 관계로 표시
- 하나의 유스케이스를 수행할 때, 같은 기능이 있는 다른 유스케이스가 반드시 수행되는 관계
- 일반화(Generalization)
- 액터의 중복을 줄여줌
- 상속의 관계
- 연관(Association)
동적 모델링 - 순차(Sequence) 다이어그램
- 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것
- 구성 요소
- 객체(Object) - 메시지를 송수신하는 객체
- 메시지(Message) - 객체 간 연결 기능을 담당
- 회귀 메시지(Self-Message) - 같은 객체에 대한 함수(메서드)를 호출
- 제어 블록(Control Block) - 제어문을 위한 루프
- 답신 메시지(Statement Block) - 이전 호출의 반환을 기다리는 객체에 다시 반환 되는 메시지
동적 모델링 - 통신(Communication) 다이어그램
- 객체 사이에 주고받는 메시지를 표현
- 주어진 문제를 해결하는 데 필요한 객체를 정의, 객체 간의 동적인 상호관계를 순서에 따라 정의
- 구성 요소
- 객체(Object) - 메시지를 주고 받는 주체(클래스, 임의의 객체, 이름 있는 객체)
- 링크(Link) - 객체 사이를 연결, 화살표가 없는 실선
- 메시지(Message) - 링크를 통해 다른 객체에 전하는 설명, 링크위에 표시, 순서를 표시
동적 모델링 - 활동(Activity) 다이어그램
- 오퍼레이션이나 처리 과정이 수행되는 동안 일어나는 일들을 단계적으로 표현
- 표현 방법
- 시작점(initial node) - 활동 다이어그램의 시작
- 종료점(final node) - 활동 다이어그램의 종료
- 활동 및 전이 - 활동은 둥근 사각형, 전이는 화살표로 표현
- 분기(decision node) - 마름모로 표현하고 조건에 따라 전이
- 동기화 막대(fork node) - 동기화 막대를 사용해 동시 처리의 시작과 끝을 나타냄
- 신호(Signal) - 활동 사이에 이루어지는 거래
- 송신 시그널
- 수신 시그널
- 시간 시그널
- 구획면(Swim Lane) - 가로 혹은 세로 방향으로 그려지는 영역, 각 활동 상태의 주체를 나타냄
- 구획면에 이름을 기술 함
동적 모델링 - 상태(State) 다이어그램
- 특정 객체 내부의 자세한 동작을 기술하거나 시스템 전체의 자세한 동작을 기술하는 데 이용함
- 객체가 가질 수 있는 상태에 대해, 상태별로 수신된 메시지에 대해 어떤 동작을 보일지 기술
- 표현 요소
- 상태 - 객체가 존재할 수 있는 조건 중 하나, 모서리가 둥근 사각형으로 표시, 안에 상태 이름 기술
- 전이 - 객체의 상태가 자극으로 인해 다른 상태로 변경되는 것, 실선으로 표현하고 화살표 표시
- 이벤트 - 객체의 전이를 유발하는 자극, 실선 위에 <<>>안에 이벤트 이름을 표시
- 확장 표기법 - 상태를 표기할 때 두 영역으로 나누어 표시, 위에는 상태 이름(필수 사항), 아래는 활동(선택)
- 용도
- 객체 상태 변화를 상세히 분석함
- 이벤트에 의한 객체의 반응을 분석
- 객체의 속성이나 동작을 검증
모델 검증
- 리뷰 - 워크스루(Walkthroughs), 인스펙션 등 사람이 눈으로 직접 확인
- 테스팅 - 모델에 근거하여 테스트 데이터를 찾아내고 구현 후 테스팅
- 정형적 방법 - 수학적으로 모델의 일관성을 증명
- 프로토타이핑 - 모델 기반 프로토타입을 제작하여 검증
- 요구 추적 - 모델로 부터 요구를 거꾸로 추적
일관성 체크
- 유스케이스 다이어그램과 시퀀스 다이어그램
- 유스케이스에 대한 명세가 기술되어 있고 매칭되는 시쿼스 다이어그램이 있는지 체크
- 시퀀스 다이어그램 안에 포함된 클래스와 메시지가 클래스 다이어그램에 빠지지 않고 표현되었는지 체크
- 상태 다이어그램과 클래스 다이어그램을 크로스 체크
728x90
반응형
'자격증 준비 > 정보처리기사필기 - 1과목(소프트웨어 설계)' 카테고리의 다른 글
[정보처리기사 필기] 1과목 정리 - 아키텍처 스타일 (0) | 2022.12.31 |
---|---|
[정보처리기사 필기] 1과목 정리 - 설계 (0) | 2022.12.30 |
[정보처리기사 필기] 1과목 정리 - 요구사항 분석 (0) | 2022.12.26 |
[정보처리기사 필기] 1과목 정리 - 방법론 (0) | 2022.12.24 |
[정보처리기사 필기] 1과목 정리 - 프로세스 모델 (0) | 2022.12.23 |