๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programming Language ๐Ÿ’ป/Java โ˜•

[Java] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) - 2. ๋ชจ๋ธ(Model)์ด๋ž€? ๋ชจ๋ธ๋ง, UML, ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ, ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์•Œ์•„๋ณด๊ธฐ

by lxvxxu 2025. 10. 18.

 

๋ชจ๋ธ๋ง (Modeling)

๐Ÿ’ก ๋ชจ๋ธ์˜ ์—ญํ• 

๋ชจ๋ธ๋ง์€ ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ณ , ์ด๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ถ”์ƒํ™”(Abstraction) ๊ณผ์ •์ด๋‹ค.
์ฆ‰, ๋ณต์žกํ•œ ํ˜„์‹ค์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์„ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- ์„œ๋กœ์˜ ํ•ด์„์„ ๊ณต์œ ํ•ด ํ•ฉ์˜๋ฅผ ์ด๋ฃจ๊ฑฐ๋‚˜ ํ•ด์„์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€ํ† 

- ํ˜„์ƒˆ System or ์ถ”ํ›„ ๊ฐœ๋ฐœํ•  System์˜ ์›ํ•˜๋Š” ๋ชจ์Šต์„ ๊ฐ€์‹œํ™”

- System์˜ ๊ตฌ์กฐ + ํ–‰์œ„ ๋ช…์„ธ (ํ‹€ ์ œ๊ณต)

 

- ์ถ”์ƒํ™”(๊ด€๋ จ์ด ์žˆ๋Š” ์  ๋ถ€๊ฐ, ๊ด€๋ จ ์—†๋Š” ๊ฒƒ ๋ฌด์‹œ)์— ๋ฐ”ํƒ•์„ ๋‘๊ณ  ์žˆ๋‹ค.

 

 

๋ชจ๋ธ์˜ ์ฃผ์š” ์—ญํ• 

  1. ํ•ด์„์˜ ๊ณต์œ ์™€ ํ•ฉ์˜
    • ๊ฐœ๋ฐœ์ž, ๊ธฐํš์ž, ๋””์ž์ด๋„ˆ ๋“ฑ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์ด ๋™์ผํ•œ ๊ด€์ ์—์„œ ์‹œ์Šคํ…œ์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  2. ์‹œ์Šคํ…œ์˜ ๊ฐ€์‹œํ™”
    • ํ˜„์žฌ ๋˜๋Š” ๋ฏธ๋ž˜์˜ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์ดํ•ด๋ฅผ ๋•๋Š”๋‹ค.
  3. ๋ช…์„ธํ™”(Specification)
    • ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ ๋ฐ ํ–‰์œ„๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค.
  4. ๊ตฌ์ถ•์˜ ํ‹€ ์ œ๊ณต
    • ๋ชจ๋ธ์€ ์‹œ์Šคํ…œ์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ฒญ์‚ฌ์ง„(์„ค๊ณ„๋„) ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ”น ์š”์•ฝ: ๋ชจ๋ธ์€ ‘ํ˜„์‹ค์˜ ๋ณต์žก์„ฑ์„ ๋‹จ์ˆœํ™”ํ•œ ํ‘œํ˜„’์ด๋ฉฐ, ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์˜ ๊ณตํ†ต ์–ธ์–ด๋‹ค.

 



 

UML ๋‹ค์ด์–ด๊ทธ๋žจ

๋Œ€ํ‘œ์ ์ธ ์‹œ์Šคํ…œ ๋ชจ๋ธ๋ง ์–ธ์–ด

UML (Unified Modeling Language)

UML์ด๋ž€?

  • UML์€ ๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์„ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋ช…์„ธํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ๋ชจ๋ธ๋ง ์–ธ์–ด์ด๋‹ค.
  • 1990๋…„๋Œ€์— Grady Booch, James Rumbaugh, Ivar Jacobson์ด ๊ฐ๊ฐ์˜ ๋ฐฉ๋ฒ•๋ก (OOAD, OMT, OOSE)์„ ํ†ตํ•ฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ๋‹ค.
  • ํ˜„์žฌ๋Š” UML 2.5๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ํ‘œ์ค€์ด๋‹ค.

