UML이란?
UML(Unified Modeling Language)은 프로그램의 구조와 행위를 시각적으로 표현하기 위한 표준화된 모델링 언어입니다. 복잡한 소프트웨어 시스템의 설계를 다이어그램으로 표현함으로써, 개발자와 이해관계자 간의 의사소통을 용이하게 합니다.
UML 사용 이유
- 모델 검증: UML을 사용하면 구현 전에 시스템 모델을 검증할 수 있고, 잠재적인 문제를 사전에 발견하고 수정할 수 있습니다.
- 비용 절감: 코드를 작성하고 테스트하는 것보다 UML 모델을 사용하여 시스템을 설계하고 검증하는 것이 비용이 적게 듭니다.
- 테스트 및 검증: 시스템이 실제로 요구사항을 만족하는지 테스트하고 검증하기 위해 사용됩니다.
UML 다이어그램 종류
구조 다이어그램 | 클래스 다이어그램 | |
객체 다이어그램 | ||
복합체 구조 다이어그램 | ||
배치 다이어그램 | ||
컴포넌트 다이어그램 | ||
패키지 다이어그램 | ||
행위 다이어그램 | 활동 다이어그램 | |
상태 머신 다이어그램 | ||
유즈 케이스 다이어그램 | ||
인터랙션 다이어그램 | 시퀀스 다이어그램 | |
상호작용 개요 다이어그램 | ||
통신 다이어그램 | ||
타이밍 다이어그램 |
UML 작성 순서
- 유스케이스 다이어그램: 시스템의 기능적 요구사항을 사용자의 관점에서 표현합니다.
- 클래스 다이어그램: 시스템의 구조를 클래스와 그 관계로 표현합니다.
- 시퀀스 다이어그램: 객체 간의 상호작용과 시간 흐름을 시각화합니다.
클래스 다이어그램
클래스 정보
- 클래스: 이름, 필드(데이터 멤버), 메소드(함수)로 구성됩니다.
- Abstract 클래스: 클래스 이름 위에 <<abstract>> 표기로 추상 클래스를 나타냅니다.
- Interface: <<interface>> 스테레오 타입으로 인터페이스를 표시합니다.
필드
- 접근 제한자: -는 private, +는 public, #은 protected를 의미합니다.
- Static: 필드나 메소드가 static일 경우, 밑줄로 표시합니다.
- Final: {readOnly}로 표기하여 final 속성을 나타냅니다.
메소드
메소드는 인자를 표기하는 거 이외에는 변수와 표기법이 동일합니다.
abstract는 {abstract}로 표시
관계
1. is-a 관계 : 일반화 vs 실체화
화살표의 끝은 상속받는 클래스, 추상클래스입니다.
일반화와 실체화 차이점?
일반화는 상속을 이용해 'is a kind of' 관계이지만,
실체화는 인터페이스를 이용해 'can do this' 관계이다.
일반화: extends 관계
실체화: implements 관계
2. has-a관계 : 집합 관계 vs 합성 관계
화살표의 끝은 전체 클래스
집합 관계와 합성 관계의 차이점?
집합 관계는 부분 객체가 전체 객체의 생명 주기에 의존하지 않지만,
합성 관계는 부분 객체가 전체 객체의 생명 주기에 의존한다.
집합(Aggregation) 관계
- 한 객체가 다른 객체를 포함하는 것으로, ‘부분’을 나타내는 객체를 다른 객체와 공유할 수 있습니다.
- ‘전체’를 가리키는 클래스 방향에 빈 마름모로 표시합니다.
- 전체 객체가 사라진다 해도 부분 객체는 사라지지 않습니다.
public class Computer {
private MainBoard mb;
private CPU c;
// 생성자
public Computer(MainBoard mb, CPU c) {
this.mb = mb;
this.c = c;
//Computer과 MainBoard, CPU의 라이프사이클은 독립적
}
}
합성(composition) 관계
- 부분 객체가 전체 객체에 속하는 관계로, ‘부분’을 나타내는 객체를 다른 객체와 공유할 수 없습니다.
- ‘전체’를 가리키는 클래스 방향에 채워진 마름모로 표시합니다.
- 전체 객체가 없어지면 부분 객체도 없어집니다.
public class Computer {
private MainBoard mb;
private CPU c;
// 생성자
public Computer() {
this.mb = new MainBoard();
this.c = new CPU();
//MainBoard, CPU의 라이프사이클은 Copmuter에 의존적
}
}
3. 참조 : 연관 관계 vs 의존 관계
화살표의 끝은 참조당하는 클래스
연관관계와 의존관계의 차이점?
연관관계는 오랜 시간 동안 같이할 객체와의 관계며,
의존 관계는 짧은 시간 동안 이용하는 관계다.
Association(연관)
다른 클래스를 필드로 사용할 때 사용합니다.
단방향 연관관계와 양방향 연관관계의 차이점?
화살표가 없으면 양방향 연관관계이고, 화살표가 있으면 단방향 연관관계이다.
양방향 연관관계는 서로의 존재를 안다는 의미고,
단방향 연관관계는 한 쪽은 알지만 다른 쪽은 상대방의 존재를 모른다는 의미이다.
class Person {
private Phone phone;
public Person(Phone phone) {
this.phone = phone;
}
public void sendMessage() {
String to = "민수";
String message = "뭐해?";
this.phone.sendMessage(to, message) // 핸드폰의 문자 전송 기능 사용
}
}
// 핸드폰
class Phone {
public void sendMessage(String to, String message) {
// 문자 메시지 전송 기능...
}
}
Dendency (의존)
다른 클래스 참조를 나타낼 때 사용됩니다.
class Person {
public void sendMessage(Phone phone) {
String to = "민수";
String message = "공부해";
phone.sendMessage(to, message)
}
}
'CS > OOP' 카테고리의 다른 글
추상 클래스와 인터페이스의 차이점 (0) | 2024.04.17 |
---|---|
객체 지향 원리 적용 (2) | 2023.03.03 |
좋은 객체 지향 설계의 5가지 원칙-SOLID (0) | 2023.02.22 |