1. UML 의 개요
시스템 분석, 설계, 수현 등 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다.
- 구성 요소 : 사물(Things), 관계(Relationship), 다이어그램(Diagram)
2. 사물(Things)
모델을 구성하는 가장 중요한 기본 요소로, 다이어그램 안에서 관계가 형성될 수 있는 대상들을 말한다.
- 구조 사물(Structual Things)
시스템의 개념적, 물리적 요소를 표현
클래스, 유스케이스, 컴포넌트, 노드 등 - 행동 사물(Behaviroal Things)
시간과 공간에 따른 요소들의 행위를 표현
상호작용, 상태 머신 등 - 그룹 사물(Grouping Things)
요소들을 그룹으로 묶어서 표현
패키지 - 주해 사물(Annotation Things)
부가적인 설명이나 제약 조건 등을 표현
노트
3. 의존(Dependency) 관계
짧은 시간 동안만 관계를 맺고, 필요할 때만 서로 영향을 주는 관계이다.
한 클래스가 다른 클래스의 동작을 잠깐 빌려쓰는 경우를 말한다.
두 클래스가 독립적으로 존재하지만, 특정 상황(메서드 호출 등)에서만 관계를 형성한다.
예를 들어, 어떤 클래스가 다른 클래스를 매개변수로 받아서 작업을 수행하는 경우가 이에 해당한다.
예: 음식 배달 앱
음식 배달 앱에서 고객 클래스와 음식 주문 클래스가 있다고 가정한다. 고객은 앱에서 특정 음식 주문을 요청할 때만 음식 주문 클래스를 이용한다. 이 관계는 필요할 때만 발생하며, 주문이 끝나면 두 클래스는 서로 독립적이다.
class Customer {
void placeOrder(Order order) {
// 고객이 주문을 처리할 때만 Order 클래스와 관계를 가짐
System.out.println("Order placed for: " + order.getDetails());
}
}
class Order {
private String details;
public Order(String details) {
this.details = details;
}
public String getDetails() {
return details;
}
}
// 사용
Customer customer = new Customer();
Order order = new Order("Pizza");
customer.placeOrder(order); // 주문 시에만 의존 관계
Customer 클래스는 필요할 때만 Order 클래스와 상호작용 한다. 주문이 끝나면 두 클래스는 아무 관계도 남지 않는다.
4. 실체화(Realization) 관계
인터페이스와 이를 구현하는 클래스 간의 관계를 나타낸다. 인터페이스는 "해야 할 일" 이나 "할 수 있는 기능"의 목록 (추상적 설계) 을 정의한다. 구현 클래스는 이 인터페이스에 정의된 기능을 실제로 구현한다. 쉽게 말해 인터페이스는 약속, 클래스는 약속을 이행하는 쪽이다.
예: 동물과 소리
인터페이스에서는 동물이 어떤 소리를 낼 수 있는지 정의하고, 구현 클래스에서는 각각의 동물이 소리를 내는 방식을 구체적으로 작성한다.
// 인터페이스 정의: 약속
interface Animal {
void makeSound(); // 동물이 소리를 낼 수 있음
}
// 실체화 관계: Dog 클래스는 Animal 인터페이스를 구현
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof Woof!");
}
}
// 실체화 관계: Cat 클래스도 Animal 인터페이스를 구현
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow!");
}
}
// 사용
public class Main {
public static void main(String[] args) {
Animal dog = new Dog(); // Dog는 Animal을 실체화
Animal cat = new Cat(); // Cat도 Animal을 실체화
dog.makeSound(); // Woof Woof!
cat.makeSound(); // Meow!
}
}
Animal 인터페이스는 동물이 소리를 낼 수 있는 기능을 약속하고, Dog 와 Cat 클래스에서는 인터페이스를 구현(실체화) 하여 각각의 동물 소리를 정의한다.
5. 일반화(Generalization) 관계
포괄적 개념과 구체적 개념 간의 관계를 표현하는 것이다.
한 사물이 다른 사물보다 더 일반적인지, 또는 더 구체적인지를 나타낸다.
일반적인 개념은 상위 클래스 역할을 하고 구체적인 개념은 하위 클래스 역할을 한다. 일반적으로 상속 관계를 통해 구현된다.
예: 차량과 유형
일반적 개념 : 차량은 모든 차량의 공통적인 특징을 나타낸다. 바퀴가 있고, 문이 있으며, 창문이 있다는 등 .
구체적 개념 : 버스, 트럭, 택시 등 과 같이 각각 차량의 더 구체적인 유형을 나타낸다.
// 일반적인 개념: 차량(Car)
class Car {
String brand;
int speed;
void drive() {
System.out.println("Driving a car...");
}
}
// 구체적인 개념: 버스(Bus)
class Bus extends Car {
int passengerCapacity;
@Override
void drive() {
System.out.println("Driving a bus with capacity: " + passengerCapacity);
}
}
// 구체적인 개념: 트럭(Truck)
class Truck extends Car {
int loadCapacity;
@Override
void drive() {
System.out.println("Driving a truck with load capacity: " + loadCapacity);
}
}
// 사용
public class Main {
public static void main(String[] args) {
Bus bus = new Bus();
bus.passengerCapacity = 50;
bus.drive(); // "Driving a bus with capacity: 50"
Truck truck = new Truck();
truck.loadCapacity = 1000;
truck.drive(); // "Driving a truck with load capacity: 1000"
}
}
Car 클래스는 일반적인 "차량" 의 개념을 정의한다. Bus, Truck, 클래스는 각각 더 구체적인 차량의 유형을 나타내며, Car 클래스를 상속받아 확장한다.
6. 다이어그램의 종류와 차이점
다이어그램은 크게 정적 다이어그램과 동적 다이어그램으로 나뉜다. 두 개념의 핵심 차이점은 다음과 같다.
7. 상태(State) 다이어그램
하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현한다.
객체들 사이에서 발생하는 이벤트에 의한 객체들의 상태 변화를 그림으로 표현한다.
럼바우 객체지향 분석 기법에서 동적 모델링에 활용된다.
8. 활동(Activity) 다이어그램
시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현한다.
오퍼레이션이나 처리 과정이 수행되는 동안 일어나는 일들을 단계적으로 표현한다.
9. 스테레오 타입(Stereotype)
UML 에서 표현하는 기본 기능 외에 추가적인 기능을 표현하기 위해 사용한다.
길러멧이라고 부르는 겹화살괄호 (<<>>) 사이에 표현할 형태를 기술한다.
'개인공부' 카테고리의 다른 글
JavaScript 에서 Map 과 Set (0) | 2025.02.28 |
---|---|
RKE2 Rancher 설치(3) (1) | 2024.12.12 |
K8S의 마스터노드와 워커노드 용어 정리 (3) | 2024.12.11 |
RKE2 Worker Node 설치(2) (0) | 2024.12.10 |
VMware Fusion, RKE2 Master Node 설치 (1) (3) | 2024.12.09 |