UML์˜ ๋ชฉ์ 

  • ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ํ–‰์œ„๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„
  • ๊ฐ์ฒด ๊ฐ„ ๊ด€๊ณ„ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ช…ํ™•ํžˆ ์ •์˜
  • ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต ๋„๊ตฌ๋กœ ํ™œ์šฉ

 

UML ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ์ข…๋ฅ˜

๋ถ„๋ฅ˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์œ ํ˜• ๋ชฉ์ 
๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ
(structure diagram)
ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (class diagram) ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
๊ฐ์ฒด ๋‹ค์ด์–ด๊ทธ๋žจ (object diagram) ๊ฐ์ฒด ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
๋ณตํ•ฉ์ฒด ๊ตฌ์กฐ ๋‹ค์ด์–ด๊ทธ๋žจ (composite structure diagram) ๋ณตํ•ฉ ๊ตฌ์กฐ์˜ ํด๋ž˜์Šค์™€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
๋ฐฐ์น˜ ๋‹ค์ด์–ด๊ทธ๋žจ (deployment diagram) ์†Œํ”„ํŠธ์›จ์–ด, ํ•˜๋“œ์›จ์–ด, ๋„คํŠธ์›Œํฌ๋ฅผ ํฌํ•จํ•œ ์‹คํ–‰ ์‹œ์Šคํ…œ์˜ ๋ฌผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
์ปดํฌ๋„ŒํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ (component diagram) ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
ํŒจํ‚ค์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ (package diagram) ํด๋ž˜์Šค๋‚˜ ์œ ์ฆˆ ์ผ€์ด์Šค ๋“ฑ์„ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๋ชจ๋ธ ์š”์†Œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ด ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํŒจํ‚ค์ง€๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
ํ–‰์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ
(behavior diagram)
ํ™œ๋™ ๋‹ค์ด์–ด๊ทธ๋žจ (activity diagram) ์—…๋ฌด ์ฒ˜๋ฆฌ ๊ณผ์ •์ด๋‚˜ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์„ ํ‘œํ˜„ํ•œ๋‹ค.
์ƒํƒœ ๋จธ์‹  ๋‹ค์ด์–ด๊ทธ๋žจ (state machine diagram) ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
์œ ์ฆˆ ์ผ€์ด์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (use case diagram) ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์‹œ์Šคํ…œ ํ–‰์œ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ - ์ˆœ์ฐจ ๋‹ค์ด์–ด๊ทธ๋žจ (interaction diagram - sequence diagram) ์‹œ๊ฐ„ ํ๋ฆ„์— ๋”ฐ๋ฅธ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ‘œํ˜„ํ•œ๋‹ค.
์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ - ์ƒํ˜ธ์ž‘์šฉ ๊ฐœ์š” ๋‹ค์ด์–ด๊ทธ๋žจ (interaction diagram - interaction overview diagram) ์—ฌ๋Ÿฌ ์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ ์‚ฌ์ด์˜ ์ œ์–ด ํ๋ฆ„์„ ํ‘œํ˜„ํ•œ๋‹ค.
์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ - ํ†ต์‹  ๋‹ค์ด์–ด๊ทธ๋žจ (interaction diagram - communication diagram) ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ‘œํ˜„ํ•œ๋‹ค.
์ƒํ˜ธ์ž‘์šฉ ๋‹ค์ด์–ด๊ทธ๋žจ - ํƒ€์ด๋ฐ ๋‹ค์ด์–ด๊ทธ๋žจ (interaction diagram - timing diagram) ๊ฐ์ฒด ์ƒํƒœ ๋ณ€ํ™”์™€ ์‹œ๊ฐ„ ์ œ์•ฝ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

 


ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Class Diagram)

