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

[소프트웨어분석및설계🛠️] 7장 객체지향방법론 - (1) 기능 모델링

최연재 2024. 9. 8. 14:14

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

 

1. 객체지향 기술 개요

1.1 객체지향 기술 개요

1) 1970년대

- 프로그램을 여러 개 작은 부분으로 쪼개 개발하는 구조적 개발 방법론 이용

- 프로그램의 논리와 데이터를 분리해서 소프트웨어를 설계 ➡️ 개발단계별로 자연스럽게 연결되지 않고, 유지보수 비용이 이 많이 발생

 

⭐ 객체지향 개발방법론 등장

: 인간이 사고하는 방식대로 프로그램을 개발하려는 노력으로 탄생

 

2) 1990년대

: 여러 SW 기술 중 가장 중요한 기술로 인식

  • SW 위기 현상이 객체지향 기술로 인해 해결될 수 있다는 공감대 형성
  • 소프트웨어 생산 기술의 초점이 프로그래밍에서 분석, 설계로 옮겨지며 더욱 주목받음
  • 개발생산성을 높이는 방법을 제공
  • 일관된 소프트웨어 개발 모델 제공

3) 객체지향 기술

- 구조적 개발 방법 : 조그만 변화에도 영향이 크다.

- 함수와 자료를 함께 객체로 추상화 ➡️ 변화에 영향을 덜 받음

- 장점

  • 추상화, 정보 은닉 등 설계 원리에 충실
  • 복잡함을 잘 다룰 수 있음.

- 특징

  • 뚜렷하게 구별되는 단위인 객체(object)로 분할
  • 코드 재사용에 의하여 생산성을 높임
  • 빠른 속도로 적용, 산업계 표준화

 

2. 객체지향의 개념

2.1 객체지향 방법론의 핵심 개념

1) 객체지향 방법론

- 현실세계의 개체(entity)를 속성과 메소드로 결합시킨 객체 형태로 표현하는 개념

- 객체 간의 메시지 통신을 통해 시스템을 구현하는 개발 방법

 

2) 객체지향의 기본 원리

- 캡슐화, 정보 은닉

- 상속 (Inheritance)

- 다형성 (Polymorphism)

- 추상화

 

3) 객체 (Object)

- 현실세계에 존재하거나 생각할 수 있는 개념을 표현

- 객체가 되기 위해서는

  • 상태를 가져야 한다.
    • 객체가 가지는 자료 값이 상태를 표현함
    • 시간이 흐르면서 변할 수 있다.
  • 잘 정의된 오퍼레이션이 있어야 한다.
    • 객체의 오퍼레이션은 동작을 결정
    • 객체 외부에서 요구할 때 오퍼레이션을 호출
  • 고유한 Identity가 있어야 한다.
    • 객체를 구별할 수 있는 수단

 

4) 클래스 (class)

- 공통의 속성과 행위를 가진 객체를 묶어 추상화한 개념

- 인스턴스 (instance) : 클래스에서 파생된 하나의 실제 객체 

- object = instances of classes

 

5) 클래스와 객체

- 클래스는 개념적인 의미, 객체는 구체적인 의미

- 한 클래스에서 생성된 객체들은 같은 속성과 같은 연산에 대한 정의를 가짐.

 

2.2 객체지향의 원리

1) 상속 (Inheritance)

- 객체지향 패러다임만이 갖는 고유 특성

- 클래스 간의 계층 구조를 통해 상위 클래스의 모든 특징을 물려받는 것

- 이미 정의한 클래스를 재사용하고, 확장할 수 있도록 지원

 

2) 캡슐화 (encapsulation)

- 객체에 대한 외부로부터의 접근을 제한

- 관련된 항목을 모아서 하나의 단위로 취급하는 것

- 객체 내부의 변경이 시스템 전체에 주는 영항을 최소한으로 억제

 

3) 데이터 은닉 (information hiding)

- 캡슐화와 비슷한 개념으로 객체의 상세한 내용을 객체 외부로부터 숨김

- 메시지를 통한 객체들 간의 상호작용

  • 외부에서 알아야 할 내용만 공개, 나머지는 숨김
  • 대상을 단순화시킬 수 있음
  • 독립성, 유지보수성, 이식성

- 객체지향 언어의 접근제어 방식으로 구현 : public/private/protected

 

4) 다형성 (polymorphism)

- 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 data type에 속하는 것이 허용되는 성질

- 서로 다른 객체가 동일한 메시지에 대해 서로 다른 방법으로 응답할 수 있는 기능

  • overriding : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
  • overloading : 같은 이름의 메소드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

🎁 추상화 (abstraction)

- 대상의 특정한 목적에 관련된 정보에 집중하기 위해, 중요하고 관련 있는 부분만을 추출해 간결하게 기술하는 것

- 보는 관점(view)에 따라 사물이나 정보의 중요성이 달라지므로 여러가지 관점(perspective)에 따라 설명

 

 

3. 객체지향 개발의 특징

3.1 반복적인 프로세스

: 소프트웨어 생명 주기를 반복하여 적용하도록 제안

 

3.2 솔기 없는 프로세스

: 프로세스를 구성하는 간 단계 간의 경계선이 불분명

 

3.3 상향식 접근 고려

cf) 구조적 방법론 : 하향식 (Top down) 프로세스 사용

 

3.4 재사용을 고려

cf) 구조적 방법론 : 성공적인 소프트웨어 산출물을 만들고자 하는 개발 공정에 치중

 

4. 기능 모델링

4.1 기능 모델링

1) 기능 모델링

- 기능을 정리하고 표현하는 기법

- 소프트웨어 개발자가 최종 프로덕트에 대한 비전을 사용자와 함께 공유

- 현재 시스템을 기능의 관점에서 파악하여 새로운 시스템의 전반적인 밑그림을 그리는 작업

