UML(Unified Modeling Language)

- 시스템을 시각화하거나 시스템의 사양이나 설계를 문서화하기 위한 표현방법이다.



클래스 다이어그램

- 클래스나 인스턴스, 인터페이스 등의 정적인 관계를 표현한 것.



 클래스 다이어그램(Class Diagram)은 시스템의 정적인 상태인 논리적인 구조(클래스)를 표현합니다. Class, Interface, Collaboration 간의 관계를 나타내며, 객체지향 개발에서 가장 공통적으로 많이 사용합니다. 클래스 다이어그램을 구성하는 것은 클래스와 관계입니다. 

 

 클래스 다이어그램은 다음과 같은 특징을 가집니다.

  1. 시스템의 요구사항에 표현된 작업 즉, 시스템이 처리해야 하는 작업에 대한 책임을 분할
  2. 모델은 점점 증가되며 관련된 클래스들 끼리 패키지화
  3. 클래스를 너무 작게 쪼개거나 기능을 너무 많이 포함하면 안되며 적절한 방법으로 구현

 클래스 다이어그램은 시스템의 정적 설계도인 Class Diagram과 시스템의 프로세스도인 Actice Class Diagram으로 구분할 수 있습니다.

 

 

 

 

클래스(Class)

 

 클래스를 구성하는 것은 클래스명, 속성, 메소드입니다. 모든 클래스는 다른 클래스들과 구별되는 유일한 이름을 갖습니다. 클래스명은 단순명과 경로명 두 가지 중 하나를 선택할 수 있습니다. 단순명(Simple Name)은 클래스 이름만 표기하는 방법이고, 경로명(Path Name)은 패키지명을 포함하여 표기하는 방식입니다.

 

 속성은 의미 있는 명사형으로 표현합니다.

Visibility Name: Type= Default Value

+ variableName: byte

 

 Visibility는 접근제한자를 나타내며 표기법은 다음과 같습니다.  

표기법

접근제한자

+

public

-

private

#

protection

 

 메소드는 의미 있는 동사형으로 표현하며 표기법은 다음과 같습니다.

Visibility Name(Parameter-List): Return-Type Expression!

 

예)

+ methodName (int param): int

  

클래스 표기법

 

 클래스 표기법에 스테레오 타입(Stereo-Type)을 붙일 수 있는데, 스테레오 타입이란 UML의 한정된 모델 요소를 가지고 새로운 어휘를 표현하기 위한 방법입니다. 메소드 명 위에 아래의 예처럼 스테레오 타입을 붙이면 해당 메소드는 생성자라는 것을 표기하는 것입니다. 

 

<<constructor>>

 

 이런 방법으로 클래스명 위에 인터페이스나 추상 클래스임을 나타낼 수 있습니다.

 

 

 

 

관계(RelationShip)

 

 관계는 모델 요소 간의 논리적 또는 물리적인 연결을 의미하며, 여러 객체의 유기적인 관계를 통해 시스템이 실행됩니다.

 

 

1. 의존관계(Dependency)

 

 'Using' 관계를 나타내며, 하나의 모델 요소가 다른 모델 요소를 사용하는 관계를 말합니다. 사용되는 모델 요소가 변경되면 사용하는 요소가 영향을 받지만, 역은 성립되지 않습니다. UML 표기법은 점선으로 된 화살표로 표현합니다. 화살표의 방향은 사용하는 쪽에서 사용되는 쪽으로 향합니다.

 

 

 예제는 프로그래머 클래스가 사용하는 쪽이고 컴퓨터 클래스가 사용되는 쪽입니다. 사용되는 클래스가 사용하는 클래스의 메소드 파라미터로 사용되는 경우, 사용되는 클래스가 사용하는 클래스의 메소드 로컬 변수로 사용되는 경우, 사용되는 클래스가 사용하는 클래스의 전역 변수로 사용되는 경우입니다.

 의존 관계는 has a 관계를 가지는 클래스들 간에 변수나, 메소드의 파라미터의 사용을 가지는 클래스의 관계를 표시합니다.

 

 

2. 일반화(Generalization)

 

 여러 클래스가 가진 공통적인 특징을 추출하여 공통적인 클래스를 일반화시키는 것을 의미하며, 반드시 클래스간의 'is a' 관계이어야 합니다. 객체지향의 상속 관계를 의미합니다.

 

 

 추상클래스(Abstract) 는 이탤릭체나 스테레오 타입으로 표시합니다.

 

 

3. 연관관계(Association)

 

  클래스로부터 생성된 인스턴스들 간의 관계를 표현합니다. 의존관계와 일반화 관계는 단순히 클래스들 간의 관계를 나타내며, Classifire로부터 생성된 인스턴스 사이의 관계를 나타냅니다. 상대방의 인스턴스를 가리킬 수 있는 속성을 가지며, 참조할 수 있는 속성은 UML 상에서 표현하지 않습니다. 표현하고자 할 경우 Role name을 사용합니다. 연관관계가 가리킬 수 있는 방향의 종류는 양방향과 단방향이 있습니다.

 

 

 

[ 인스턴스의 표기법 ]

표기법

인스턴스의 수

1

1개

0..1

0개 또는 1개

*

다수

1..*

1개 또는 다수

 

 

4. 집합연관관계(Aggregation)

 

 전체와 부분을 나타내는 모델요소(whole-part)로 전체를 나타내는 클래스와 이를 이루고 있는 부분 클래스의 관계를 나타냅니다.'has a' 관계를 나타내며 집합연관관계는 전체와 부분은 서로 독립적인 관계를 나타냅니다. 

 

 

 

5. 복합연관관계(Composition)

 

 전체와 부분을 나타내며(Whole-part), 젠체를 나타내는 클래스와 이를 이루고 있는 부분 클래스 관계를 나타냅니다. 연관관계를 맺고 있는 클래스는 생명주기기 같다. 'has a'관계입니다.

 

 

 

6. 실체화, 권력화(Realization)

 

 인터페이스는 컴포넌트 간의 결합력을 느슨하게 합니다.(Loose Coupling) 인터페이스는 프로그램의 수정 없이 쉽게 소프트웨어를 확장할 수 있습니다.

 

 

 

※ 클래스 다이어그램 UML 작성시 주의점

  1. 클래스 다이어그램은 'is a'관계를 나타냅니다.
  2. 일반화 관계는 균형있게 유지해야 합니다.
  3. 선들이 교차하지 않도록 주의해야 합니다.
  4. 이해하기 쉬운 정도로 간략하게 표시합니다.
  5. 관련 있는 클래스들은 가까운 곳에 배치합니다


출처 : http://blog.daum.net/question0921/946(알아가는 IT)