์ •์˜

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์‹œ์Šคํ…œ์˜ ์ •์ ์ธ ๊ตฌ์กฐ(Static Structure)๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค.
์ฆ‰, ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š” ํด๋ž˜์Šค, ๊ทธ ์†์„ฑ, ์—ฐ์‚ฐ(๋ฉ”์„œ๋“œ), ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๐Ÿง  ์ •์  ๊ตฌ์กฐ๋ž€?
์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ทธ ๊ด€๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

- System์˜ "์ •์ "์ธ ๊ตฌ์กฐ ํ‘œํ˜„

- ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค

- Class์™€ ๊ทธ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„ ํ‘œํ˜„

 

โ€ป Class
1) ๋™์ผ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ๋™์ผ ํ–‰์œ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” object์˜ ์ง‘ํ•ฉ
2) object๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ค๊ณ„๋„

 

ํด๋ž˜์Šค์˜ ๊ฐœ๋…

  • ๋™์ผํ•œ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ
  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„(Blueprint) ์—ญํ• ์„ ํ•œ๋‹ค.

UML์—์„œ์˜ ํด๋ž˜์Šค ํ‘œํ˜„

UML์—์„œ๋Š” ํด๋ž˜์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ตฌ์—ญ ๋ฐ•์Šค(Box)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

๊ฐ€์žฅ ์œ— ๋ถ€๋ถ„(์ƒ๋‹จ) ํด๋ž˜์Šค ์ด๋ฆ„
(Class Name)
ํ•™์ƒ  
์ค‘๊ฐ„ ๋ถ€๋ถ„
(์ค‘๋‹จ)
์†์„ฑ (๋ณ€์ˆ˜, ๋ฐ์ดํ„ฐ)
(Attributes)
- ์ด๋ฆ„
- ์ „๊ณต
- ํ•™๋ฒˆ
- ๊ณผ๋ชฉ
์†์„ฑ์€ ๊ทธ ๊ฐ์ฒด๋งˆ๋‹ค ํŠน์ • ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
- type : string, integer, float, Boolean
- operation์˜ signature
๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„
(ํ•˜๋‹จ)
์—ฐ์‚ฐ (๋ฉ”์„œ๋“œ, ๊ธฐ๋Šฅ)
(Operations)
+์ˆ˜๊ฐ•ํ•˜๋‹ค()  

 

์ ‘๊ทผ ์ œ์–ด์ž : public, private, protected, package

์‹ค์šฉ์ ์œผ๋กœ ํด๋ž˜์Šค ํ‘œ๊ธฐํ•˜๋Š” ๋ฒ•

: ์‹ค์ œ๋กœ๋Š” ์†์„ฑ๊ณผ operation์„ ๋ชจ๋‘ ์ ์ง€ ์•Š์•„๋„ ์ƒ๊ด€ ์—†๋‹ค.

 

์˜ˆ์‹œ :

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Student             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ -name : String      โ”‚
โ”‚ -studentId : int    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ +registerCourse()   โ”‚
โ”‚ +viewGrades()       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

์ ‘๊ทผ์ œ์–ด์ž ํ‘œ๊ธฐ๋ฒ•

   
+ public (๊ณต๊ฐœ)
- private (๋น„๊ณต๊ฐœ)
# protected (์ƒ์† ํ—ˆ์šฉ)

์‹ค์ œ UML ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ๋Š” ๋ชจ๋“  ์†์„ฑ๊ณผ ์—ฐ์‚ฐ์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
์‹œ์Šคํ…œ ์ดํ•ด์— ํ•„์š”ํ•œ ํ•ต์‹ฌ ์ •๋ณด๋งŒ ํ‘œํ˜„ํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.


ํด๋ž˜์Šค ๊ฐ„ ๊ด€๊ณ„ (Relationships)

๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์€ ๋‹จ์ผ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ, ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋™์ž‘ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ system์€ ์ƒํ˜ธ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

