๐์ฝ์ ์ฑ ์ ๋ฆฌ/๊ฐ์ฒด์งํฅ๋์์ธํจํด (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 ๋ชจ๋ธ๋ง ์ธ์ด : ์ํ๋ ์์ค.. ์ด์ 1 ๋ค์