JavaRush /Java Blog /Random-KO /UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€
Viacheslav
๋ ˆ๋ฒจ 3

UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์†Œ๊ฐœ

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

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

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

UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€ - 1

Wikipedia์— ๋”ฐ๋ฅด๋ฉด

UML์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ๋ง, ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ์กฐ์ง ๊ตฌ์กฐ ํ‘œ์‹œ์˜ ๊ฐ์ฒด ๋ชจ๋ธ๋ง์„ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ์„ค๋ช… ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ ๊นจ๋‹ซ์ง€ ๋ชปํ•˜๋Š” ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์ ์€ UML์— ์‚ฌ์–‘์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ UML2 ์‚ฌ์–‘๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์–‘์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ฒด ๊ด€๋ฆฌ ๊ทธ๋ฃน ์›น์‚ฌ์ดํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์‹ค์ œ๋กœ ์ด ๊ทธ๋ฃน์—์„œ๋Š” UML ์‚ฌ์–‘์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. UML์ด ํด๋ž˜์Šค ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๋„ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. UML ๋‹ค์ด์–ด๊ทธ๋žจ์—๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. UML ๋‹ค์ด์–ด๊ทธ๋žจ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์€ ๋™์ผํ•œ Wikipedia: UML ๋‹ค์ด์–ด๊ทธ๋žจ ๋˜๋Š” Timur Batyrshinov์˜ UML ๋‹ค์ด์–ด๊ทธ๋žจ ๊ฒ€ํ†  ๋น„๋””์˜ค์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . UML์€ ๋‹ค์–‘ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์—๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด JWT๋ฅผ ์‚ฌ์šฉํ•œ Single Sign-On์ž…๋‹ˆ๋‹ค . UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ์‚ฌ์šฉ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋™์ผํ•œ UML ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ํŒจํ„ด์„ ์„ค๋ช…ํ•˜๋Š” Head First: Design Patterns ์ฑ…์„ ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. UML์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ ์šฉ์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ์ดํ•ด๋Š” ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ์ˆ ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

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

