전공과목 정리/소프트웨어분석및설계

[소프트웨어분석및설계🛠️] 7장 객체지향방법론 - (2) 정적·동적 모델링

최연재 2024. 10. 8. 00:25

출처 : 강의 교안, 시스템분석설계 with 애자일 (생능출판사, 최은만)

 

1. 정적 모델링

1.1 구조적 모델

1) 구조적 모델

- 시스템 내부의 관점

  • 구조의 관점
  • 어떤 구성요소가 있고, 이들이 어떤 관계를 맺고 있는지 표현
  • 시간이 흐르더라도 변하지 않는 정적 구조

- 새로운 문제 도메인의 중요한 클래스를 발견하기 위함
- 비즈니스에서 사용되는 용어들을 이용하여 객체들을 정의함으로써, 실 세계와 소프트웨어의 의미적 차이를 줄이는 작업
- 개발 대상 소프트웨어가 어떤 구조적 요소들로 이루어질 수 있는지 분석
- 모델링 과정 : 겍체식별 ➡️ CRC 카드 ➡️ 클래스 다이어그램
 
 

2) 객체 식별

- UML에서 정의하는 클래스

  • 클래스명, 클래스 속성, 클래스 연산 3요소로 구성
  • 클래스 간의 상관성을 클래스의 관계로 나타냄

- 식별 방식
1️⃣ 문장 분석
2️⃣ 일반 객체 목록
3️⃣ 브레인스토밍
4️⃣ 패턴 적용
 

3) CRC(Class-Responibility-Collaborator) 카드 

- 클래스 명세 : CRC 카드 활용
- 클래스가 어떤 책임을 가져야 하는지 찾아내는 데 사용하는 카드
 

4) 클래스 다이어그램

: 식별된 모든 클래스를 CRC 카드에 명세한 후 클래스 다이어그램 작성

요소 의미
클래스
속성
오퍼레이션
클래스 : 타입
속성, 오퍼레이션 : 클래스와 객체의 특징 결정
상속 두 클래스의 일반화-상세화 관계
집합 두 클래스 사이의 전체-부분 관계
연관
역할, 다중도
연관 클래스
두 클래스 사이의 관계

연관을 나타내는 클래스

1.2 클래스

1) 클래스

- 시스템이 처리해야 할 자료(속성)와 그 자료와 관련된 오퍼레이션을 정의한 작은 모듈
 

2) 속성

- 클래스로 추상화된 모든 객체들이 갖는 속성
- 시스템에 의해 저장될 필요가 있는 것들
 

3) 오퍼레이션

- 객체를 생성/소멸, 속성에 접근/링크, 조건에 의해 선택 반복처리, 자료변환 등을 수행
- 동작을 정의하기 때문에 동적 모델링을 통해 찾게 됨.
- 기본 오퍼레이션 

  • 정보은닉으로 인해 감춰진 것에 접근할 수 있도록 함
  • 클래스 다이어그램에서는 생략
  • 객체 생성자, 속성 쓰기, 속성 쓰기, 객체 소멸자

- 조건 체크  : 객체의 속성값이 특정한 값인지 체크
- 탐색과 조작
- 입출력 연산

  • 객체 안의 값을 외부에서 입력받아 저장
  • 객체 안의 값을 화면이나 프린트로 보냄

 

1.3 관계

1) 관계

- 클래스는 홀로 존재하지 않고 서로 관련되어 있음
- UML 관계

  • 연관 (association)
  • 일반화 (generalization)
  • 집합 (aggregation)
  • 합성 (composition)
  • 실체화 (realization)
  • 의존성 (dependency)

 

2) 연관관계

- 인스턴스들 사이의 연결을 나타내기 위한 클래스들 사이의 관계 (semantic 관계)
- 연관관계는 이름을 갖는다.
 

3) 연관관계의 다중도

- 다중도 (multiplicity)는 한 클래스의 인스턴스에 연관된 다른 클래스의 인스턴스 개수

