1. 클래스 다이어그램이란
- 클래스 다이어그램은 UML에서 가장 널리 사용되는 구조 다이어그램으로, 시스템의 정적 구조를 표현합니다.
- 객체지향 시스템에서 클래스들과 그들 간의 관계를 시각적으로 나타내어 시스템의 전체적인 구조를 이해할 수 있게 해줍니다.
- 설계 단계에서 시스템의 구조를 계획하고, 개발 완료 후에는 시스템 문서화의 핵심 역할을 담당합니다.
정보
클래스 다이어그램은 '정적 모델'입니다. 즉, 시스템이 실행되는 동안의 동작이나 상태 변화가 아닌, 시스템의 구조적 관점을 보여줍니다.
1.1 클래스 다이어그램의 중요성
- 설계 검증: 구현 전에 클래스 구조의 타당성을 검토할 수 있습니다.
- 의사소통: 개발팀 간의 공통 이해를 도모합니다.
- 문서화: 시스템의 구조를 체계적으로 기록합니다.
- 유지보수: 기존 코드의 구조를 빠르게 파악할 수 있습니다.
- 리팩토링: 코드 개선 방향을 시각적으로 계획할 수 있습니다.
2. 클래스 표기법
2.1 기본 클래스 구조
- 클래스는 3개 구획으로 나뉜 직사각형으로 표현됩니다
- 첫 번째 구획은 클래스 이름, 두 번째 구획은 속성(필드), 세 번째 구획은 메서드를 나타냅니다.
2.2 가시성 표시자 (Visibility)
- 각 속성과 메서드 앞에는 접근 제한자를 나타내는 기호가 붙습니다:
- + (public): 모든 클래스에서 접근 가능
- - (private): 해당 클래스 내부에서만 접근 가능
- # (protected): 해당 클래스와 하위 클래스에서 접근 가능
- ~ (package): 같은 패키지 내에서만 접근 가능
2.2.1 Java 코드와의 대응
public class User {
private String name; // - name: String
protected int age; // # age: int
public String email; // + email: String
String phoneNumber; // ~ phoneNumber: String
public void setName(String name) { // + setName(String): void
this.name = name;
}
private boolean isValid() { // - isValid(): boolean
return name != null && !name.isEmpty();
}
}
2.3 추상 클래스와 인터페이스
- 추상 클래스: 클래스명을 이탤릭체로 표시하거나
<<abstract>>스테레오타입 사용 - 인터페이스:
<<interface>>스테레오타입 사용
┌─────────────────────────┐
│ <<interface>> │
│ Drawable │
├─────────────────────────┤
│ │
├─────────────────────────┤
│ + draw(): void │
└─────────────────────────┘
3. 클래스 간 관계 표현

3.1 연관 (Association)
- 한 객체가 다른 객체에게 메세지를 보낼 수 있으면 두 객체를
연관관계라고 할 수 있습니다. - 한 객체가 다른 객체를 참조하므로써 연관 관계를 만들 수 있습니다.
- 구현 방식으로 인스턴스 변수가 있습니다.
- 두 클래스는 독집적인 자체 수명을 가집니다.
- 객체와 객체 사이에 양방향 또는 단반향 관계가 있습니다.
3.1.1 양방향 연관
// Java 코드 예시
public class Student {
private List<Course> courses; // Student가 Course를 참조
}
public class Course {
private List<Student> students; // Course가 Student를 참조
}
- 양방향 연관은 두 클래스가 서로를 참조하는 관계입니다.
- UML에서는 실선으로 표기합니다.