CodeGym/Java Blog/๋ฌด์ž‘์œ„์˜/UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ํšŒ์›

์†Œ๊ฐœ

"๋‘ ๋ฒˆ ์ธก์ •ํ•˜๊ณ  ํ•œ ๋ฒˆ ์ž๋ฅด์‹ญ์‹œ์˜ค"๋ผ๋Š” ๋ง์„ ๋ชจ๋‘๋“ค ๋“ค์–ด ๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ์ง„์ •ํ•œ ์กฐ์–ธ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ธฐ ์ „์— ํ•ญ์ƒ ๊ตฌํ˜„์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋Š” ๋™์•ˆ ์ข…์ข… ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ƒํ˜ธ ์ž‘์šฉ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ข…์ข… ๊ฐ€์žฅ ์ •ํ™•ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

UML์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๊ด€๋ จ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด UML์ด ๋‹ค์ด์–ด๊ทธ๋žจ, ํ™”์‚ดํ‘œ ๋ฐ ์‚ฌ๊ฐํ˜•๊ณผ ๊ด€๋ จ์ด ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UML์€ Unified Modeling Language์˜ ์•ฝ์ž์ž„์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ฉ์€ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์šฐ๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ UML์„ ์•„๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ณตํ†ต์–ด์ž…๋‹ˆ๋‹ค.

์œ„ํ‚คํ”ผ๋””์•„์— ๋”ฐ๋ฅด๋ฉด,

"UML์€ ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ๋ถ„์•ผ์˜ ๋ฒ”์šฉ ๊ฐœ๋ฐœ ๋ชจ๋ธ๋ง ์–ธ์–ด์ž…๋‹ˆ๋‹ค."
๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ถ”์ธกํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ UML์— ์‚ฌ์–‘์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. UML 2 ์‚ฌ์–‘๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Object Management Group ์›น์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด ๊ทธ๋ฃน์€ UML ์‚ฌ์–‘์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. UML์ด ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๋„ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. UML ๋‹ค์ด์–ด๊ทธ๋žจ์—๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. Wikipedia์—๋Š” โ€‹โ€‹๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ UML ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. UML ๋‹ค์ด์–ด๊ทธ๋žจ . UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ "Head First Design Patterns"๋ผ๋Š” ์ฑ…์„ ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . UML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””์ž์ธ ํŒจํ„ด์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์€ UML์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