* 다수 (1 or more)
1 정확히 1개
2..4 2개 ~ 4개
3..* 3개 이상
  • 연관을 나타내는 선의 끝에 역할 (role) 표시
  • 방향성 (navigability) : 질의의 방향, 객체 사이의 선으로 표시하며 양쪽 방향인 경우에는 화살 표시 없음.

 

4) 연관클래스의 회귀 연산

- 연관에 참여하는 두 클래스의 추가 데이터를 갖는 클래스

- 회귀 연산 : 같은 클래스의 인스턴스 사이에 존재하는 연관

5) 연관의 검사

- 조건 : 무조건적인지, 관련되지 않아도 되는 것인지
- 정확한 클래스와 역할
 

6) 일반화 관계

- 클래스들이 속성과 오퍼레이션을 공유하는 점과 다른 점이 동시에 있을 때
- 슈퍼클래스 - 서브클래스 관계
 

7) 집합과 합성관계

- 집합 (aggregation) 관계

  • 다른 클래스의 인스턴스를 자신의 속성으로 가짐
  • 약한 whole-part 관계

- 합성 (composition) 관계

  • 강한 whole-part 관계
  • whole 클래스 인스턴스가 소멸되는 시점에 part 클래스 인스턴스도 자동으로 소멸시켜야 함.

 
 

1.4 클래스 다이어그램

1) 속성의 표현

- [visibility] 속성이름: 타입 = 초기값

  • 다른 속성에 의해 파생된 속성은 앞에 '/' 표시
  • 파생된 속성 : 저장되지 않고 다른 속성값으로부터 계산되는 것 

 

2) 오퍼레이션의 표현

- [visibility] name(parameters) : return_type

  • 클래스가 실행될 수 있는 액션

 
💙 UML의 visibility 표현

  • +
    •  public
    • 외부 객체가 해당 멤버에 대해 접근
    •  private
    • 내부 오퍼레이션만 해당멤버에 접근 가능
  • #
    • protected
    • 내부 오퍼레이션과 상속 관계에 있는 오퍼레이션만이 해당 멤버에 접근

 

3) 클래스 다이어그램의 작성법

- 반복적인 과정 : 개념적 ➡️ 명세적 ➡️ 구현

  • 개념적 모델링 : 간단히 중요한 클래스의 존재와 관계만 표현
  • 명세적 모델링 : 구현에 필요한 자료구조, UI, 데이터베이스, 통신에 필요한 클래스 포함

🚶‍➡️ 클래스 후보를 발견하기 위한 출발점
: 실세계에 존재하는 개념이나 개체로 시스템 구현에 필요한 것을 찾아내는 것
 
(1) 클래스 찾기
- 클래스 찾기

  • 문제정의나 유스케이스 명세로부터 
  • 사물의 이름이나 명사(구)

- 클래스로 적당하지 않은 것 배제

  • 중복 클래스 ex. 고객-구매자
  • 불화실한 클래스 ex. 보안

(2) 연관 찾기
- 연관관계 : 문제정의에서 찾을 수 있는 것과 도메인 지식에서 찾을 수 있는 것
- 문제 정의에 없는 것 찾기
 
(3) 속성 찾기
- 속성(attribute) :  개별 객체들이 가지는 특성

  • 객체의 논리적인 데이터 값
  • 연관관계로 표현된 것 또는 클래스에 의해 이미 표현된 특징은 속성이 아님.

(4) 클래스 다이어그램 작성
 

4) 다른 다이어그램과의 관계

- 클래스 다이어그램의 여러 요소는 다른 다이어그램에 상호보완적으로 표현된다.

  • 클래스나 속성 : 기능 모델 (문제 정의, 유스케이스)
  • 연관 : 시퀀스 다이어그램 (객체 사이의 메세지)
  • 오퍼레이션 : 상태 다이어그램 (상태를 변화시키는 이벤트들)

- 다이어그래밍 도구들에 의한 자동 체크 가능 ➡️ 모델의 신뢰도 향상
- 추가하여 점증적으로 완성해 나가는 과정이 필요
 

2. 동적 모델

2.1 동적 모델

