UML (Unified Modeling Language)
시스템을 모델로 표현해주는 대표적인 모델링 언어
UML 목적
- 전체 시스템의 구조 및 클래스의 의존성 파악
- 유지보수를 위한 설계의 back-end 분석 제작
- 원활한 의사소통 및 설계 논의
- 시각화, 명세화, 문서화
UML 다이어그램 종류
1. 구조 다이어그램 (Structure Diagram)
- 클래스 다이어그램 (시스템을 구성하는 클래스들 사이의 관계 표현)
- 객체 다이어 그램 (객체 정보를 보여줌)
- 복합체 구조 다이어그램 (복합 구조의 클래스와 컴포넌트 내부 구조 표현)
- 등등
2. 행위 다이어그램 (Behavior Diagram)
- 활동 다이어그램 (업무 처리 과정, 연산 수행 과정 표현)
- 상태 머신 다이어그램 (객체의 생명주기 표현)
- 유즈케이스 다이어그램 (사용자 관점에서 시스템 행위 표현)
- 등등
클래스 다이어그램
- 시스템을 구성하는 클래스들 사이의 관계를 표현 (클래스+관계로 표현)
- 시간에 따라 변하지 않는 시스템의 정적인 면을 보여줌
클래스 (Class)
- 동일한 속성과 행위를 수행하는 객체의 집합 (객체를 생성하는 설계도)
- 변화의 기본 단위
- 클래스 표현 방법 = [클래스이름, 필드변수, 메소드]
관계
1. 연관 관계 (Association)
- 각 클래스의 객체는 해당 연관 관계에서 어떤 역할을 수행
- 보통 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황
- 단방향(화살표) - 한 쪽은 알지만, 다른 쪽은 상대방의 존재를 모름
- 양방향(실선) - 두 클래스의 객체들이 서로의 존재를 인식
💡 연관 클래스
- 연관 관계에 추가할 속성이나 행위가 있는 경우
- 연관 클래스를 일반 클래스로 변환
- 양방향 연관 관계는 구현이 복잡, 보통 다대다 연관 관계를 일대다 단방향 연관 관계로 변환해 구현
2. 일반화 관계 (Generalization)
- 한 클래스가 다른 클래스를 포함하는 상위 개념인 경우
- 상속 관계 ("is a kind of")
- UML에서의 추상 클래스와 추상 메소드 표현 = 이탤릭체, << abstract>>
3. 집합 관계 (Aggregation, Composition)
- UML 연관 관계의 특별 경우
- 전체와 부분의 관계를 명확히 명시할 때 사용
1. 집약 관계 (Aggregation)
- 한 객체가 다른 객체를 포함하는 관계
- '부분'을 나타내는 객체를 다른 객체와 공유 가능
- 생성자에서 참조값을 인자로 받아 필드를 세팅
= 전체 클래스가 부분 클래스를 new로 생성하지 않고외부에서 주입 받음
- 전체 객체의 라이프 타임과 부분 객체의 라이프 타임은 독립적
public class Computer { private MainBoard mb; private CPU c; public Computer(MainBoard mb, CPU c) { // 생성자 this.mb = mb; this.c = c; } }
2. 합성 관계 (Composition)
- 부분 객체가 전체 객체에 속하는 관계
- '부분'을 나타내는 객체를 다른 객체와 공유 불가능
- 생성자에서 필드에 대한 객체를 생성
= 클래스에서 직접 new로 생성
- 전체 객체의 라이프 타임과 부분 객체의 라이프 타임은 의존적
public class Computer { private MainBoard mb; private CPU c; public Computer() { // 생성자 this.mb = new MainBoard(); this.c = new CPU(); } }
4. 의존 관계 (Dependency)
- 일반적으로 클래스가 다른 클래스를 사용하는 경우
💡연관관계와 의존관계의 공통점
= 한 클래스가 다른 클래스의 기능을 사용
💡 연관관계와 의존관계의 차이
= 유지기간
연관 관계
- 오랜 시간 동안 같이할 객체와의 관계 ex) 사람 - 자동차
- 클래스의 속성에서 참조
의존 관계
- 짧은 시간 동안 이용하는 관계 ex) 자동차 - 주유기
- 연산의 인자로 사용 (메소드의 호출이 끝나면 연관된 클래스와의 관계가 마무리)
5. 실체화 관계 (Realization)
- 책임들의 집합인 인터페이스와 이 책임들을 실제로 구현한 클래스들 사이의 관계
- UML에서의 인터페이스 표현 = <<interface>>
'프로그래밍 > 기타' 카테고리의 다른 글
ChromeDriver 설치 없이 selenium 실행하는 법, webdriver_manager (0) | 2024.12.11 |
---|---|
컴파일 과정, 컴파일러 (0) | 2024.08.02 |
TOTP(Time Based One Time Password) (0) | 2024.04.15 |
협업을 위한 컨벤션, Gitmoji (0) | 2023.09.04 |