[UML] ํด๋์ค ๋ค์ด์ด๊ทธ๋จ ์๋ฒฝํ๊ฒ ์ดํดํ๊ธฐ
์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ณต์กํ ์์คํ ์ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ํ๊ณ , ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ํ๋์ ํ์ ํด์ผ ํ ๋๊ฐ ๋ง์ฃ . ์ด๋, ํต์ผ๋ ์ฝ์์ผ๋ก ์์คํ ์ ์๊ฐ์ ์ผ๋ก ํํํ๋ ๋๊ตฌ๊ฐ ์๋ค๋ฉด ์ด๋จ๊น์? ๋ฐ๋ก ์ฌ๊ธฐ์ UML(Unified Modeling Language)์ด ๋ฑ์ฅํฉ๋๋ค.
UML์ ๊ฐ์ฒด ์งํฅ ์ํํธ์จ์ด ์์คํ ์ ์๊ฐํ(Visualize)ํ๊ณ , ๋ช ์ธํ(Specify)ํ๋ฉฐ, ๋ฌธ์ํ(Document)ํ๋ ํ์ค ๋ชจ๋ธ๋ง ์ธ์ด์ ๋๋ค. ํนํ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ๋๊ท๋ชจ ์์คํ ์ค๊ณ๊ฐ ๋ณดํธํ๋๋ฉด์ UML์ ์ค์์ฑ์ ๋์ฑ ์ปค์ง๊ณ ์์ต๋๋ค. ์๋ง์ UML ๋ค์ด์ด๊ทธ๋จ ์ค์์๋ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ(Class Diagram)์ ์์คํ ์ ์ ์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ๋ ํต์ฌ์ ์ธ ๋๊ตฌ์ ๋๋ค.
์ด ๊ธ์์๋ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๊ตฌ์ฑ ์์, ๊ทธ๋ฆฌ๊ณ ์ค์ ํ์ฉ๋ฒ๊น์ง ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฐ์ด๋๋ฅผ ํตํด ์์คํ ๊ตฌ์กฐ๋ฅผ ๋ ๋ช ํํ๊ฒ ์ดํดํ๊ณ , ํ์๋ค๊ณผ ํจ๊ณผ์ ์ผ๋ก ์ํตํ๋ ์ญ๋์ ๊ฐ์ถ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ํต์ฌ ์์
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์์คํ ์ ๊ตฌ์ฑํ๋ ํด๋์ค์ ๊ทธ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํฉ๋๋ค. ๋ง์น ๊ฑด๋ฌผ์ ์ค๊ณ๋์ฒ๋ผ ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ํ๋์ ๋ณด์ฌ์ฃผ๋ ๋๊ตฌ์ฃ . ๋ค์ด์ด๊ทธ๋จ์ ์ ๋๋ก ์ฝ๊ณ ๊ทธ๋ฆฌ๋ ค๋ฉด ๋จผ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
1. ํด๋์ค (Class)
ํด๋์ค๋ ๋์ผํ ํน์ง๊ณผ ํ์๋ฅผ ๊ณต์ ํ๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ ๋ํ๋ ๋๋ค. ๋ค์ด์ด๊ทธ๋จ์์๋ ์์ฑ(attributes)๊ณผ ์คํผ๋ ์ด์ (operations)์ ํฌํจํ๋ ์ฌ๊ฐํ์ผ๋ก ํํ๋ฉ๋๋ค.
- ํด๋์ค ์ด๋ฆ: ์ฌ๊ฐํ์ ๊ฐ์ฅ ์๋ถ๋ถ์ ์์นํฉ๋๋ค. ์ด๋ฆ์ ๊ตต์ ๊ธ์จ์ ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ์ฌ์ฉํ๊ณ , ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ํ๊ธฐํ๋ ๊ฒ์ด ๊ด๋ก์ ๋๋ค.
- ์์ฑ (Attributes): ํด๋์ค๊ฐ ๊ฐ์ง๋ ์ ์ ๋ฐ์ดํฐ ๋๋ ํ๋๋ฅผ ๋ํ๋
๋๋ค. ์ค๊ฐ ๋ถ๋ถ์ ์์นํ๋ฉฐ ์ผ์ชฝ ์ ๋ ฌ๋ก ํ๊ธฐํฉ๋๋ค. ๋ณดํต ์ ๊ทผ ์ ์ด์, ์ด๋ฆ, ๋ฐ์ดํฐ ํ์
์ ํจ๊ป ๋ช
์ํฉ๋๋ค.
+: public-: private#: protected~: default (package-private)
์:
userId,totalPrice๋ฑ
- ์คํผ๋ ์ด์ ํน์ ๋ฉ์๋ (Operations ํน์ method): ํด๋์ค๊ฐ ์ํํ ์ ์๋ ๋์, ์ฆ ๋ฉ์๋๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฅ ์๋ซ๋ถ๋ถ์ ์์นํ๋ฉฐ, ์์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ์ชฝ ์ ๋ ฌ๋ก ํ๊ธฐํฉ๋๋ค.
์:
login(),calculateTotal(),cancelOrder()๋ฑ
- ์ ์ (Static) ๋ฉค๋ฒ: ์ ์ ์์ฑ์ด๋ ์คํผ๋ ์ด์ ์ ์ด๋ฆ์ ๋ฐ์ค์ ๊ทธ์ด ํํํฉ๋๋ค.
UML ํ์ค์์๋ ์์ฑ๊ณผ ๋ฉ์๋์ ์์๋ ์ค๋ฐ๊ฟ๋ ์ผ๊ด๋๊ฒ ์ ์งํด์ผ ํฉ๋๋ค. ์ค์ ๊ฐ๋ฐํ ๋ด ๋ฌธ์ํ๋ฅผ ์ํด์๋ โํ ๋ด UML ๋ค์ด๋ฐ ๋ฃฐโ์ ๋ณ๋๋ก ์ ์ํด๋๋ฉด ์ข์ต๋๋ค.
2. ๊ด๊ณ (Relationships)
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์ง์ ํ ํ์ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ช ํํ ๋ณด์ฌ์ฃผ๋ ๋ฐ ์์ต๋๋ค. ๊ด๊ณ๋ ์ฃผ๋ก ํ์ดํ๋ก ํํ๋๋ฉฐ, ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ชจ์์ ํ์ดํ๋ ์๋ก ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. ํ์ดํ ๋ฐฉํฅ์ ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
| ๊ด๊ณ ์ ํ | ์๋ฏธ | ํ์ดํ/๊ธฐํธ ํํ | ์ค๋ช |
|---|---|---|---|
| ์ผ๋ฐํ (Generalization) | ์์ ๊ด๊ณ | ๋ถ๋ชจ ํด๋์ค(Superclass)์ ์์ ํด๋์ค(Subclass) ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค. | |
| ์ค์ฒดํ (Realization) | ์ธํฐํ์ด์ค ๊ตฌํ ๊ด๊ณ | ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ implementsํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ ์ ํ์ดํ๋ก ํํํฉ๋๋ค. | |
| ์ฐ๊ด (Association) | ์ฐธ์กฐ ๊ด๊ณ | ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑ์ผ๋ก ์ฐธ์กฐํฉ๋๋ค. ๋ฐฉํฅ์ฑ์ ์ฐธ์กฐ ํ๋ฆ์ ๋ํ๋ ๋๋ค. | |
| ์์กด (Dependency) | ์ผ์์ ์ฌ์ฉ ๊ด๊ณ | ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ ๋ฐํ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ด๊ณ์ ๋๋ค. | |
| ์งํฉ (Aggregation) | ์ฝํ ์ ์ฒด-๋ถ๋ถ ๊ด๊ณ | โ์ ์ฒดโ๊ฐ โ๋ถ๋ถโ์ ํฌํจํ์ง๋ง, ๋ถ๋ถ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ ์ฒด์ ์์กดํ์ง ์์ต๋๋ค. | |
| ํฉ์ฑ (Composition) | ๊ฐํ ์ ์ฒด-๋ถ๋ถ ๊ด๊ณ | ๋ถ๋ถ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ์ ์ฒด์ ์์ ํ ์ข ์๋ ๋ ์ฌ์ฉํฉ๋๋ค. |
์์
์ผํ๋ชฐ ์์คํ ์ ๊ฐ๋ฐํ๋ค๊ณ ๊ฐ์ ํด๋ณด๋ฉด. โ์ฌ์ฉ์(User)โ, โ์ํ(Product)โ, โ์ฃผ๋ฌธ(Order)โ ํด๋์ค์ ์ด๋ค์ ์ํธ์์ฉ์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
classDiagram
class User {
- userId: int
- name: string
- email: string
+ login(): void
+ logout(): void
}
class Product {
- productId: int
- name: string
- price: float
+ getInfo(): string
}
class Order {
- orderId: int
- date: Date
- total: float
+ calculateTotal(): float
}
User "1" --> "1..*" Order : places >
Order "1..*" --> "1..*" Product : contains >
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์์คํ ์ ์ฒญ์ฌ์ง ์ญํ ์ ํ๋ฉฐ, ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ํ์๋ค๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ณต์ ํ๋ ๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ ๋๋ค.
๊ณ ๊ธ ๊ฐ๋ : ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค
๊ฐ์ฒด ์งํฅ ์ค๊ณ์์ ์ถ์ํ(Abstraction)๋ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์์๋ ์ด๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ถ์ ํด๋์ค (Abstract Class): ์ง์ ์ธ์คํด์คํํ ์ ์๋ ํด๋์ค์
๋๋ค. ํด๋์ค ์ด๋ฆ์ _์ดํค๋ฆญ์ฒด_๋ก ํ๊ธฐํ๊ฑฐ๋, ์ด๋ฆ ์๋
{abstract}ํค์๋ ๋๋ยซabstractยป๊ธธ๋ฌ๋ฉง์ผ๋ก ํ์ํฉ๋๋ค. - ์ธํฐํ์ด์ค (Interface): ํด๋์ค๊ฐ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ์คํผ๋ ์ด์
์ ์งํฉ์
๋๋ค. ํด๋์ค ์ด๋ฆ ์์
ยซinterfaceยปํค์๋๋ฅผ ๋ถ์ฌ ๋ช ํํ ๊ตฌ๋ถํฉ๋๋ค.
โ์ค์ฒดํ(Realization)โ์ โ๊ตฌํ(Implementation)โ์ ๊ฐ์ ๊ฐ๋ ์ ๋๋ค. UML ํ์ค์์๋ Realization์ด๋ผ๋ ์ฉ์ด๋ฅผ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์ธ์ ์ฌ์ฉํ ๊น?
ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๊ฐ๋ฐ ๋จ๊ณ์ ๋ฐ๋ผ ๋ค์ํ ๋ชฉ์ ์ผ๋ก ํ์ฉ๋ฉ๋๋ค.
- ๊ฐ๋ ๋จ๊ณ (Conceptual): ์์คํ ์ ํต์ฌ ํด๋์ค์ ๊ด๊ณ๋ง ๋จ์ํ ํํํฉ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง ์ดํด์ ์ด์ ์ ๋ก๋๋ค.
- ๋ช ์ธ ๋จ๊ณ (Specification): ์ค์ ๊ฐ๋ฐ ์ , ํด๋์ค์ ๋ชจ๋ ์์ฑยท๋ฉ์๋ยท๊ด๊ณ๋ฅผ ์์ธํ ์ค๊ณํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์์ค์ ์ฒญ์ฌ์ง์ ๋๋ค.
- ๊ตฌํ ๋จ๊ณ (Implementation): ์ค์ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ๋ฐ์ํ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก, ์ ์ง๋ณด์๋ ํ์ธ์๊ฒ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ ๋ ์ ์ฉํฉ๋๋ค.
๋ ๋์ ๊ฐ๋ฐ์ ์ํ ์ฒซ๊ฑธ์
์ง๊ธ๊น์ง UML ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๊ณ ๊ธ ํ์ฉ๋ฒ๊น์ง ์ดํด๋ณด์์ต๋๋ค. ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋จ์ํ ๊ทธ๋ฆผ ์์ ์ด ์๋๋ผ, ์์คํ ๊ตฌ์กฐ๋ฅผ ๊น์ด ๊ณ ๋ฏผํ๊ณ ๋ณต์กํ ๊ด๊ณ๋ฅผ ๋ช ํํ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ๋๋ค. ์ฒ์์ ์ด์ํ ์ ์์ง๋ง, ๊พธ์คํ ์ฐ์ตํ๋ค ๋ณด๋ฉด ์ฝ๋๋ณด๋ค ๋จผ์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ ์ต๊ด์ด ์๊น๋๋ค. ์ง๊ธ ์งํ ์ค์ธ ํ๋ก์ ํธ๋ ์ฌ์ด๋ ํ๋ก์ ํธ์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์ ์ฉํด๋ณด์ธ์. ์ด ์์ ์๋๊ฐ ์ฌ๋ฌ๋ถ์ ๊ฐ๋ฐ ์์ฐ์ฑ๊ณผ ์ค๊ณ ๋ฅ๋ ฅ์ ํ ๋จ๊ณ ๋์ด์ฌ๋ฆด ๊ฒ์ ๋๋ค.
ใUML Distilledใ๋ UML์ ์ค๋ฌด ๊ด์ ์์ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ์ตํ ์ ์๋ ์ ๋ฌธ์๋ก, Martin Fowler๊ฐ ์งํํ ๊ณ ์ ์ ๋๋ค.