No. ๊ด€๊ณ„  ์„ค๋ช…
1 ์—ฐ๊ด€ ๊ด€๊ณ„
(association)
- ํด๋ž˜์Šค๋“ค์ด ๊ฐœ๋…์ƒ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
- ์—ฐ๊ด€๋œ ํด๋ž˜์Šค ์ƒ์— ์‹ค์„ ์ด๋‚˜ ํ™”์‚ดํ‘œ๋ฅผ ๊ทธ์–ด ํ‘œ์‹œํ•˜๋ฉฐ,๋ณดํ†ต์€ ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์ผ ๋•Œ ํ‘œํ˜„ํ•œ๋‹ค.
- ์—ฐ๊ด€ ๊ด€๊ณ„ ์ด๋ฆ„
   ๋‘ ํด๋ž˜์Šค ์ƒ์ด์˜ ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
- ์—ฐ๊ด€ ๊ด€๊ณ„์—์„œ ๊ฐ Class Object(๊ฐ์ฒด)์˜ ์—ญํ•  (์ด๋ฆ„)
   ํด๋ž˜์Šค ๋ฐ”๋กœ ์˜† ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„  ๊ฐ€๊นŒ์ด์— ๊ธฐ์ˆ ํ•œ๋‹ค.
  ๐Ÿ‘‰ ์—ญํ•  ์ด๋ฆ„์€ ์—ฐ๊ด€๋œ class์˜ object๋“ค์ด ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์˜ ์ด๋ฆ„์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค.
        = ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ field(์†์„ฑ) ์ด๋ฆ„์œผ๋กœ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.



- ๋‹ค์ค‘์„ฑ (multiplicity)
 ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋Œ€ํŽธ ๊ฐ์ฒด๋ฅผ ๋ช‡ ๊ฐœ๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€
 ์—ฐ๊ฐ„ ๊ด€๊ณ„์˜ Class Object์˜ ์—ญํ•  ์ด๋ฆ„๊ณผ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„  ๊ฐ€๊นŒ์ด์— ํ‘œ๊ธฐํ•œ๋‹ค.

ํ•˜๋‹จ์— ์œ„์˜ ํ‘œ๋ฅผ ๋ณด๊ฐ•ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Œ.

- ์—ฐ๊ด€ ํด๋ž˜์Šค (Association Class)
  ์—ฐ๊ด€ ๊ด€๊ณ„์— ์ถ”๊ฐ€ํ•  ์†์„ฑ์ด๋‚˜ ํ–‰์œ„๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ.
   ์˜ˆ: “์„ฑ์ (Grade)”์€ Student์™€ Course ๊ฐ„์˜ ์—ฐ๊ด€ ์ž์ฒด์— ์กด์žฌํ•˜๋Š” ์ •๋ณด์ด๋‹ค.
์‚ฌ๊ฑด ์ด๋ ฅ(event history) ํ‘œํ˜„,  ??
- ์žฌ๊ท€์  ์—ฐ๊ด€ ๊ด€๊ณ„ (Recursive Association)
  ๋™์ผํ•œ ํด๋ž˜์Šค์— ์†ํ•œ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ์—ฐ๊ด€ ๊ด€๊ณ„
  ์˜ˆ: ์ง์›(Employee) ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ๊ด€๋ฆฌ์ž์™€ ํ•˜์œ„ ์ง์›์„ ํ‘œํ˜„ํ•  ๋•Œ.

 

์—ญํ• ์„ ํด๋ž˜์Šค๋กœ ํ•  ๋–„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ??