- 시간의 흐름에 따른 시스템의 여러 요소의 변화를 나타냄.
- 문제 영역 안에 있는 중요한 객체들이 유스케이스를 지원하기 위해 어떻게 서로 협력하는지를 나타냄.
- 동적 모델을 통해 클래스들 사이이 연관과 오퍼레이션을 발견할 수 있음.
- 동적 모델링의 주요 다이어그램

  • 인터랙션 다이어그램 : 사용사례 실현을 위해 내부 클래스들이 어떻게 협동하는지 표현
    • 시퀸스 다이어그램 (Sequence Diagram) 
    • 커뮤니케이션 다이어그램
  • 상태 다이어그램 (State Diagram) : 단일 객체의 관점에서 객체의 상태 변화를 표현
  • 액티비티 다이어그램 (Activity Diagram) : 절차나 작업의 흐름을 표현

 

2.1 시퀀스 다이어그램

1) 시퀸스 다이어그램

- 단일 유스케이스에 대한 시스템의 동작 표현

  • 유스케이스에 참여하는 객체를 찾고, 유스케이스의 동작을 객체의 서비스 형태로 표현하는 데 사용
  • 유스케이스가 상세화되고, 더 많은 객체와 오퍼레이션을 발견

 
- 시퀸스 다이어그램

  • 시스템의 동작을 정형화하고 객체들의 메시지 교환을 시각화
  • 이벤트의 순서를 위에서 아래로 명시

 
- 시퀸스 다이어그램의 표현 방법

  • Left-most line은 유스케이스를 구동시킨 액터
  • 메시지는 화살표로 표현 (화살표 위에 메시지의 이름과 매개변수 기입)
  • 각 라인은 상호작용에 참여하는 객체들
  • 수직선(점선)은 위에서 아래로 시간의 흐름을 표현
  • 메소드의 활성은 수직 사각형으로 수직선 위에

 

2) 객체와 파이프라인

- 상호작용에 참여하는 객체의 종류와 객체의 생존 기간을 의미
- 객체이름 명명 규칙

  • 객체이름 : 클래스 이름
문법 의미
o o라는 이름의 객체
o:C 클래스 C에 속하는 o라는 이름의 객체
:C 클래스 C에 속하는 무명의 객체

 

3) 메시지 표현

- sender 객체의 라이프라인부터 receiver 객체의 라이프라인까지 표시
- 제어범위 표시

  • 객체의 라이프라인 위에 수직막대로 표시
  • 객체가 언제 액티브한지 알 수 있음.

- 메시지 종류

  • 동기식 : 메시지를 보내는 객체가 결과가 완성되어 리턴될 때까지 기다리는 방식
  • 비동기식 : 메시지를 보낸 후 다른 작업 수행
  • 생성 (creation) : receiver 객체를 생성시키는 메시지
  • 응답 (reply) : receiver 객체로부터 제어가 돌아옴을 표현 

4) 프레임

- 복잡한 것을 계층화

  • 가드 : [condition]의 형태로 조건/반복의 control을 표시
  • 조건: : alt와 opt
  • 반복 (iteration) : loop로 표시
  • 병렬 : 병렬 수행을 처리하는 동작

5) 시퀀스 다이어그램 작성

- 시퀸스 다이어그램 작성 방법 

  • 시스템의 사용자와 시스템 사이의 상호작용을 내부 관점으로 자세히 모델링
  • 하나의 유스케이스에 대해 여러 개의 인스턴스 다이어그램이 존재 ➡️ 종합 다이어그램 하나로 표현

- 초기 시퀸스 다이어그램 작성을 위해 분석 클래스 유형을 사용할 수 있음.
- 분석 클래스 유형 (analysis stereotypes)
: 분석 초기에 시스템에 대한 개념 모델을만들기 위해 주로 사용되는 클래스들

  • 엔티티(entity) 클래스
  • 경계(Boundary) 클래스
  • 제어(Control) 클래스

 
