객체 지향 프로그램에서 시스템의 구조를 나타내는 다이어그램.
UML의 일부로 코드로 풀어진 객체간의 관계를 그림으로서 이해하기 쉽게 표현해주는 수단이다.
따라서 개발자 사이에서 원활한 의사소통을 위해 필수적으로 알아야 한다고 생각한다.
클래스 다이어그램의 주요 요소는 두 가지이다.
사각형으로 표시되며 상단에는 클래스 이름, 중간에는 상태(필드), 하단에는 행위(메서드)를 표시한다.
클래스 사이의 상호 작용을 나타낸다.
관계는 여러 요소가 있다.
"Is-a" 관계일 때 사용한다.
즉, 상속 관계를 표현할 때 사용한다.
표기는 실선에 빈 삼각형 화살표로 한다.
class Parent {
...
}
class Child extends Parent {
...
}
구현 관계를 표현할 때 사용한다.
표기는 점선에 빈 삼각형 화살표로 한다.
interface Animal {
...
}
class Cat implements Animal {
...
}
의존 관계라고 하며, 클래스 내의 멤버 변수로 의존하는 것이 아닌, 행위에 의존적인 것에 대한 관계이다.
표기는 점선에 화살표로 한다.
class A {
...
}
class B {
...
void someMethod(A a) {
a.action();
}
}
연관 관계라고 하며, 클래스 내의 멤버 변수로 참조하고 있을 때 사용한다.
표기는 실선에 화살표로 한다.
class A {
...
}
class B {
A a;
}
만약 연관된 클래스가 N개 또는 여러 클래스에 참조될 수 있다면 다음과 같이 숫자와 *
기호로 표시할 수 있다.
public void someMethod {
A a = new A();
B b1 = new B();
b1.setA(a);
B b2 = new B();
b2.setA(a);
}
class B {
List<A> as;
}
연관 관계의 하위 집합이며, 연관의 특정 관계이다.
집합 관계라고 하며, 참조된 클래스가 대상의 생명 주기에 포함되지 않을 때 사용한다.
생성자로 주입된 객체일 때 나타낼 수 있다.
class A {
B b;
public A(B b) {
this.b = b;
}
}
class B {
A a;
public B(A a) {
this.a = a;
}
}
합성 관계라고 하며, 참조된 클래스가 대상의 생명 주기에 종속될 때 사용한다.
생성자로 주입되지 않고, 코드 내에서 클래스가 인스턴스화 될 때 나타낼 수 있다.
class A {
...
}
class B {
A a;
public B() {
this.a = new A();
}
}