2 ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„
(generalization)
๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋…์˜ ์ƒ์† ๊ด€๊ณ„๋‹ค. ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒ์œ„ ๊ฐœ๋…์ผ ๋•Œ์˜ IS-A ๊ด€๊ณ„๋ฅผ UML์—์„œ๋Š” ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„๋กœ ๋ชจ๋ธ๋งํ•˜๋ฉฐ, ์†์ด ๋นˆ ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•œ๋‹ค.
- ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ์—ฐ์‚ฐ์„ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค.
- "is a kind of" ๊ด€๊ณ„๋กœ ํ•ด์„๋œ๋‹ค.
์˜ˆ : ๊ฐ€์ „์ œํ’ˆ(์ƒ์œ„) - ์„ธํƒ๊ธฐ, TV, ์‹๊ธฐ์„ธ์ฒ™๊ธฐ(ํ•˜์œ„)
3 ์ง‘ํ•ฉ ๊ด€๊ณ„
(composition, aggregation)
ํด๋ž˜์Šค๋“ค ์‚ฌ์ด์˜ ์ „์ฒด-๋ถ€๋ถ„(Part-Whole) ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ง‘์•ฝ(aggregation) ๊ด€๊ณ„์™€ ํ•ฉ์„ฑ(composition) ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.
4 ์˜์กด ๊ด€๊ณ„
(dependency)
ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ž ๊น ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์—ฐ๊ด€๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋ณดํ†ต ํ•œ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๋™์•ˆ๋งŒ ์œ ์ง€๋˜๋Š” ๋งค์šฐ ์งง์€ ์ˆ˜๋ช…์ด๋ฉฐ, ์ ์„  ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•œ๋‹ค.
5 ์‹ค์ฒดํ™” ๊ด€๊ณ„
(realization)
์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฑ…์ž„๋“ค์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ƒ์†๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋นˆ ์‚ผ๊ฐํ˜• ๋จธ๋ฆฌ์— ์ ์„ ์„ ์‚ฌ์šฉํ•ด ํ‘œ์‹œํ•œ๋‹ค.
 
+) ์—ฐ๊ด€ ๊ด€๊ณ„

  ๐Ÿ‘‰ ์—ญํ•  ์ด๋ฆ„์€ ์—ฐ๊ด€๋œ class์˜ object๋“ค์ด ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์˜ ์ด๋ฆ„์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค.
        = ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ field(์†์„ฑ) ์ด๋ฆ„์œผ๋กœ ๊ทธ๋Œ€๋กœ ์“ด๋‹ค.

์˜ ์˜ˆ์‹œ

 

class Customer {
    // ์—ญํ•  ์ด๋ฆ„ orders → ๋‹ค์ค‘์„ฑ 0..* → ์ปฌ๋ ‰์…˜ ํƒ€์ž…
    private final List<Order> orders = new ArrayList<>();
}

class Order {
    // ์—ญํ•  ์ด๋ฆ„ customer → ๋‹ค์ค‘์„ฑ 1 → ๋‹จ์ผ ์ฐธ์กฐ
    private Customer customer;
}

 

 

