본문 바로가기

자격증 준비/정보처리기사필기 - 1과목(소프트웨어 설계)

[정보처리기사 필기] 1과목 정리 - UML

728x90
반응형

모델링과 모델

모델링을 하는 이유

  • 복잡함을 잘 관리하기 위해
  • 형체가 없는 소프트웨어의 구조를 시각화 하기 위해
  • 다른 사람과 커뮤니케이션 하기 위해
  • 문제 도메인 및 제품 요구 사항을 이해하기 위해
  • 개발 중인 시스템을 이해하기 위해
  • 구현하기 전에 잠재적 솔루션을 실험해보기 위해
  • 기존 시스템의 문서화

요구 모델링

  • 고객과 개발자가 무엇이 개발되고 있는지에 동의하는 것을 주된 목적으로 하는 요구 명세를 생성
  • 시스템에 대한 형식적 또는 준형식적 설명을 제공

모델 사이의 관계

 

모델링 방법 - 절차적 방법

  • 미리 정해둔 순서대로 동작

모델링 방법 - 객체지향 방법

  • 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 봄
  • 객체들은 서로 정보를 주고 받아 상호 작용

 

UML(Unified Modeling Language)

객체지향 소프트웨어를 모델링 하는 표준 그래픽 언어

  • 시스템의 여러 측면을 그림으로 모델링
  • 하드웨어의 회로도 같은 의미

구성요소

 

정적 사물

  • 클래스(Class)
    • 동일한 속성, 오퍼레이션, 관계, 의미를 공유하는 객체를 기술한 것
    • 속성과 오퍼레이션을 캡슐화
    • 특징
      • 캡슐화(Encapsulation)
        • 속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것
      • 정보은닉(Information Hiding)
        • 캡슐 속에 있는 항목에 대한 정보를 외부에 감추는 것
        • 외부의 직접적 접근 불가, 일종의 블랙박스
        • 객체지향 언어에서 public, private, protected 등 사용
    • 클래스를 통해 같은 속성을 가진 독립된 객체를 생성함

  • 인터페이스(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) 다이어그램

출처 :&nbsp;https://www.uml-diagrams.org/

  • 클래스 및 클래스 사이의 관계를 표현
  • 클래스 종류
    • 엔티티(Entity) 클래스
      • 사용 사례를 이해하기 위하여 사용자와 개발자가 명확히 규정한 용어
      • 사용 사례에서 반복적으로 나옴
      • 시스템이 계속 추적해야하는 실세계의 엔티티 -> 자료저장소, 단말
      • 자주 사용하는 응용 도메인의 용어
    • 경계(Boundary) 클래스
      • 사용자가 자료를 시스템에 입력하기 위하여 필요한 양식과 윈도우
      • 시스템이 사용자게 반응하는 메시지나 알림
    • 제어(Control) 클래스
      • 사용 사례가 복잡하여 소규모의 이벤트로 분할해야 할 때 하나 이상의 사용 -> 사례 당 1개의 제어 클래스를 찾을 수 있음
      • 사용 사례에서 액터 하나 당 하나의 제어 클래스를 찾을 수 있음
      • 사용 사례 또는 사용자 세션 안에서만 유효
  • 도메인 개념과 속성
  • 클래스 간의 관계는 연관, 집합, 상속이 있음
  • 실제 프로그래밍 언어에서 사용하는 추상 클래스, 인터페이스 등을 표현 가능

정적 모델링 - 컴포넌트(Component) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 소프트웨어를 물리적으로 어떻게 구현할 것인지를 정의하여 모델링하는 것
  • 시스템을 구성하는 물리적인 컴포넌트와 그들 사이의 의존관계를 나타냄
    • 컴포넌트, 인터페이스, 의존관계로 표현
  • 작성 순서
    • 1. 컴포넌트 대상 정의
    • 2. 컴포넌트 식별
    • 3. 컴포넌트 배치
    • 4. 의존 관계 정의

정적 모델링 - 배치(Deployment) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 네트워크, 하드웨어 또는 소프트웨어들을 실행 파일 수준의 컴포넌트와 함께 표현 한 것
    • 노드와 노드 간의 커넥션을 나타냄
  • 노드
    • 프로세서나 디바이스들에 대한 사항 표현
  • 커넥션 
    • 네트워크 특성이나 프로토콜 등 표현

정적 모델링 - 패키지(Package) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 패키지 - 다이어그램의 요소(클래스나 유스케이스)들을 그룹화 한 것
    • 그룹화 요소는 탭이 달린 폴더 아이콘으로 나타냄
  • 패키지 간의 관계(의존)를 표현함
    • 한쪽이 export 한것을 다른 한쪽이 import 하여 사용
  • 패키지 안에 여러가지를 포함할 수 있음
    • 패키지
    • 클래스 다이어그램
  • 패키지를 다른 패키지와 합병할 수 있음
  • 여러가지 스테레오 타입(<<>>)
    • <<facade>> - 다른 패키지에 뷰를 제공해주는 패키지
    • <<framework>> - 주로 패턴으로 구성된 패키지
    • <<stub>> - 다른 패키지의 공용 내용물에 대한 대리자 역할을 수행하는 패키지
    • <<subsystem>> - 전체 시스템의 독립된 일부분을 나타내는 패키지
    • <<system>> - 전체 시스템을 나타내는 패키지

