๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/๊ฐ์ฒด์ง€ํ–ฅ๋””์ž์ธํŒจํ„ด

(5)
[๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 5์žฅ : ์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด (์ „๋žต ํŒจํ„ด) ์ „๋žต ํŒจํ„ด ์ „๋žตํŒจํ„ด์€ ๋ง๊ทธ๋Œ€๋กœ ์ „๋žต์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฐฉ์‹์ด ํด๋ž˜์Šค๋ณ„๋กœ ์บก์Šํ™”๋˜์–ด์žˆ๊ณ  ํ•„์š”ํ•  ๋•Œ ์ด๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ „๋žต์„ ๊ต์ฒดํ•˜์—ฌ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. Context๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ „๋žต์„ ๋ฐ”๊ฟ”๋‚„ ์ˆ˜ ์žˆ๋‹ค (์ „๋žต๊ณผ ์ง‘์•ฝ๊ด€๊ณ„) Strategy๋Š” ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ๋ช…์‹œํ•œ๋‹ค. ConcreteStrategy๋Š” ์ „๋žต์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด์ž. ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ์˜ ์ฝ”๋“œ public abstract class Robot { private String name; public Robot(String name) { this.name = name; } public String getName() { retu..
[JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 4์žฅ : ๋””์ž์ธ ํŒจํ„ด 4.1 ๋””์ž์ธ ํŒจํ„ด์˜ ์ดํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ?? ๋ฐ”๋กœ ํ›Œ๋ฅญํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด๋‹ค!! ๊ทธ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆ˜๋…„๊ฐ„ ๊ณ ์ƒํ•˜๋ฉด์„œ ์Œ“์•„๋†“์€ ๊ฒฝํ—˜ ๋“ฑ์ด ๊ณ ์Šค๋ž€ํžˆ ๋…น์•„์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ํ›Œ๋ฅญํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ๋งŒ๋“ค์–ด๋†“์€ ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์‘์šฉํ•˜๋ฉด ๋งค์šฐ ์ข‹์„ ๊ฒƒ์ด๋‹ค. ๋””์ž์ธ ํŒจํ„ด์ด๋ž€? ๊ฒฝํ—˜์ด ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋“ค์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์˜ ํ•ด๋ฒ•๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฒƒ! ๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌ์กฐ ๋””์ž์ธ ํŒจํ„ด์˜ ๊ตฌ์กฐ๋Š” 3๊ฐœ์˜ ํ•„์ˆ˜์ ์ธ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ฝ˜ํ…์ŠคํŠธ : ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์—ฌ๋Ÿฌ ์ƒํ™ฉ์„ ๊ธฐ์ˆ  (์ฆ‰, ํŒจํ„ด์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ) ๋ฌธ์ œ(Problem) : ํŒจํ„ด์ด ์ ์šฉ๋˜์–ด ํ•ด๊ฒฐ๋  ํ•„์š”๊ฐ€ ์žˆ๋Š” ..
[JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 3์žฅ : SOLID ์›์น™ 3.1 ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP) 3.11 ์ฑ…์ž„์˜ ์˜๋ฏธ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๊ด€์ ์—์„œ ์ฑ…์ž„์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” ๋ฐ”๋กœ '๊ฐ์ฒด'์ด๋‹ค. (์ด '๊ฐ์ฒด'๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค) ํ•™์ƒ '๊ฐ์ฒด'๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ…์ž„(์ˆ˜์—…๋“ฃ๊ธฐ + ์•Œ๋ฐ”ํ•˜๊ธฐ)์„ ๊ฐ€์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. public class Student { public void getCourses() {...} public void addCourses() {...} public void save() {...} public Student load() {...} public void printOnReport() {...} public void printOnBook() {...} } ํ•™์ƒ ๊ฐ์ฒด๋Š” ์ˆ˜์—…์— ๊ด€ํ•œ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ์ด์™ธ์˜ ์ฑ…์ž„์€ ์ด๋ฅผ ๋” ์ž˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด..
[JAVA ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 2์žฅ : ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›๋ฆฌ ์ถ”์ƒํ™” ์–ด๋–ค ์˜์—ญ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ํ–‰๋™์„ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ๊ณตํ†ต๋œ ํŠน์ง•์„ ํŒŒ์•…ํ•ด ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ผ๋ฐ˜ํ™”ํ•˜๊ฒŒ ๋œ๋‹ค. ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ ๊ฐœ์ฒด์˜ ๊ตฌ์ฒด์ ์ธ ๊ฐœ๋…์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ex) ์ž๋™์ฐจ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ž๋™์ฐจ๋“  ์ƒ๊ด€ ์—†์ด ์—”์ง„์˜ค์ผ์„ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์บก์Šํ™” ์บก์Šํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์€ ๋‹น์—ฐํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ! ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์บก์Šํ™”๋Š” ์ •๋ณด ์€๋‹‰์„ ํ†ตํ•ด ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์™€ ๋†’์€ ์‘์ง‘๋„๋ฅผ ๊ฐ–๋„๋ก ํ•œ๋‹ค. -> ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•ด๋„ ์˜ํ–ฅ์ด ์ ์Œ ์ •๋ณด ์€๋‹‰ : ์™ธ๋ถ€์—์„œ ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ๋‚ด๋ถ€ ์ •๋ณด์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ ex) ์ž๋™์ฐจ์˜ ๊ฐ€์† ํŽ˜๋‹ฌ์„ ๋ฐ์œผ๋ฉด ์†๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€์ง€๋งŒ ๊ทธ ์•ˆ์— ์–ด๋–ค ๊ณผ์ •์ด ์žˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ์ง€์žฅ์ด ์—†์Œ ์‘์ง‘๋„..
[JAVA ๊ฐ์ฒด์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด] 1์žฅ : ๊ฐ์ฒด์ง€ํ–ฅ ๋ชจ๋ธ๋ง 1.1 ๋ชจ๋ธ๋ง ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ชจ๋ธ์˜ ์—ญํ•  ์„œ๋กœ์˜ ํ•ด์„์„ ๊ณต์œ ํ•ด ํ•ฉ์˜๋ฅผ ์ด๋ฃจ๊ฑฐ๋‚˜ ํ•ด์„์˜ ํƒ€๋‹น์„ฑ์„ ๊ฒ€ํ†  ํ˜„์žฌ์˜ ์‹œ์Šคํ…œ ๋˜๋Š” ์•ž์œผ๋กœ ๊ฐœ๋ฐœํ•  ์‹œ์Šคํ…œ์˜ ์›ํ•˜๋Š” ๋ชจ์Šต์„ ๊ฐ€์‹œํ™” ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ํ–‰์œ„๋ฅผ ๋ช…์„ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ํ‹€์„ ์ œ๊ณต ๋ชจ๋ธ์€ ์ถ”์ƒํ™”์— ๊ธฐ๋ฐ˜์„ ๋‘”๋‹ค. ํŠน์ • ๊ด€์ ์—์„œ ๊ด€๋ จ์ด ์žˆ๋Š” ์ ์€ ๋ถ€๊ฐ์‹œํ‚ค๊ณ  ๊ด€๋ จ ์—†๋Š” ๋ฉด์€ ๋ฌด์‹œํ•œ๋‹ค. ex) ๋Œ€ํ•™๊ต ํ•™์‚ฌ ์ง€์› ์—…๋ฌด -> ํ•™์ƒ์˜ ๋จธ๋ฆฌ์นด๋ฝ ์ˆ˜, ๋จธ๋ฆฌ ์ƒ‰๊น”์€ ํ•™์‚ฌ ์ง€์›๊ณผ ์ „ํ˜€ ๋ฌด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์žˆ๋Š” ์˜์—ญ์—์„œ ์ œ์™ธ (์ถ”์ƒํ™”์—์„œ ์ œ์™ธ) -> ํ•™์ƒ์˜ "ํ•™๋ฒˆ, ์ด๋ฆ„, ์ˆ˜๊ฐ•๊ณผ๋ชฉ"์€ ํ•™์‚ฌ ์ง€์› ํ•„์ˆ˜์ ์ด๋ฏ€๋กœ ๊ด€์‹ฌ์˜์—ญ์— ํฌํ•จ์‹œํ‚จ๋‹ค. ์‚ฌ๋žŒ์˜ ๋ชจ๋“  ์†์„ฑ์„ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ด€์‹ฌ์žˆ๋Š” ์˜์—ญ์˜ ํ•„์š”ํ•œ ์†์„ฑ๋งŒ ๊ฐ€์ง€๊ณ  ๊ฐ€๋Š” ๊ฒƒ (์ถ”์ƒํ™”) 1.2 UML ๋ชจ๋ธ๋ง ์–ธ์–ด : ์›ํ•˜๋Š” ์‹œ์Šค..

๋ฐ˜์‘ํ˜•