- 프로토타입, 유스케이스(표현의 명확성과 간편함 확보 가능), 자연어 등을 이용

 

2) 유스케이스 기반의 분석 작업

- 유스케이스 다이어그램의 내용을 유스케이스에서 자세하게 작성

- 유스케이스 시나리오는 테스트 시나리오를 정의하는 효과적인 방법

- 비즈니스 프로세스를 파악하여 소작업을 액티비티

- 작성한 기능적 모델은 사용자 요구에 맞는지 검토 필요

 

3) 유스케이스 작성 목적

- 외부 액터에 의해 인식되는 시스템의 기능과 요구사항을 보여주기 위함

- 시스템의 범위를 정하는 데 도움이 됨

- 개발 과정을 계획한느 데 사용

- 요구사항을 개발하고 정의하는 기초

- 사용자 매뉴얼을 구성하는 데 사용될 수 있음 

 

4.2 유스케이스

1) 유스케이스 (Use Case, 사용사례, 쓰임새)

- 외부에서 본 시스템의 뷰

- 시스템에 무슨 서비스가 있는지 사용자의 관점으로 본 것

- 시스템과 외부 액터(actor) 사이의 목표 지향적(goal-oriented) 인터랙션의 집합

- 유스케이스 : 일반적인 이벤트의 흐름을 모아 놓은 것

- 유스케이스 다이어그램 : 유스케이스의 인스턴스

 

2) 유스케이스 시나리오 작성 이유

- 유스케이스  파악 : 유스케이스는 개별 시나리오의 모임 ➡️ 유스케이스를 쉽게 파악 가능

- 테스트에 도움 : 시나리오 순서에 따라 값을 입력하고 시스템의 반응 확인

 

4.3 유스케이스 다이어그램

; 구성요소 = 액터 + 유스케이스 + 관계

 

1) 액터

- 시스템으로부터 서비스를 받을 필요가 있는 외부 요소

- 사람이 할 수 있는 역할, 시스템, 기관, 조직 등

- 시스템에 입력을 주고 출력을 받는 외부 요소

  • 시스템의 주된 사용자
  • 시스템과 상호작용하는 다른 시스템
  • 시스템의 출력에 관심을 갖는 요소

 

2) 유스케이스

- 액터에게 서비스를 제공하기 위해 시스템이 수행하는 중요 프로세스

- 유스케이스 이름은 작업을 의미함.

- 단일 유스케이스가 여러 액터에 의해 구동될 때

  • 작업의 흐름이 동일 ➡️ 같은 유스케이스
  • 이벤트 흐름이 다름 ➡️ 다른 유스케이스

 

3) 유스케이스 다이어그램의 관계

- 연관관계 (association)

  • 커뮤니케이션 관계로 유스케이스와 액터 사이의 관계
  • 액터와 유스케이스 사이에 상호작용이 있음을 표현
  • 유스케이스들 사이에서는 연관관계가 나타나면 안 된다. 

- 의존관계 (dependency) : 유스케이스들 사이의 관계

  • 포함관계
    • 공통의 유스케이스를 별도로 정의
    • base 유스케이스를 실행하기 위해 반드시 included 유스케이스가 실행되어야 한다.
  • 확장관계
    • 존재하는 유스케이스의 동작을 조건적으로 확장
    • 이벤트의 추가나 예외적인 케이스
  • 일반화관계 (generalization) 
    • 유스케이스 - 유스케이스
    • 액터 - 액터 

- 일반화관계 (generalization) 

  • 유스케이스 - 유스케이스
  • 액터 - 액터 

4..4 유스케이스 작성

; 유스케이스 안의 동작을 글로 서술 (상호작용을 더욱 자세히 작성)

 

1) 유스케이스 사건 흐름

- 기본 흐름

  • 유스케이스의 여러 시나리오 중 가장 일반적이고 정상적인 상황을 나타내는 하나의 이벤트 흐름

- 대안 흐름 (Alternative Flow)

  • 한 유스케이스에서 기본 흐름이 표현하는 상황을 제외한 모든 다른 상황
  • 수행이 끝나면 기본 흐름으로 돌아오는 경우도 있고, 대안 흐름에서 종료되는 경우도 있음
  • 선택 흐름과 예외 흐름

 

5. 시스템의 동작을 이해하기

5.1 시스템의 동작 이해하기

- 분석 단계에 워크플로우를 표현하는 방법

  • 액티비티(activity)는 비즈니스 작업(프로세스)을 나타낸다.
  • 액티비티 사이의 제어흐름을 보여주는 흐름도로 워크플로우 표현

- 객체지향 모델링에서는 액티비티 다이어그램

- 액티비티 다이어그램의 사용

  • 시스템 수준 : 시스템과 상호작용하는 각 액터의 관점에서 모델링
  • 메소드 수준 : 복잡한 오퍼레이션의 수행흐름을 표현

 

5.2 액티비티 다이어그램

액션/액티비티 액션 : 분할할 수 없는 동작
액티비티 : 액션의 집합 
시작/종료 액션이나 액티비의 시작과 모든 액티비티 종료
흐름종료 특정 제어흐름이나 객체 흐름이 종료
선택/병합 선택 : 제어흐름이 흘러가기 위한 테스트 조건
병합 : 여러 경로가 하나로 합해지는 것
포크/조인 포크 : 액티비티의 흐름이 병렬적으로 수행됨
조인 : 액티비티의 병렬흐름이 다시 합해지는 시점
객체 노드 객체 흐름에 연결된 객체
제어 흐름 실행의 순서를 나타냄
객체 흐름 한 액티비티에서 다른 액티비티로 객체의 흐름
스윔레인 액티비티의 수행을 담당하는 역할에 따른 분할 선