동적 모델링

  • 동적 측면
    • 소프트웨어가 실행될 때 변경 될 수 있는 뷰
    • 시간의 함수로만 이해
    • 예 : 객체 간 상호작용 패턴
  • 정적 다이어그램을 보완
  • 상호작용 다이어그램
    • 시퀀스 다이어그램

동적 모델링 - 유스케이스(Use-case) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 사용자의 요구사항을 유스케이스로 표현하고 사용자와 유스케이스의 상호작용을 표현한 것
  • 유스케이스(Use-case) - 시스템 내부에 해당되는 단위 기능
  • 액터(Actor) - 개발할 시스템 외부의 존재
  • 유스케이스와 유스케이스, 액터와 액터, 액터와 유스케이스 간의 여러가지 관계
    • 연관(Association)
      • 일반적인 관계
    • 확장(Extend)
      • 의존 관계로 표시
      • 상위 유스케이스로부터 어떠한 특정 조건에 의해 수행되는 관계
    • 포함(Include)
      • 의존 관계로 표시
      • 하나의 유스케이스를 수행할 때, 같은 기능이 있는 다른 유스케이스가 반드시 수행되는 관계
    • 일반화(Generalization)
      • 액터의 중복을 줄여줌
      • 상속의 관계

동적 모델링 - 순차(Sequence) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것
  • 구성 요소
    • 객체(Object) - 메시지를 송수신하는 객체
    • 메시지(Message) - 객체 간 연결 기능을 담당
    • 회귀 메시지(Self-Message) - 같은 객체에 대한 함수(메서드)를 호출
    • 제어 블록(Control Block) - 제어문을 위한 루프
    • 답신 메시지(Statement Block) - 이전 호출의 반환을 기다리는 객체에 다시 반환 되는 메시지

동적 모델링 - 통신(Communication) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 객체 사이에 주고받는 메시지를 표현
  • 주어진 문제를 해결하는 데 필요한 객체를 정의, 객체 간의 동적인 상호관계를 순서에 따라 정의
  • 구성 요소
    • 객체(Object) - 메시지를 주고 받는 주체(클래스, 임의의 객체, 이름 있는 객체)
    • 링크(Link) - 객체 사이를 연결, 화살표가 없는 실선
    • 메시지(Message) - 링크를 통해 다른 객체에 전하는 설명, 링크위에 표시, 순서를 표시

동적 모델링 - 활동(Activity) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 오퍼레이션이나 처리 과정이 수행되는 동안 일어나는 일들을 단계적으로 표현

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/
출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 표현 방법
    • 시작점(initial node) - 활동 다이어그램의 시작
    • 종료점(final node) - 활동 다이어그램의 종료
    • 활동 및 전이 - 활동은 둥근 사각형, 전이는 화살표로 표현
    • 분기(decision node) - 마름모로 표현하고 조건에 따라 전이
    • 동기화 막대(fork node) - 동기화 막대를 사용해 동시 처리의 시작과 끝을 나타냄
    • 신호(Signal) - 활동 사이에 이루어지는 거래
      • 송신 시그널 
      • 수신 시그널
      • 시간 시그널
    • 구획면(Swim Lane) - 가로 혹은 세로 방향으로 그려지는 영역, 각 활동 상태의 주체를 나타냄
      • 구획면에 이름을 기술 함

동적 모델링 - 상태(State) 다이어그램

출처 :&nbsp;&nbsp;https://www.uml-diagrams.org/

  • 특정 객체 내부의 자세한 동작을 기술하거나 시스템 전체의 자세한 동작을 기술하는 데 이용함
  • 객체가 가질 수 있는 상태에 대해, 상태별로 수신된 메시지에 대해 어떤 동작을 보일지 기술
  • 표현 요소
    • 상태 - 객체가 존재할 수 있는 조건 중 하나, 모서리가 둥근 사각형으로 표시, 안에 상태 이름 기술
    • 전이 - 객체의 상태가 자극으로 인해 다른 상태로 변경되는 것, 실선으로 표현하고 화살표 표시
    • 이벤트 - 객체의 전이를 유발하는 자극, 실선 위에 <<>>안에 이벤트 이름을 표시
    • 확장 표기법 - 상태를 표기할 때 두 영역으로 나누어 표시, 위에는 상태 이름(필수 사항), 아래는 활동(선택)
  • 용도
    • 객체 상태 변화를 상세히 분석함
    • 이벤트에 의한 객체의 반응을 분석
    • 객체의 속성이나 동작을 검증

 

모델 검증

  • 리뷰 - 워크스루(Walkthroughs), 인스펙션 등 사람이 눈으로 직접 확인
  • 테스팅 - 모델에 근거하여 테스트 데이터를 찾아내고 구현 후 테스팅
  • 정형적 방법 - 수학적으로 모델의 일관성을 증명
  • 프로토타이핑 - 모델 기반 프로토타입을 제작하여 검증
  • 요구 추적 - 모델로 부터 요구를 거꾸로 추적

일관성 체크

  • 유스케이스 다이어그램과 시퀀스 다이어그램
    • 유스케이스에 대한 명세가 기술되어 있고 매칭되는 시쿼스 다이어그램이 있는지 체크

  • 시퀀스 다이어그램 안에 포함된 클래스와 메시지가 클래스 다이어그램에 빠지지 않고 표현되었는지 체크

  • 상태 다이어그램과 클래스 다이어그램을 크로스 체크
728x90
반응형