IDE์—์„œ UML๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค. IntelliJ IDEA๋ฅผ IDE๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. IntelliJ IDEA Ultimate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ "UML ์ง€์›" ํ”Œ๋Ÿฌ๊ทธ์ธ์ด "์ฆ‰์‹œ" ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์•„๋ฆ„๋‹ค์šด ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Ctrl+N ๋˜๋Š” "ํƒ์ƒ‰" -> "ํด๋ž˜์Šค" ๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ArrayList ํด๋ž˜์Šค๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํด๋ž˜์Šค ์ด๋ฆ„์˜ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด์—์„œ "๋‹ค์ด์–ด๊ทธ๋žจ" -> "๋‹ค์ด์–ด๊ทธ๋žจ ํŒ์—… ํ‘œ์‹œ"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์•„๋ฆ„๋‹ค์šด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์–ป์Šต๋‹ˆ๋‹ค. UML: ์ด๋ก ์—์„œ ์‹ค์Šต์œผ๋กœ - 2 ํ•˜์ง€๋งŒ ์ง์ ‘ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? Ultimate ๋ฒ„์ „์ด ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? IntelliJ IDEA Community Edition์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด ๊ตฌ์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ,. ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ๋„๊ตฌ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ทธ๊ฒƒ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ Graphviz ์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ bin ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ IntelliJ IDEA์—์„œ ๋ฉ”๋‰ด์˜ File -> Settings๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ์ฐฝ์—์„œ "ํ”Œ๋Ÿฌ๊ทธ์ธ" ๋ฒ”์ฃผ๋ฅผ ์„ ํƒํ•˜๊ณ  "๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฐพ์•„๋ณด๊ธฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ๋‹ค์Œ PlantUML ํ†ตํ•ฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. PlantUML์˜ ์žฅ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ "dot"๋ผ๋Š” ๊ทธ๋ž˜ํ”„ ์„ค๋ช… ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UML์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋„ํŠธ ์–ธ์–ด๊ฐ€ PlantUML ์ด์ƒ์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋ณดํŽธ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„๋ž˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ IDE๋ฟ๋งŒ ์•„๋‹ˆ๋ผ planttext.com ์—์„œ๋„ ์˜จ๋ผ์ธ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.. PlantUML ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ ํ›„ "ํŒŒ์ผ" -> "์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "UML ํด๋ž˜์Šค" ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ํ…œํ”Œ๋ฆฟ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๊ณ  ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ…์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ ค๋ฉด PlantUML ๋งค๋‰ด์–ผ(plantuml class-diagram)์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. UML: ์ด๋ก ์—์„œ ์‹ค์Šต์œผ๋กœ - 3์ด๋Ÿฌํ•œ ์ž๋ฃŒ์— ์˜์กดํ•˜์—ฌ UML ๋‹ค์ด์–ด๊ทธ๋žจ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋‹ค์Œ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
IDEA์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด "๋ณด๊ธฐ" -> "๋„๊ตฌ ์ฐฝ" -> "PlantUML"์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•๋งŒ ์–ป์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค ๊ด€๊ณ„๋ฅผ ์‹คํ˜„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ด€๊ณ„๋Š” ์ ์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ค๋ด…์‹œ๋‹ค:
interface List
List <|.. ArrayList
List <|.. LinkedList
List๋Š” Collection ํด๋ž˜์Šค์˜ ์ž์‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค . ์ฆ‰, Collection ์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค . ์ด ๊ด€๊ณ„๋ฅผ ์ผ๋ฐ˜ํ™”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์—ฐ์† ์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ค๋ด…์‹œ๋‹ค:
interface Collection
Collection <|-- List
๋‹ค์Œ ์œ ํ˜•์˜ ๊ด€๊ณ„๋ฅผ ์œ„ํ•ด ArrayList ํด๋ž˜์Šค ์„ค๋ช…์— ์š”์†Œ์˜ ํŒจํ‚ค์ง€ ๊ฐœ์ธ ๋ฐฐ์—ด ์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค .
~Object[] elementData
์ด์ œ ArrayList์— ์ผ๋ถ€ ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ ์ง‘๊ณ„ ๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด๋ชฉ๋ก๋‹ค๋ฅธ ๊ฐœ์ฒด๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์ง‘๊ณ„์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ๊ฐœ์ฒด๋Š” ๋ชฉ๋ก ์—†์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง‘๊ณ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋Š” ๋ชฉ๋ก์˜ ํ•„์ˆ˜ ๋ถ€๋ถ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์ˆ˜๋ช…์€ ๋ชฉ๋ก์˜ ์ˆ˜๋ช…๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์ง‘ํ•ฉ"์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๋ผํ‹ด์–ด์—์„œ ์™”์œผ๋ฉฐ "์กฐ๋ฆฝ๋œ", ์ฆ‰ ๋ฌด์–ธ๊ฐ€๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์œผ๋กœ ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํ™œ์—๋Š” ํŽŒํ”„์™€ ๋ชจํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ํŽŒํ”„ ์–ด์…ˆ๋ธ”๋ฆฌ(์ง‘ํ•ฉ์ฒด)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ ์ž์ฒด๋Š” ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒ๋งคํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง‘๊ณ„์—์„œ ๋นˆ ๋งˆ๋ฆ„๋ชจ์™€ ์—ฐ์† ์„ ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
class Object{
}
ArrayList o- Object
์ด์ œ ์šฐ๋ฆฌ๋Š” ArrayList ์™€ ๋‹ฌ๋ฆฌ LinkedList ํด๋ž˜์Šค๊ฐ€ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ธ Node ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ Node ๋Š” LinkedList ์˜ ์ผ๋ถ€ ์ด๋ฉฐ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ๋Š” ์ฝ˜ํ…์ธ  ์ž์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LinkedList ์— ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ์™€ ์ด์ „ ๋ฐ ๋‹ค์Œ ๋…ธ๋“œ ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.. ์ด ๊ด€๊ณ„๋ฅผ ๊ตฌ์„ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ์ง€ํŠธ(๊ตฌ์„ฑ ๋ถ€ํ’ˆ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฒƒ)์— ์ฑ„์›Œ์ง„ ๋งˆ๋ฆ„๋ชจ๊ผด๋กœ ์—ฐ์†์„ ์„ ๊ทธ๋ ค์„œ ๋ฌ˜์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๊ด€๊ณ„๋ฅผ ํ…์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
class Node{
}
LinkedList *-- Node
์ด์ œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์œ ํ˜•์˜ ๊ด€๊ณ„์ธ ์ข…์†์„ฑ์„ ๋ฌ˜์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ์ƒ์†ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LinkedList ์™€ ArrayList๋Š” ListIterator๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์„ ์ ์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
์ด ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค. UML: ์ด๋ก ์—์„œ ์‹ค์Šต์œผ๋กœ - 4ํ•„์š”ํ•œ ๋งŒํผ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ๋Ÿฌํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ด ์ดˆ์ž์—ฐ์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ž์‹ ์˜ ์ž‘์—…์„ ํ•  ๋•Œ ์†์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž˜๋ชป๋œ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ด๋ฏธ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ธ ํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ์ดˆ๊ธฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ƒ๊ฐํ•˜๊ณ  ํด๋ž˜์Šค ๊ตฌ์กฐ์˜ ๋‹จ์ ์„ ์‹๋ณ„ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณผ ๋งŒํ•œ ์ข‹์€ ์ด์œ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‚˜์š”? :)