ํ‘œ 1-5 ๋‹ค์ค‘์„ฑ ํ‘œ์‹œ (๋ณด์™„ํ•œ ๋ฒ„์ „)
๋‹ค์ค‘์„ฑ ํ‘œ๊ธฐ ์˜๋ฏธ(๋ฒ”์œ„) ๊ด€๊ณ„ ์ฝ๋Š” ๋ฒ• ์˜ˆ์‹œ
1 ์ •ํ™•ํžˆ 1 A(1) — B(1) = 1โŸท1 ์‚ฌ์šฉ์ž 1๋ช…์€ ํ”„๋กœํ•„ 1๊ฐœ๋ฅผ ๊ฐ€์ง„๋‹ค ํ•„์ˆ˜ ๋‹จ์ผ ๊ด€๊ณ„
0..1 0 ๋˜๋Š” 1 A(1) — B(0..1) = 1โŸท0..1 ์‚ฌ์šฉ์ž 1๋ช…์€ ์ถ”์ฒœ์ธ์ด ์—†์„ ์ˆ˜๋„/์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค ์„ ํƒ์  ๋‹จ์ผ(optional)
* ๋˜๋Š” 0..* 0 ์ด์ƒ, ์ƒํ•œ ์—†์Œ A(1) — B(0..) = 1โŸท ์‚ฌ์šฉ์ž 1๋ช…์€ ์ฃผ๋ฌธ์„ 0๊ฐœ ์ด์ƒ ๊ฐ€์ง„๋‹ค ์ƒํ•œ ๋ฏธ์ • ์‹œ ๋ณดํ†ต ‘*’ ์‚ฌ์šฉ
1..* 1 ์ด์ƒ, ์ƒํ•œ ์—†์Œ A(1) — B(1..) = 1โŸท1.. ์ฃผ๋ฌธ 1๊ฑด์€ ์ฃผ๋ฌธํ•ญ๋ชฉ์„ ์ตœ์†Œ 1๊ฐœ ์ด์ƒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค “์ตœ์†Œ 1๊ฐœ” ๊ฐ•์ œ
n ์ •ํ™•ํžˆ n๊ฐœ A(1) — B(n) ์‚ผ์ธ๋ฐฉ 1๊ฐœ๋Š” ์ฐธ๊ฐ€์ž ์ •ํ™•ํžˆ 3๋ช…์„ ๊ฐ€์ง„๋‹ค ๊ณ ์ • ์นด๋””๋„๋ฆฌํ‹ฐ
m..n m ์ด์ƒ n ์ดํ•˜ A(1) — B(m..n) ํŒ€ 1๊ฐœ๋Š” ํŒ€์›์„ 2~5๋ช… ๊ฐ€์ง„๋‹ค ๋ฒ”์œ„ ์ œ์•ฝ
๊ฐ’ ์ง‘ํ•ฉ ์˜ˆ: 1, 2, 6 ๋ช…์‹œ๋œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜ A(1) — B(1,2,6) ํŒจํ‚ค์ง€ 1๊ฐœ๋Š” ์•„์ดํ…œ์„ 1๊ฐœ/2๊ฐœ/6๊ฐœ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค ๋ถˆ์—ฐ์† ํ—ˆ์šฉ(ํ‘œ์ค€ ํ‘œ๊ธฐ ํ™•์žฅ)
ํ˜ผํ•ฉ ์˜ˆ: 1, 3..5 1 ๋˜๋Š” 3~5๊ฐœ A(1) — B(1,3..5) ํ–‰์‚ฌ 1๊ฐœ๋Š” ์ขŒ์„์„ 1๊ฐœ ๋˜๋Š” 3~5๊ฐœ ์˜ˆ์•ฝํ•œ๋‹ค ๋ถˆ์—ฐ์†+๊ตฌ๊ฐ„ ํ˜ผํ•ฉ(ํ‘œ์ค€ ํ‘œ๊ธฐ ํ™•์žฅ)

๋๋‹จ ์กฐํ•ฉ์œผ๋กœ ์ฝ๋Š” ๋ฒ• ์š”์•ฝ

  • 1 — 1: ์ผ๋Œ€์ผ(One-to-One)
  • 1 — *: ์ผ๋Œ€๋‹ค(One-to-Many)
  • * — 1: ๋‹ค๋Œ€์ผ(Many-to-One)
  • *— *: ๋‹ค๋Œ€๋‹ค(Many-to-Many)

์‚ฌ์šฉ ํŒ

  • ๋‹ค์ค‘์„ฑ์€ “์–‘ ๋”์— ๊ฐ๊ฐ ํ‘œ๊ธฐํ•œ๋‹ค. ์˜ˆ: ์ฃผ๋ฌธ(1) — (1..*) ์ฃผ๋ฌธํ•ญ๋ชฉ.
  • “*”๋Š” ์ƒํ•œ ๋ฌดํ•œ์„ ๋œปํ•œ๋‹ค. ์ƒํ•œ์ด ์žˆ์œผ๋ฉด ์ •์ˆ˜๋‚˜ ๊ตฌ๊ฐ„์œผ๋กœ ๋ช…์‹œํ•˜์ž.
  • ๋ชจ๋ธ ์ œ์•ฝ์„ ์—„๋ฐ€ํžˆ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋ฉด m..n ๋˜๋Š” ๊ฐ’ ์ง‘ํ•ฉ ํ‘œ๊ธฐ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
