Class Diagram
UML Class Diagram
객체와 클래스
- Object (객체): 시스템 내의 개별 인스턴스
- Class (클래스): 유사한 객체들의 설계도. 객체는 클래스의 인스턴스
객체 다이어그램 (Object Diagram)
- 특정 시점에서 객체들의 상태와 관계를 스냅샷처럼 표현
사각형에 밑줄로 표현
예 ) lshwa:Person
lshwa: Object name / Person : Class
클래스 구성요소
- Attributes (속성): 객체의 구조적 특징
이름:타입 으로 표기함. 예) name: String
- Operations (연산): 클래스의 동작, 메소드라고 부르는 곳
표기방법 : 메소드: 리턴 타입 예) getABC() : int
- Instance Variable / Operation: 개별 객체에 적용
- Class Variable / Operation (static): 모든 인스턴스에 공유
public 은 +, private는 -, protected는 #으로 표기함.
표기법
추상 클래스와 연산
- Abstract Class: 인스턴스 생성 불가
- Abstract Operation: 몸체(body)가 없음
- 표기: 기울임꼴, {abstract}, «abstract»
인터페이스 (Interface)
- 추상 연산들의 집합
- Provided Interface: 컴포넌트가 외부에 제공하는 기능 또는 서비스를 나타냄. 즉, 다른 컴포넌트가 사용할 수 있도록 공개한 기능들을 말함.
ball symbol 이나 realization connector를 사용해 표기
public interface PaymentService {
void processPayment(double amount);
}
public class PaymentProcessor implements PaymentService {
@Override
public void processPayment(double amount) {
System.out.println("Processing payment: $" + amount);
}
}
=> PaymentProcessor는 processPayment() 기능을 제공
- Required Interface: 컴포넌트가 동작하기 위해 외부로부터 필요로 하는 기능을 나타냄. 즉, 다른 컴포넌트에게 의존하는 기능들을 말함.
Socket symbol, Dependency arrow to ball or stereotyped class 를 통해 표기
public interface BankService {
boolean verifyAccount(String accountId);
}
public class PaymentProcessor {
private BankService bankService; // 요구 인터페이스
public PaymentProcessor(BankService bankService) {
this.bankService = bankService;
}
public void makePayment(String accountId, double amount) {
if (bankService.verifyAccount(accountId)) {
System.out.println("Payment of $" + amount + " completed.");
}
}
}
=> PaymentProcessor는 BankService의 verifyAccount() 기능을 요구함
클래스 간 관계
1. Dependency(의존)
-
한 클래스가 다른 클래스를 잠깐 사용하는 가장 약한 relationship
- 메서드의 매개변수, 지역변수로 사용되며 필요할 때만 사용한다.
- 생명주기 공유 X
2. Association(연관 관계)
- 인스턴스 간의 일반적인 관계로, 두 클래스가 서로 연결되어 있다는 일반적인 관계로 한 클래스가 다른 클래스의 참조를 멤버 변수로 가짐
class Student {
private Teacher teacher;
}
class Teacher {
private String name;
}
Binary Association
Binary Association : Connects instances of two classes
- Navigability (접근 가능성): 한쪽에서 다른 쪽 접근 가능 여부
- Non-navigability : X 자로 표시하여 방향성 지정
- Navigability undefined : 양방향의 access가 가능
navigation의 기능 : can access their visible attributes and operations
- Multiplicity: 관계에 참여하는 객체 수
해석은 반대로 해야함.
- Role: 관계 내 역할명, Visibility(+,-,#)이랑 같이 사용
- Association Class: 관계 자체에 속성 부여 가능
- N : M 관계에서는 필수
- 1 : 1 OR 1 : N에서는 필수는 아님.
Association Class 와 Regular Class 차이
1. Regular Class
- 단독으로 존재하며, 어떤 객체를 모델링한 클래스
- 속성과 행동을 가지며 독립적인 개체로 사용
2. Association Class
- 두 클래스 간의 연관을 나타내면서, 그 연관 자체에 속성이 필요한 경우에 사용된다. 연관 그 자체를 클래스로 모델링 한 것
즉, Regular Class는 현실 세계의 독립된 객체를 표현하기에 서로의 존재와 무관하게 혼자서도 의미있는 클래스이다. 관계 자체를 객체처럼 모델링한 Association Class에는 두 클래스 간의 관계를 표현하기에 추가 정보가 있을 때만 등장
EX) Student가 Study Program을 Enrollment 할 때,
Enrollment는 학생과 스터디 프로그램과의 관게를 포현하기에 Association Class로 표현하는게 정답!
Association class - unique / non-unique
1. Unique
- 두 개의 연관된 클래스의 조합(인스턴스) 자체가 고유할 때 사용
- 한 번만 있는게 default값임.
- 예시
- 학생이 Course에 등록한다.
- 만약 또 등록하려고 하면, 이미 존재한다는 오류가 떠야함.
2. Non-unique
- 같은 두 클래스 인스턴스 조합이 중복되어 여러 번 존재가 가능
- {non-unique}으로 직접 명시해줌.
- 예시
- 학생이 수업A를 듣는다.
- 재수강을 할 수 있다면, 학생은 수업A를 여러번 들을 수 있음.
Qualified Association(한정 연관)
- 한 클래스에서 다른 클래스의 객체를 참조할 때, 특정 키(qualifier)를 사용해서 식별하고 접근을 제한하는 연관관계
- 조건이 붙은 연관관계, 연관관계에 인덱스를 다는 것과 같음.
- UML 표기에서는 연관선 옆에 작은 사각형에 qualifier를 사용함.
3. Aggregation: 부분-전체 관계
- 한 객체가 다른 객체를 포함하지만, 포함된 객체가 독립적으로 존재 가능한 관계 (HAS-A 관계)
- 포함된 객체는 생명 주기를 공유하지 않음
class Player {
String name;
}
class Team {
// aggregation: team이 없어도 player는 존재 가능
Player player;
}
- Aggragation의 특징
- Transitive(추이성) : A가 B를 포함하고, B가 C를 포함하면, A는 C를 간접적으로 포함하는 관계
- Asymmetric(비대칭성) : 두 객체 간의 관계가 일방향이라는 뜻
Shared Aggregation
- 한 객체가 다른 객체를 참조하지만, 포함된 객체가 여러 객체와 공유될 수 있는 관계
- 특징
- 생명 주기를 공유하지 않음.
- 공유가 가능함. (여러 Whole객체가 동일한 Part를 참조 가능)
- 느슨한 결합
4. Composition (구성)
- 객체 간의 강한 포함 관계를 의미함.
- 하나의 객체가 다른 객체를 자기 일부로 포함하고, A가 사라지면 B도 함께 사라지는 관계
- 생명 주기(life cycle)을 공유하는 관계
class Room {}
class House {
private Room room;
public House() {
// House가 Room을 생성하고 관리함
room = new Room();
}
}
5. Generalization (상속)
- 러 개의 하위 클래스(subclass)가 공통적인 속성과 동작을 공유할 때, 이를 하나의 상위 클래스(superclass)로 일반화하는 것을 의미
- IS-A 관계
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
void makeSound() {
System.out.println("Bark");
}
}
Abstract Class
- 추상 클래스 : 직접 객체를 만들 수 없는 클래스로 공통적인 속성이나 동작을 정의하고 이를 상속받는 하위 클래스에서 구체화하도록 되어있음.
공통의 뼈대만 정의하고 나머지는 자식이 완성하는 틀이라고 생각하면 됨.- 주요 특징
- 추상클래스를 사용한 객체 생성 불가
- 오직 상속만을 위한 전용
- {abstract} 키워드를 통해 나타냄.
Multiple Inheritance
- 다중 상속 : 하나의 클래스가 둘 이상의 부모 클래스로부터 속성과 메서드를 동시에 상속받는 것을 말함.
- UML 에서 지원가능
relationship의 notation은 아래 사진과 같다.

클래스 다이어그램 작성 가이드
- 명사 → 클래스
- 형용사 → 속성
- 동사 → 연산
- 관계 표현: 일반화, 연관, 포함 등
코드 생성과 연계
- 클래스 다이어그램은 객체지향 언어 코드 생성에 활용 가능
- Java 예시로 class, abstract class, interface, enum 등 생성 가능
UML Notation Summary (요소 요약)
| 요소 | 설명 |
|---|---|
| Class | 구조 및 동작의 설명 |
| Abstract Class | 인스턴스화 불가 클래스 |
| Association | 클래스 간 관계 |
| Association Class | 관계 자체에 속성 추가 |
| Aggregation | 포함 관계 (공유/강한 포함) |
| Generalization | 상속 관계 |
| Object | 클래스의 인스턴스 |
| Link | 객체 간 관계 |