์˜คํ† ๋ฉ”์ด์…˜

PlantUML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด IDEA์—๋Š” SketchIT ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์ง€๋งŒ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์™„์ „ํžˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ทธ๋ฆฌ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ด ์ž˜๋ชป ๊ทธ๋ ค์กŒ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(์ƒ์†์œผ๋กœ ํ‘œ์‹œ๋จ). ์ธํ„ฐ๋„ท์—๋Š” ์ด๊ฒƒ์„ ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Maven์—์„œ uml-java-docklet์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์‹œ์—ฐ์„ ์œ„ํ•ด Maven Archetype์„ ์‚ฌ์šฉํ•˜์—ฌ Maven ํ”„๋กœ์ ํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ๋‹ค
mvn archetype:generate
๋ฒˆํ˜ธ ์„ ํƒ ๋˜๋Š” ํ•„ํ„ฐ ์ ์šฉ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  Enter ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ "maven-archetype-quickstart"์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ๋‹ค์Œ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ์™„๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Maven์€ ์ด ๋ฌธ์„œ์˜ ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ Maven ์‚ฌ์šฉ์ž ์„ผํ„ฐUML: ์ด๋ก ์—์„œ ์‹ค์Šต์œผ๋กœ - 5 ์—์„œ Maven์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์—์„œ ํŽธ์ง‘์„ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ์„ค๋ช… ํŒŒ์ผ์ธ pom.xml์„ ์—ฝ๋‹ˆ๋‹ค. uml-java-docklet ์„ค์น˜ ์„ค๋ช… ์˜ ๋‚ด์šฉ์„ ์ด ํŒŒ์ผ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค . ์„ค๋ช…์— ์‚ฌ์šฉ๋œ ์•„ํ‹ฐํŒฉํŠธ๋Š” Maven Central ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. ์ฆ‰, ์„ค๋ช…์—์„œ groupId๋ฅผ "info.leadinglight"์—์„œ "com.chfourie"๋กœ ๋ฐ”๊พธ๊ณ  ๋ฒ„์ „์„ "1.0.0"์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ pom.xml ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
mvn clean install
๊ทธ๋ฆฌ๊ณ 
mvn javadoc: javadoc
์ด์ œ ์ƒ์„ฑ๋œ ๋ฌธ์„œ(explorer target\site\apidocs\index.html)๋ฅผ ์—ด๋ฉด UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ๊ตฌํ˜„ ๊ด€๊ณ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. :)

๊ฒฐ๋ก 

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