๋‹ค์ค‘์„ฑ์— ๋”ฐ๋ผ ๊ตฌํ˜„ ํƒ€์ž…์ด ๋‹ฌ๋ผ์ง„๋‹ค.
1 -> ๋‹จ์ผ ์ฐธ์กฐ (Customertype)
0..1 -> Optional or nullable

 

0..* -> List ๋“ฑ Collection
1..* -> List<...> + "๋น„์–ด ์žˆ์ง€ ์•Š์Œ" ์ œ์•ฝ
 

 

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๋ด์•ผ๋จ

 

 

5๏ธโƒฃ ์ง‘ํ•ฉ ๊ด€๊ณ„ (Aggregation / Composition)

๊ตฌ๋ถ„์˜๋ฏธ์ƒ๋ช…์ฃผ๊ธฐUML ํ‘œ๊ธฐ
Aggregation (์ง‘์•ฝ) ์ „์ฒด์™€ ๋ถ€๋ถ„์˜ ๊ด€๊ณ„, ๋ถ€๋ถ„์ด ๋…๋ฆฝ์  ๋…๋ฆฝ์  ๋นˆ ๋งˆ๋ฆ„๋ชจ(โ—‡)
Composition (ํ•ฉ์„ฑ) ์ „์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ๋ถ€๋ถ„๋„ ์‚ฌ๋ผ์ง ์ข…์†์  ์ฑ„์›Œ์ง„ ๋งˆ๋ฆ„๋ชจ(โ—†)

์˜ˆ์‹œ:

 
Company โ—‡โ”€โ”€ Employee (์ง‘์•ฝ) House โ—†โ”€โ”€ Room (ํ•ฉ์„ฑ)

6๏ธโƒฃ ์˜์กด ๊ด€๊ณ„ (Dependency)

  • ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ž ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„(์ž„์‹œ์  ๊ด€๊ณ„)
  • ์˜ˆ: ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์ฐธ์กฐ๋  ๋•Œ
  • UML์—์„œ ์ ์„  ํ™”์‚ดํ‘œ(→) ๋กœ ํ‘œํ˜„

์˜ˆ์‹œ:

 
Order → PaymentProcessor

7๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์‹ค์ฒดํ™” ๊ด€๊ณ„ (Interface & Realization)

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํŠน์ • ๊ธฐ๋Šฅ์˜ “์ฑ…์ž„”์„ ์ •์˜ํ•œ ์ถ”์ƒ์  ๊ฐœ๋…์ด๋‹ค.
  • ์‹ค์ฒดํ™”(Realization) ๊ด€๊ณ„๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • “can do this” ๊ด€๊ณ„๋กœ ํ•ด์„๋œ๋‹ค.

์˜ˆ์‹œ:

 
interface RemoteControl { void powerOn(); void powerOff(); } class Television implements RemoteControl { ... }

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Sequence diagram)

๊ฐœ๋…

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๊ฐ์ฒด๋“ค์ด ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •์„ ํ‘œํ˜„ํ•œ๋‹ค.
์ฆ‰, **์‹œ์Šคํ…œ์˜ ๋™์ ์ธ ํ–‰์œ„(Behavior)**๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค.

 

โ– ๊ฐ์ฒด๋“ค์ด ์–ด๋–ป๊ฒŒ ๊ต๋ฅ˜ํ•˜๋Š”์ง€ ๋ณด์—ฌ์คŒ
- Dimension - time
โ– ๊ฐ์ฒด, ์‹ค์„  ํ™”์‚ดํ‘œ๋กœ ๊ทธ๋ ค์ง€๋Š” ๋ฉ”์‹œ์ง€ ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์ง ์ง„
ํ–‰ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์‹œ๊ฐ„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.


