2014년 12월 6일 토요일

[UML] Class Diagram [클래스 다이어그램]

Class Diagram(클래스 다이어그램) 예제


UML 클래스 다이어그램 예제
UML 클래스 다이어그램 예제

Class Diagram은 소프트웨어의 정적 요소인 클래스들간의 관계를 보여주는 Structure Diagram이다.


Class


UML 클래스 다이어그램 : 클래스 박스
UML 클래스 다이어그램 : 클래스 박스

보통 '클래스' 는 3개의 칸(Compartment)로 구성된다

첫번째 Compartment에는 클래스의 이름이 들어가고
두번째 Compartment에는 클래스에 존재하는 Instance Variable들이
세번째 Compartment에는 클래스에 존재하는 메소드들의 Method Header가 들어가게 된다

UML 은 Algo 스타일 이름을 사용하기 때문에, 모든 변수들과 메소드들은 아래의 형식으로 쓰여진다.
'attribute_name : attribute_type'
'operation_name(param_name : param_type) : return_type
또한 각괄호([,])를 사용하여 다중성(Multiplicity)를 표시할 수 있다.
- bankAccount : String[2]
- phoneNumber : String [2..*]
- emailAddress : String [*]
이 경우에는 클래스에서 2개의 bankAccount  변수,
최소 2개의 phoneNumber  변수
그리고 무한대의 emailAddress  변수를 가지게 된다.

함수들과 변수들은 '+', '-', '#', '~' 를 앞에 표시하여 Access level(접근 수위)를 정의하게 된다.
UMLAccess Modifier
+Public
-Private
#Protected
~Package-Private

Interface & Abstract Class


UML 클래스 다이어그램 : 인터페이스(Interface)와 추사 클래스(Abstract Class) 박스
UML 클래스 다이어그램 : 인터페이스(Interface)와 추사 클래스(Abstract Class) 박스

인터페이스 같은 경우에는 클래스 이름 위에 '<<I>>' 또는 '<<Interface>>'를 적어 표시하고,
추상 클래스 같은 경우에는 클래스 이름에 Italic 효과를 주거나 또는 클래스 이름 아래 '{Absctact}' 를 적게된다.

Relationship


클래스 간의 관계는 아래의 선(Edge)들로 표시된다. 이는 클래스 간의 의존도를 나타내며, 각각의 클래스가 다른 클래스 없이는 인스턴스화 되거나 재사용 될 수 없고, 의존되고 있는 클래스(Dependee)의 변화가 의존하고 있는 클래스(Dependor)의 기능에 영향을 끼칠 수 있음을 의미한다.

RelationshipEdge
Dependency
Association
Aggregation
Composition
Generalization
Realization

Dependency


클래스 다이어그램 Dependency 관계
클래스 다이어그램 Dependency 관계

Dependency는 클래스 A가  가진 메소드들에서 클래스 B를 참조함을 의미한다. 또한 B의 메소드들을 참조할 수 있음을 의미한다.
영어로는 'A' depends on 'B'.
아래는 자바 예제이다

public class A {
public A(){}
public void useClassB(B classB) {
//any operations here.
}
}

Association


클래스 다이어그램 Association 관계
클래스 다이어그램 Association 관계

Association은 Dependency 와 비슷하지만 클래스 B 에대해 직접적인 참조를 한다는 것 에서 차이를 둔다. 말인즉, Dependency 의 경우 메소드 레벨에서 B를 참조하나, Association 같은 경우에는 클래스의 Instance variable 로써 B를 참조한다는 뜻이다.
아래는 자바 예제이다

public class A {
public A(){}
B classB;
public A(B classB) {
this.classB = classB;
}
}

Aggregation


클래스 다이어그램 Aggregation 관계
클래스 다이어그램 Aggregation 관계

Aggregation 은 Association 의 종류 중 한개로, A가 B와 다른 인스턴스들로 이루어진 인스턴스 임을 의미한다. Aggregation 의 경우에는 A의 파트 인스턴스들(예를 들면 B)이 A로 부터 독립적이기 때문에, A의 소멸시 다른 파트 인스턴스들이 소멸하지 않게된다. 이는 파트 인스턴스들의 생성 또한 A에게서 독립적임을 의미한다.
아래는 자바 예제이다, 예제를 보면 파트 인스턴스 B가 생성된 후, 파라미터로 인스턴스 A에 포함된다

public class A {
public A(){}
B classB;
public A(B classB) {
this.classB = classB;
}
public getB(){
return classB;
}

Composition


클래스 다이어그램 Composition 관계
클래스 다이어그램 Composition 관계

Composition은 다른 종류의 Association이다. 인스턴스 A가 B와 다른 인스턴스들로 이루어진다는 것은 Aggregation 과 같으나, 인스턴스 A의 소멸시, 다른 파트 인스턴스들까지 소멸한다는것이 Aggregation과의 차이이다. 이는 즉 파트 인스턴스들이 A로 부터 독립적이지 않음을 말한다. 또한, Aggregation 과는 달리 파트 인스턴스의 생성은 순수히 인스턴스 A에 맞겨진다
아래는 자바 예제이다. 위의 Aggregation 예제와 달리, 파트 인스턴스 B가 A의 컨스트럭터에 의해 생성된다.

public class A {
public A(){}
B classB;
public A() {
classB = new ClassB();
}

Generalization


클래스 다이어그램 Generalization 관계
클래스 다이어그램 Generalization 관계

Generalization 은 A가 B의 상위 타입(Super-type)이고 B가 A의 하위 타입(Sub-type)이라는것을 말한다. 이는 '상속'을 표시할 때 쓰이게 된다. 맨 처음 이미지를 보면, Student 클래스와 Faculty 클래스가 Person 클래스를 상속함을 알 수 있다. 그럼으로써 우리는 Student 와 Faculty가 Person이라는것을 말할 수 있다
아래는 자바 예제이다.

public class A {}
public B extends A{
}

Realization


클래스 다이어그램 Realization 관계
클래스 다이어그램 Realization 관계

Realization 은 Generalization과 같으나, 인터페이스를 implement할 때 쓰인다.
아래는 자바 예제이다.

public class A {}
public B implements A{
}

댓글 2개:

  1. 좋은 글 감사합니다. 참고해서 보고 싶은데 출처 밝히고 제 블로그에 옹겨 담아도 괜찮을까요?

    답글삭제
  2. 관계에 대한 정리가 잘 되어 있어 좋은 참고가 되었습니다. 좋은 글 감사합니다.

    답글삭제