(1) 엔티티 클래스
- 계속 추적해야 할 자료가 들어 있는 클래스
- 주로 시스템이 속한 업무 영역에 관계된 클래스이므로 도메인 클래스(domain class)라고도 함.
- 문제기술서(problem statement)로부터 직접 추출되는 클래스
- 실세계의 개체(Entity)를 반영하는 것으로서 시스템 내부의 일을 수행
 
(2) 경계 클래스
- 인터페이스를 생성하기 위해 사용되는 클래스
- 시스템 외부의 액터와 상호작용하는 클래스로 사용자 인터페이스를 제어하는 역할
- 액터와 연결된 시스템의 인터페이스 표현
- 각 유스케이스에서 액터는 적어도 하나의 경계 클래스와 대화하게 됨.
 
(3) 제어 클래스
- 경계 클래스와 엔티티 클래스 사이의 중간 역할
- 시스템에서 발생되는 일의 흐름을 제어하는 역할을 하는 클래스
- 이벤트의 순서를 결정하고 조정
- 일반적으로 액터별 시나리오마다 흐름을 제어하기 위한 컨트롤 클래스를 추가
- 경계 클래스로부터 정보를 받아 엔티티 클래스에 전달
- 유스케이스에서 액터 하나당 하나의 제어 클래스를 찾음
 

2.3 상태 다이어그램

1) 상태 다이어그램

- 객체의 상태 사이의 흐름, 즉 변화를 표현
- 상태 다이어그램은 시스템의 정상적인 작동 흐름을 결정하는데 도움이 됨.
- 많은 속성값과 메시지를 가진 dynamic한 작용을 하는 객체에게만 의미가 있음.
 

2) 상태 다이어그램의 요소

- 상태 : 객체가 갖는 특정 값
- 이벤트 : 객체가 어떤 상태에서 다른 상태로 변하게 만드는 것으로 메시지를 주고받음으로써 발생
- 상태의 전환 (transition) : 객체가 옮겨질 미래의 상태와 상태 변화에 관련된 조건
 

3) 상태 다이어그램 표현

- 상태 : 둥근 사각형
- 상태 변환 : 화살표

  • 상태 사이의 이동이나 이벤트에 대한 반응

- 조건 : 시작상태와 종료상태
 

4) 상태와 상태 전환

- 외부 이벤특 어떤 액티비티를 구동시키면 시스템 안의 요소들에 대한 변화가 나타남.
- 상태

  • 대상이 갖는 생명주기이 한 시점
  • 액션이 수행되거나 이벤트를 기다림
  • 단순형 & 복잡형
  • 여러 개의 시작 상태와 종료 상태를 가질 수 있음.

- 상태 전환

  • 상태 전환을 가져온 이벤트는 화살표 위에 기록

- 이벤트는 객체의 상태를 다른 상태로 옮기는 일종의 트리거
 

5) 액션

- 상태 전환을 유발하는 레이블 표현 방식

  • 특정 event가 주어진 guard condition 하에서 발생하는 슬래시(/) 다음의 Action을 수행하고 상태를 전환

- 상태 안의 액션 표현방법 : Action-label / Action
- 액션의 구동 방법

  • Entry : 상태에 진입할 때 액션이 구동됨.
  • Do : 상태 안에서 액션이 수행됨.
  • Exit : 상태에서 빠져나가기 바로 전에 액션이 실행됨.

- Action-label은 Entry, Do, Exit 중 하나
 
 

2.4 모델 검증

- 일관성 분석을 통하여 설계의 결함을 찾아내고 품질을 높이려는 작업
- 완전성 체크, 모순이 없는지 체크
- 설계 과정에 들어가기 전, 분석 결과물에 대한 일관성 점검 실시
- 기능 모델과 구조 모델

  • 기능 모델의 유스케이스 설명서와 CRC 카드 간의 일관성을 점검
  • 모든 클래스의 이름은 반드시 유스케이스 설명서의 어딘가에 나타나야 함.

- 구조 모델과 행위 모델

  • 상태기계 다이어그램은 클래스의 인스턴스와 매핑
  • 순차 다이어그램에서 객체 간에 전달되는 메시지는 반드시 클래스의 연산으로 정의되어야 함.