- ๊ฐ์ฒด

โ–์ƒ๋ช…์„ (lifeline)
- ๊ฐ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ๋ป—์–ด๊ฐ€๋Š” ์‡„์„ 
โ–์‹คํ–‰(activation)
- ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜คํผ๋ ˆ์ด์…˜


- ๋ฉ”์‹œ์ง€

ํ˜ธ์ถœ(call) ๋ฉ”์‹œ์ง€
- ์ˆ˜์‹  ๊ฐ์ฒด๊ฐ€ ์˜คํผ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๊นŒ์ง€ ์†ก์‹  ๊ฐ์ฒด๋Š” ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค. 
- ํ˜ธ์ถœ ๋ฉ”์‹œ์ง€์™€ ๋‹ต์‹  ๋ฉ”์‹œ์ง€


- ์‹œ๊ฐ„

 ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค

๊ตฌ์„ฑ ์š”์†Œ

์š”์†Œ์„ค๋ช…
๊ฐ์ฒด(Object) ๋‹ค์ด์–ด๊ทธ๋žจ ์ƒ๋‹จ์— ์œ„์น˜, ์ด๋ฆ„ ์•„๋ž˜์— ์ˆ˜์ง์„  ํ‘œ์‹œ
์ƒ๋ช…์„ (Lifeline) ๊ฐ์ฒด์˜ ์กด์žฌ ๊ธฐ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ ์„ 
ํ™œ์„ฑ ๊ตฌ๊ฐ„(Activation) ๊ฐ์ฒด๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ๊ฐ„ (์ง์‚ฌ๊ฐํ˜• ๋ธ”๋ก)
๋ฉ”์‹œ์ง€(Message) ๊ฐ์ฒด ๊ฐ„ ํ˜ธ์ถœ ๋˜๋Š” ๋ฐ˜ํ™˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ™”์‚ดํ‘œ
์‹œ๊ฐ„(Time) ์œ„์—์„œ ์•„๋ž˜๋กœ ํ๋ฅด๋Š” ์‹œ๊ฐ„์˜ ์ง„ํ–‰

์˜ˆ์‹œ

์ž๋™์ฐจ ํ‚ค๋กœ ์ž๋™์ฐจ ์ž ๊ธˆ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค

  1. CarOwner๊ฐ€ CarKey์˜ lock() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  2. CarKey๋Š” Car์˜ lockDoor() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  3. Car๋Š” ๋ฌธ์„ ์ž ๊ทธ๊ณ , ๋ผ์ดํŠธ๋ฅผ ๊นœ๋ฐ•์ด๋ฉฐ, ๊ฒฝ์  ์†Œ๋ฆฌ๋ฅผ ๋‚ธ๋‹ค.

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ:

CarOwner → CarKey : lock()
CarKey → Car : lockDoor()
Car → Car : blinkLight()
Car → Car : beepSound()

๐Ÿ” ํ•ต์‹ฌ ์š”์•ฝ

๊ตฌ๋ถ„๋‚ด์šฉ
๋ชจ๋ธ๋ง ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •
UML ๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์„ ์‹œ๊ฐํ™”ํ•˜๊ณ  ๋ช…์„ธํ™”ํ•˜๋Š” ํ‘œ์ค€ ์–ธ์–ด
ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์‹œ์Šคํ…œ์˜ ์ •์  ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„
์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ๊ฐ์ฒด ๊ฐ„ ๋ฉ”์‹œ์ง€ ๊ตํ™˜์˜ ์ˆœ์„œ๋ฅผ ํ‘œํ˜„
๊ด€๊ณ„์˜ ์ข…๋ฅ˜ ์—ฐ๊ด€, ์ผ๋ฐ˜ํ™”, ์ง‘์•ฝ, ํ•ฉ์„ฑ, ์˜์กด, ์‹ค์ฒดํ™” ๋“ฑ