티스토리 뷰
클래스 다이어그램
클래스 다이어그램은 시스템의 정적인 상태인 '논리적인 구조'를 표현합니다.
클래스 다이어그램의 주목적은 클래스간의 관계를 한눈에 파악하는데 있습니다.
■ 클래스의 표현
Class Name |
Attribute1 Attribute2 |
operation1(인자타입):반환타입 operation2(인자 타입):반환타입 |
일반적인 클래스는 사각형으로 표시되고 맨 상단은 class의 이름에 해당됩니다.
중단은 클래스가 포함하고 있는 멤버 변수들이오고 접근 제한자 public,private,protection에 대해서 각각 +,-,# 으로 표현이 됩니다. 하단에는 클래스가 포함하고 있는 메서드들이 표현이 됩니다.
원본 소스입니다. |
Person 클래스를 클래스 다이어그램으로 표현합니다. |
인터페이스나 추상 클래스 경우에는 클래스 이름 위에 <<Interface>>로 표시하고 추상 클래스의 경우네는 클레스 이름 아래 {Abstract}를 적거나 클래스 이름에 효과를 주어 표시를 합니다.
■ 연관관계
한 객체가 다른 객체와 연결되어 있음을 나타낼 때 그 두 객체를 연관관계라고 부르며 클래스들 사이에 선을 그어서 표현합니다. 두 클래스간의 연관관계가 있다는 것은 한 클래스의 객체가 다른 클래스의 객체를 사용하는 것을 의미합니다.
|
| |||||
클래스 B를 사용하는 클래스 |
클래스 A에 의해 사용되어지는 클래스 |
클래스 A는 클래스 B의 객체를 생성합니다. 즉 클래스 A와 B는 연관관계가 있으며, 클래스 A의 입장에서는 클래스 B의 존재를 알고 있고 반면에 클래스 B의 입장에서는 클래스 A의 입장을 알지 못합니다. 이를 단방향 연관관계라고 부르며, 두 개의 클래스가 서로에 대해서 알고 있는 연관관계를 양방향 연관관계라고 부릅니다. 이때는 화살표없이 선으로만 표현이 됩니다.
■ 의존관계
한 클래스의 변화가 다른 클래스에 영향을 미치는 관계를 의미합니다. 한 클래스가 변경이 되면 이것을 사용하는 다른 클래스에도 영향을 미치는 관계를 의미하는데 그 역도 반드시 성립하는 것은 아닙니다.
일반적으로 한 클래스의 메소드가 다른 클래스의 객체를 인자로 받아 그 메서드를 사용하는 경우, 한 클래스의 메소드 내부에서 다른 클래스의 객체를 생성하여 그 메소드를 사용하는 경우, 한 클래스의 메소드가 다른 클래스의 객체를 반환하는 경우가 있습니다.
■ 상속관계
클래스 간의 상속관계를 나타냅니다. 하위 클래스에서 상위 클래스 방향으로 선으로 이루어진 화살표로 관계를 표시합니다.
|
| |||||
클래스 A를 상속받는 B클래스 |
클래스 A를 상속받는 클래스 B |
■ 인터페이스
인터페이스를 구현하는 클래스들을 표현합니다. 화살표를 이용하여 표시하는데 상속과는 구분되는 점은 실선이 아니라 점선으로 표현이 된다는 것입니다.
|
| |||||
|
|
■ 집약관계
한 클래스가 다른 클래스를 포함하는 관계를 말하고 '전체'에 해당하는 클래스를 빈 마음로 화살표로 가리켜서 표시합니다. 집약관계에서는 '전체'가 메모리에서 사라진다고 해도 부분 객체는 사라지지 않습니다.
1
2
3
4
5
6
7
8
9
10
11
12 |
public class A {
private B b;
private C c;
public A(B b,C c)
{
this.b = b;
this.c = c;
}
}
|
■ 합성관계
한 클래스가 다른 클래스를 포함하는 관계이며, '전체'와 '부분'의 관계입니다. 전체에 해당하는 클래스를 마름모 화살표로 가르키며 집약관게와의 차이는 전체 객체가 메모리에서 사라지면 부분 객체도 함께 사라집니다.
1
2
3
4
5
6
7
8
9
10
11 |
public class A {
private B b;
private C c;
public A()
{
this.b = new B();
this.c = new C();
}
} |
집약관계와의 차이는 생성자에서 새롭게 new를 통해서 객체를 생성한다는 것입니다.클래스 다이어그램 표현 방식의 차이는 빈 마름모가 아니라 검은색으로 채워진 마름모로 표현이 됩니다.
'Programming > JAVA' 카테고리의 다른 글
10 [객체 지향 언어의 이해] 자바 객체 설계 원칙 - SOLID (1) | 2017.09.23 |
---|---|
[JAVA] HashMap 사용하기 (0) | 2017.09.23 |
08 [객체 지향 언어의 이해] 자바가 확장한 객체 지향 - this와 super 키워드 (0) | 2017.09.15 |
07 [객체 지향 언어의 이해] 자바가 확장한 객체 지향 - Final 키워드 (0) | 2017.09.14 |
06 [객체 지향 언어의 이해] 자바가 확장한 객체지향 - Abstract & 생성자 (0) | 2017.09.13 |