IDE์—์„œ ๋™์ผํ•œ UML์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. IntelliJ Idea๋ฅผ IDE๋กœ ํ™œ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . IntelliJ Idea Ultimate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฆ‰์‹œ " UML Support " ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์„ค์น˜ ๋ฉ๋‹ˆ๋‹ค . ์ด๋ฅผ ํ†ตํ•ด ์•„๋ฆ„๋‹ค์šด ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Ctrl+N์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋‰ด ํ•ญ๋ชฉ "Navigate" -> "Class"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ArrayList ํด๋ž˜์Šค๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค . ์ด์ œ ํด๋ž˜์Šค ์ด๋ฆ„์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด โ€œ๋‹ค์ด์–ด๊ทธ๋žจโ€ -> โ€œ๋‹ค์ด์–ด๊ทธ๋žจ ํŒ์—… ํ‘œ์‹œโ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์•„๋ฆ„๋‹ค์šด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์–ป์Šต๋‹ˆ๋‹ค.
UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€ - 2
ํ•˜์ง€๋งŒ ์ง์ ‘ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์€๋ฐ Ultimate ๋ฒ„์ „์˜ Idea๋„ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? IntelliJ Idea Community Edition์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € Graphviz๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋ž˜ํ”„๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์„ธํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ›„ Graphviz ์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์˜ bin ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ PATH ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ ๋‹ค์Œ IntelliJ Idea์˜ ๋ฉ”๋‰ด์—์„œ ํŒŒ์ผ -> ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. "์„ค์ •" ์ฐฝ์—์„œ "ํ”Œ๋Ÿฌ๊ทธ์ธ" ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ณ  "์ €์žฅ์†Œ ์ฐพ์•„๋ณด๊ธฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„ PlantUML ํ†ตํ•ฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค . PlantUML์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ์ข‹์€๊ฐ€์š” ? UML์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด " dot " ์ด๋ผ๋Š” ๊ทธ๋ž˜ํ”„ ์„ค๋ช… ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด UML์„ ๋”์šฑ ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” PlantUML์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„๋ž˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ IDE๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜จ๋ผ์ธ ์„œ๋น„์Šค planttext.com ์—์„œ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . PlantUML ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ ํ›„ โ€œํŒŒ์ผโ€ -> โ€œ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐโ€๋ฅผ ํ†ตํ•ด UML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "UML ํด๋ž˜์Šค" ์œ ํ˜•์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ํ…œํ”Œ๋ฆฟ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ ์‚ญ์ œํ•˜๊ณ  Habr: ํด๋ž˜์Šค ๊ด€๊ณ„ - UML์—์„œ ์ฝ”๋“œ๊นŒ์ง€์˜ ๊ธฐ์‚ฌ๋กœ ๋ฌด์žฅํ•œ ์ž์ฒด์ ์ธ ๋‚ด์šฉ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ ํ…์ŠคํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฌ˜์‚ฌํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด PlantUML ๋งค๋‰ด์–ผ์ธ plantuml class-diagram์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ๋งจ ์ฒ˜์Œ์—๋Š” ์—ฐ๊ฒฐ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€ - 3
" UML์˜ ํด๋ž˜์Šค ๊ฐ„ ๊ด€๊ณ„. ์˜ˆ์ œ " ์—์„œ ์—ฐ๊ฒฐ ์ž์ฒด๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๋Ÿฌํ•œ ์ž๋ฃŒ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ UML ๋‹ค์ด์–ด๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ํด๋ž˜์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋‹ค์Œ ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Idea์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด "View" -> "Tool Windows" -> "PlantUML"์„ ์„ ํƒํ•˜์„ธ์š”. ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์‚ฌ๊ฐํ˜•๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ์ด ๋‘ ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค ๊ด€๊ณ„๋ฅผ ๊ตฌํ˜„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ์ ์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์„ ๋ฌ˜์‚ฌํ•ด ๋ณด์ž:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- ํ•˜์œ„ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค Collection. ์ฆ‰, Collection์—์„œ ์ƒ์†๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ์ผ๋ฐ˜ํ™”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™์ ์ธ ์—ฐ์†์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ฌ˜์‚ฌํ•ด ๋ณด์ž:
interface Collection
Collection <|-- List
๋‹ค์Œ ์—ฐ๊ฒฐ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ํŒจํ‚ค์ง€ ์ „์šฉ ์š”์†Œ ๋ฐฐ์—ด ArrayList์— ๋Œ€ํ•œ ํ•ญ๋ชฉ์„ ํด๋ž˜์Šค ์„ค๋ช…์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
~Object[] elementData
์ด์ œ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ArrayList. ์ด ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ์œ ํ˜•์€ aggregation ์ด ๋ฉ๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ์˜ ๋‹จ์œ„๋Š” ArrayList์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์—๋Š” ๋‹ค๋ฅธ ๊ฐœ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ๊ฐœ์ฒด๋Š” ๋ชฉ๋ก ์—†์ด๋„ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง‘๊ณ„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ํ•„์ˆ˜ ๋ถ€๋ถ„์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์ˆ˜๋ช…์€ ๋ชฉ๋ก์˜ ์ˆ˜๋ช…๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Aggregate๋Š” ๋ผํ‹ด์–ด์—์„œ "์กฐ๋ฆฝ๋œ", ์ฆ‰ ๋ฌด์–ธ๊ฐ€๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์œผ๋กœ ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธ์ƒ์—๋Š” ํŽŒํ”„์™€ ๋ชจํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ํŽŒํ•‘ ์žฅ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜ ์ž์ฒด๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚จ๊ฒจ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒ๋งคํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋‹จ์œ„์— ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ๋‹จ์œ„ ๊ทผ์ฒ˜์˜ ๋นˆ ๋‹ค์ด์•„๋ชฌ๋“œ์™€ ์—ฐ์†๋œ ์„ ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌ˜์‚ฌํ•ด๋ณด์ž:
class Object{
}
ArrayList o- Object
ArrayList์ด์ œ ์šฐ๋ฆฌ๋Š” ์™€ ๋‹ฌ๋ฆฌ ํด๋ž˜์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ LinkedListํฌํ•จ๋˜์–ด ์žˆ์Œ ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค . Node์ด ๊ฒฝ์šฐ Node๊ทธ๋“ค์€ ๊ทธ๋“ค ์ž์‹ ์˜ ์ผ๋ถ€ LinkedList์ด๋ฉฐ ๋”ฐ๋กœ ์‚ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Node์ฝ˜ํ…์ธ ๊ฐ€ ์ง์ ‘ ์ €์žฅ๋˜์ง€๋Š” โ€‹โ€‹์•Š์ง€๋งŒ ํ•ด๋‹น ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ๋งํฌ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LinkedListํ–‰ ์— ์ถ”๊ฐ€ํ•  ๋•Œ Nodeํ•ด๋‹น ํ–‰์— ๋Œ€ํ•œ ๋งํฌ์™€ ์ด์ „ ๋ฐ ๋‹ค์Œ ํ–‰์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค Node. ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์˜์‚ฌ์†Œํ†ต์„ ๊ตฌ์„ฑ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ๋ณตํ•ฉ์žฌ(๋ถ€ํ’ˆ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ณตํ•ฉ์žฌ)๋ฅผ ํ‘œ์‹œํ•˜๋ ค๋ฉด ์—ฐ์†๋œ ์„ ๊ณผ ํ•จ๊ป˜ ์œ ์ƒ‰ ๋‹ค์ด์•„๋ชฌ๋“œ๊ฐ€ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค. ์ด์ œ ์ด๊ฒƒ์„ ์—ฐ๊ฒฐ์˜ ํ…์ŠคํŠธ ํ‘œ์‹œ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
class Node{
}
LinkedList *-- Node
์ด์ œ ์šฐ๋ฆฌ๋Š” ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ด€๊ณ„ ์œ ํ˜•์ธ ์ข…์† ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ ์ค‘์ธ ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ ๋ฅผ ๋“ค์–ด, LinkedList๊ทธ๋“ค์€ . ์ด๊ฒƒ์„ ์ ์„ ์ด ์žˆ๋Š” ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ArrayListListIterator
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
์ด ๋ชจ๋“  ๊ฒƒ์ด ๋๋‚˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค:
UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€ - 4
ํ•„์š”ํ•œ ๋งŒํผ ์ž์„ธํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ช…์นญ์€ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค: " PlantUML - ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ". ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์ดˆ์ž์—ฐ์  ์ธ ๊ฒƒ์€ ์—†์œผ๋ฉฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์†์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์‚ฌ๊ณ ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ž˜๋ชป๋œ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ธ ํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ์กฐ๊ธฐ์— ํด๋ž˜์Šค ๊ตฌ์กฐ ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๊ทธ๊ฒƒ์ด ์‹œ๋„ํ•ด ๋ณผ ๋งŒํ•œ ์ข‹์€ ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋‚˜์š”? )
UML: ์ด๋ก ์—์„œ ์‹ค์Šต๊นŒ์ง€ - 5

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

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

๊ฒฐ๋ก 

๋ณด์‹œ๋‹ค์‹œํ”ผ UML์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ UML์€ ์ด๊ฒƒ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UML์„ ์‚ฌ์šฉํ•˜๋ฉด ํšŒ์‚ฌ ๋‚ด์˜ ๋‹ค์–‘ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ์ž‘์„ฑ ์ค‘์ธ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UML์ด ๊ฐœ์ธ์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์œ ์šฉํ•œ์ง€๋Š” ๊ท€ํ•˜๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋‹ฌ๋ ค ์žˆ์ง€๋งŒ, ์‹œ๊ฐ„์„ ๋‚ด์–ด UML์„ ๋” ์ž์„ธํžˆ ์ฝ์–ด๋ณด๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. #๋น„์•„์ฒด์Šฌ๋ผํ”„
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION