컴퓨터(Computer Science)/소프트웨어공학(Software engineering)

프로젝트 계획(9) - 정적 모델링(Modeling) + UML [소프트웨어공학]

게임이 더 좋아 2020. 4. 22. 02:01
반응형
728x170

이제야 정말 UML로 모델링을 해보려고 한다.

UML에 대해서 알아보자

 


UML이란 Unified Modeling Language로 객체지향 모델을 표현하는 방법 중 하나이다.

다시 말하면 객체지향 소프트웨어를 모델링 하는 표준 그래픽 언어라고 할 수 있다.

 

++UML은 객체지향 설계 표현방법의 표준으로 알려져있다.

 

UML은 시스템의 설계 뿐만 아니라 시스템의 여러가지 측면을 모델링하여 나타낼 수 있다.

 

클래스를 상세히 기술하는 것만은 이해하기 충분하지 않다.

모델링으로 여러 클래스가 어떻게 연관되어 있고 필요한 기능을 제공하기 위하여

어떻게 상호작용 하는지 이해할 수 있다. UML은 이를 가능케 한다.

 

회로도(좌) UML(우)

위의 그림처럼 표현하는 방식이다.


그렇다면 저 오른쪽 UML 그림은 뭘까?

 

역시 그림이 제일 이해하기 쉽다. 글보다 이해하기 쉽다.

그러니까 UML도 그림을 쓴다. UML 다이어그램이다.

 

UML을 이용한 시스템의 모델링은 크게 3가지 관점이 있다.

1. 기능적 관점

2. 구조적 관점 

3. 동적 관점

 

그림으로 말하자면 이렇게 된다.

 

기능적 관점은 사용자 측면에서 본 시스템의 기능을 나타낸다.

++주로 요구 분석 단계에 사용하는 사용 사례 다이어그램으로 표현(use case)

 

나머지 모델은 시간의 개념이 포함되어 있느냐에 따라 달라진다.

 

동적 모델을 딱 봐도 시간모델이 있는 모델같고 실제로 시간 개념이 있다.

즉 특정한 시각에 시스템의 동작을 사진으로 찍어 놓은 것처럼 나타내는 것이 특징이다.

 

** 시간마다 실행하는 기능이 다를 것이고, 기능을 실행할 때 연관있는 객체들도 다를 것이다.

이는 동적 모델로 쉽게 파악 가능하다.

 

정적 모델은 역시나 시간적 개념이 없다.

주로 시스템의 구조척 측면을 나타낸다. 

 

뒤에서 조금 더 자세히 배울 거지만 살짝만 뭔지 설명하고 넘어가자면

 

정적 모델(static model)은 객체, 클래스, 속성, 연관 관계, 오퍼레이션, 패키지, 컴포넌트 등으로 시스템의 구조를 나타낸다. 

ex 클래스 다이어그램, 패키지 다이어그램, 배치 다이어그램

 

동적 모델(dynamic model)은 시스템의 내부 동작을 나타낸다.

ex) 시퀀스 다이어그램, 상태 다이어그램, 액티비티 다이어그램 등이 그렇다. 

 

말해도 모르겠지?

 

조금만 더 알아보고 넘어가자

 

 

 

어차피 더 자세히 배울거다.

 


?? 이러한 그러면 모델링을 한다는 것은 알겠는데 어떻게 한다는 걸까?

 

UML 모델링 과정에 대해 알아보자

 

모델링 작업이 무엇인지 근본을 알아보자면 시스템에 있어야 할 클래스와 그들의 관계를 찾아내는 것이다.

++클래스 다이어그램으로 하면 된다. 그렇지만!! 충분하진 않다.

 

 

정적인 측면을 나타내는 클래스 다이어그램만으로는 모든 관계를 표현하기 어렵다. 

그래서 다양한 측면의 모델링이 분석과 설계 단계에 이루어진다.

 

다양하지만 그래도 가장 일반적으로 쓰인다는 과정을 살펴보자

 

1. 요구를 사용 사례로 정리하고 사용 사례 다이어그램을 작성함
2. 클래스 후보를 찾아내고 개념적인 객체 모형을 작성함
3. 사용 사례를 기초하여 순서 다이어그램을 작성함
4. 클래스의 속성, 오퍼레이션 및 클래스 사이의 관계를 찾아서 객체 모형을 완성함 
5. 상태 다이어그램이나 액티비티 다이어그램 등 다른 다이어그램을 추가하여 UML 모델을 완성함 
6. 서브시스템을 파악하고 전체 시스템 구조를 설계함
7. 적당한 객체를 찾아내거나 커스텀화 또는 객체를 새로 설계함

 

?? 이런 과정만 하면 모델링이 잘 나오나???

 

그렇지 않다. 여러가지를 고려해야 한다.

 

1. 복잡한 문제라면 도메인을 잘 아는 전문가와 같이 모델링 함
2. 각 모델의 목적을 잘 이해하고 모델링을 위하여 어떤 정보가 필요한지 잘알아둠
3. 한번 그린 모델로 만족하지 않고 계속 논의하고 향상시켜 나감 (Refactoring)

4. 소그룹 회의를 열어 모델을 칠판에 그리고 토의함
5. 디자인 패턴을 잘 숙지하고 필요하면 이를 이용함

 

** 기능은 유지한 채 구조를 효율적으로 바꾸는 것을 Refactoring이라고 한다.

 


모델링 어떻게 할지를 알았다.

그렇다면 위에서 말한 3가지 관점을 차례로 알아보자

먼저 정적 모델링부터 알아보자

 

시간적 개념이 없는 모델링으로 대표적으로 클래스 다이어그램이 있다고 말했다.

 

주로 클래스 다이어그램으로 시스템의 도메인 개념을 나타낼 때 사용한다.

 

**클래스는 객체들의 공통 구조와 동작들을 추상화시킨 것이다. 

 

클래스 다이어그램을 그리는 작업은 응용문제를 개념화 하는 과정이라 할 수 있는데

개념화에 핵심단계는 분류 단계다. 

분류는 2가지 방향으로 이루어지는데

1. 확장형(extensional)
2. 내재형(intentional)

 

*확장형은 개별 사례의 공통점을 찾아 인식하는 것

*내재형은 일반적인 개념의 속성, 동작들을 안에서 파악하여 적용하는 것

 

 

 

 

 

클래스 다이어그램의 표현 요소들을 보자면

 

**서브 클래스가 슈퍼클래스를 가리키는데 ->를 "~이다" 라고 해석하면 딱 알맞다.

ex) 남자는 손님이다. 손님이 슈퍼클래스고 남자가 서브클래스 인것 확실하게 알 수 있다.

 

**집합에서 하얀 마름모 약한 관계 (aggregation), 까만 마름모 강한관계 (composition)

 

** 객체들 사이에서 메세지 교환이 있으면 연관이 있다고 본다.

++ [m], [m] 다중도를 뜻한다. [역할1],[역할2] 서로의 무슨 역할을 하는지

 

저렇게 보니까 감이 잘 안온다.

우리는 예시의 민족이니까 예를 한 번 보자

 

 

 

++ 1과 *은  1 :를 뜻한다. (다중도)

 

++exist 와 has는 서로의 역할

 

++Adult와 Child는 Customer와 상속관계

 

 


위에서 클래스를 표현했는데 항상 3칸 다 차있는 것도 아니고 잘 모르겠다

그래서 이번엔 클래스를 알아보자

 

클래스 심볼 (Class Symbol)


그림처럼 박스를 세 개의 부분으로 나누고

맨 위는 클래스의 이름, 중간에는 클래스의 속성, 아래 부분은 오퍼레이션을 적는다

속성이란  객체가 가지는 모든 필드를 포함

 

** 속성과 오퍼레이션의 이름 앞에 표시한 + - # 기호는 클래스의 외부 투명성을 나타내기 위한 심볼이다.

** '+' public   '-' private  '#' 상속된 클래스에서만 제한적 사용// 접근 제한자라고 보자

 

 

그런 클래스에도 종류가 3가지가 있다.

순서대로

1. 일반 2. 추상 3. 인터페이스

 

 

++ 추상클래스는 인스턴스가 없다. 추상 오퍼레이션은 구현이 없다.

** 추상클래스는 이탤릭체, 인터페이스 클래스는 <>추가

 


정적 모델링은 클래스끼리 관계를 나타내기 위해서 한다고 했는데 

관계는 어떻게 다를까?

 

앞서 그림에 봤다시피 클래스 간의 관계는

1. 연관 2. 집합 3. 상속

3가지가 있다.

 

그림과 같이 보면서 이해하자

 

 

 

연관(association)
 객체 사이의 관련을 말하는 것으로

클래스의 인스턴스가 다른 클래스의 인스턴스로 메세지를 전달하는 관계라고 할 수 있다.


예를 들면 Inventory와 Video 클래스 사이의 연관 관계

** 다중도(multiplicit) 이 단어 많이 나온다

 

 

 

집합(aggregation)
 어떤 클래스가 다른 클래스의 모임으로 구성


예를 들면 자동차와 부품과의 관계

 

자동차와 자동차 부품은 집합 관계이다.

**Vehicle을 삭제하면 Door도 삭제된다

**전체쪽에 마름모가 붙는다 

 

 

 

상속(inheritance)
일반화된 개념의 클래스와 더 구체적인 개념의 클래스 사이의 관계

다른 말로는 일반화(generalization) 라고 한다.

 

상속은 여러 클래스들 사이에 공통적인 속성과 오퍼레이션을 나타낼 수 있게 한다.

아까 말했듯이 화살표는 "~이다" 라고 해석해보면 된다. 

++ 화살표는 슈퍼 클래스(super class)를 가리킨다.

 

 

 

 

** 클래스 다이어그램 같은 분석 모델은 구현에 초점을 두지 않는다.

 

 

다음에 이어서 작성을 어떻게 하는지 진짜 알아보자

 

 

 

728x90
반응형
그리드형