Deep Dive Into Design Patterns - ๋ฐ์ฝ๋ ์ดํฐ ํจํด
๐ก ๋ฐ์ฝ๋ ์ดํฐ(Decorator) ํจํด์ด๋?๋์ ๊ฐ์ฒด์ ๋ํ ๊ธฐ๋ฅ ํ์ฅ์ด๋ ๋ณ๊ฒฝ์ด ํ์ํ ๋ ๊ฐ์ฒด์ ๊ฒฐํฉ(์๋ก์ด ํ๋์ ํฌํจํ ํน์ ๋ํผ ๊ฐ์ฒด๋ค ๋ด์ ์ถ๊ฐ)์ ํตํด ์๋ธํด๋์ฑ ๋์ ์ธ ์ ์๋ ๊ตฌ์กฐ์ ๋์์ธ ํจํด์ ๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ์ด์ฉํ๋ฉด ํ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์กฐํฉ์ ๋ฐํ์์์ ๋์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ๋์ ๊ฐ์ฒด๋ฅผ ์๋ก์ด ํ๋๋ค์ ํฌํจํ ๋ฐ์ฝ๋ ์ดํฐ ๊ฐ์ฒด์ ๋ฃ์ด์ ํ๋๋ค์ ํด๋น ์ฅ์์ ๊ฐ์ฒด๋ง๋ค ์ฐ๊ฒฐ์ํต๋๋ค. ์๋ธํด๋์ค๋ก ๊ตฌ์ฑํ ๋ ๋ณด๋ค ํจ์ฌ ์ ์ฐํ๊ฒ ๊ธฐ๋ฅ์ ํ์ฅ ํ ์ ์๊ณ , ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค๋ค์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์์ ์ด ์ฉ์ดํด์ง๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ๋ฐ์ฝ๋ ์ดํฐ ํจํดComponent : ์๋ณธ ๊ฐ์ฒด์ ์ฅ์๋ ๊ฐ์ฒด ๋ชจ๋๋ฅผ ๋ฌถ๋ ์ญํ .Concrete Component : ์๋ณธ ๊ฐ์ฒด. ..
Deep Dive Into Design Patterns - ์ปค๋งจ๋ ํจํด
๐ก ์ปค๋งจ๋(Command) ํจํด์ด๋?์์ฒญ(๊ธฐ๋ฅ)์ ์บก์ํํ์ฌ ์์ฒญ์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ฒดํํ๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์์ฒญ์ ๋ํ ์ ๋ณด๋ก๋ ๋ฉ์๋ ์ด๋ฆ, ๋งค๊ฐ๋ณ์ ๋ฑ์ด ์์ผ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ์์ฒญ์ ์ ์ฅ, ๋ก๊น , ๋๋ ์ทจ์ํ ์ ์์ต๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ์ปค๋งจ๋ ํจํด๋ฐ๋์(Invoker) : ์์ฒญ๋ค์ ์์ํ๋ ์ญํ ์ ํ๋ ํด๋์ค๋ก, ์์ ์ ๋์ ์ปค๋งจ๋ ๊ฐ์ฒด๋ฅผ ์๋์ํด์ผ๋ก์จ ์์ฒญํฉ๋๋ค. ๋, ์์ฒญ์ ๋ํ ๊ธฐ๋ก์ ๋จ๊ธธ ์ ์๊ณ , ํ ๋ฐ๋์ ๊ฐ์ฒด์ ๋ค์์ ์ปค๋งจ๋ ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋ ์ ์์ต๋๋ค.Command Interface : ์ผ๋ฐ์ ์ผ๋ก ์ปค๋งจ๋๋ฅผ ์คํํ๊ธฐ ์ํ ๋จ์ผ ๋ฉ์๋๋ง์ ์ ์ธํฉ๋๋ค.Concrete Command : ๋ค์ํ ์ ํ์ ์์ฒญ์ ๊ตฌํ. ์์ฒด์ ์ผ๋ก ์์ ์ ์ํํด์๋ ์ ๋๋ฉฐ, ๋์ ..
Deep Dive Into Design Patterns - ์ ๋ต ํจํด
๐ก ์ ๋ต(Strategy) ํจํด์ด๋?์๊ณ ๋ฆฌ์ฆ๋ค์ ํจ๋ฐ๋ฆฌ๋ฅผ ์ ์ํ๊ณ , ๊ฐ ํจ๋ฐ๋ฆฌ๋ฅผ ๋ณ๋์ ํด๋์ค์ ๋ฃ์ ํ ๊ทธ๋ค์ ๊ฐ์ฒด๋ค์ ์ํธ๊ตํํ ์ ์๋๋ก ํ๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์คํ(๋ฐํ์) ์ค์ ์๊ณ ๋ฆฌ์ฆ ์ ๋ต์ ์ ํํ์ฌ ๊ฐ์ฒด ๋์์ ์ค์๊ฐ์ผ๋ก ๋ฐ๋๋๋ก ํ ์ ์์ต๋๋ค. ์ฆ, ์ด๋ค ์ผ์ ์ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฌ๊ฐ์ง์ผ ๋, ๋์๋ค์ ๋ฏธ๋ฆฌ ์ ๋ต์ผ๋ก ์ ์ํจ์ผ๋ก์จ ์์ฝ๊ฒ ์ ๋ต์ ๊ต์ฒดํ ์ ์๊ฒ ํฉ๋๋ค. ๋ฐ๋ผ์ ์๊ณ ๋ฆฌ์ฆ ๋ณํ์ด ๋น๋ฒํ๊ฒ ํ์ํ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. GoF์ ๋์์ธ ํจํด ์ฑ ์์๋ ์ ๋ต ํจํด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค.๋์ผ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ๊ตฐ์ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์บก์ํํ๋ฉฐ,์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์ ์๊ด์์ด ๋ ๋ฆฝ์ ์ผ๋ก์๊ณ ๋ฆฌ์ฆ์ ๋ค์ํ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ค.์ฆ, ์ ๋ต ํจํด์ SOLID ์์น์ O..
Deep Dive Into Design Patterns - ์ํ ํจํด
๐ก ์ํ(State) ํจํด์ด๋?๊ฐ์ฒด์ ๋ด๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋ ํด๋น ๊ฐ์ฒด๊ฐ ๊ทธ์ ํ๋์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ๊ฐ์ฒด๊ฐ ํ๋์ ๋ณ๊ฒฝํ ๋ ๊ฐ์ฒด๊ฐ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. ์ฆ, ์ํ๋ฅผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ฒ์ฌํด์ ํ์๋ฅผ ๋ฌ๋ฆฌํ๋ ๊ฒ์ด ์๋, ์ํ๋ฅผ ๊ฐ์ฒดํ ํ์ฌ ์ํ๊ฐ ํ๋์ ํ ์ ์๋๋ก ์์ํ๋ ํจํด์ ๋งํฉ๋๋ค. ์ ๋ต ํจํด(Strategy Pattern)์ด '์ ๋ต ์๊ณ ๋ฆฌ์ฆ'์ ํด๋์ค๋ก ํํํ ํจํด์ด๋ผ๋ฉด, ์ํ ํจํด(State Pattern)์ '๊ฐ์ฒด ์ํ'๋ฅผ ํด๋์ค๋ก ํํํ ํจํด์ด๋ผ๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ํ ํจํด์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ๋ณด๋ฉด ์ ๋ต ํจํด๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋, ์ํ ํจํด์์์ ํน์ ์ํ๋ค์ ์๋ก๋ฅผ ์ธ์ํ๊ณ ํ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ ์ด๋ฅผ ์์ํ ์ ์..
Deep Dive Into Design Patterns - ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด
๐ก ํ ํ๋ฆฟ ๋ฉ์๋(Template Method) ํจํด์ด๋?๋ถ๋ชจ ํด๋์ค์์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณจ๊ฒฉ์ ์ ์ํ์ง๋ง, ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์์ ํด๋์ค๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ ํน์ ๋จ๊ณ๋ค์ ์ค๋ฒ๋ผ์ด๋(์ฌ์ ์)ํ ์ ์๋๋ก ํ๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์ฌ๋ฌ ํด๋์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ํ ํ๋ฆฟํ ํ์ฌ ์์ ํด๋์ค์์ ์ ์ํ๊ณ , ํ์ ํด๋์ค๋ง๋ค ์ธ๋ถ ๋์ ์ฌํญ์ ๋ค๋ฅด๊ฒ ๊ตฌํํฉ๋๋ค. ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ ์์์ด๋ผ๋ ๊ธฐ์ ์ ๊ทน๋ํํ์ฌ,์๊ณ ๋ฆฌ์ฆ์ ๋ผ๋๋ฅผ ๋ง์ถ๋ ๊ฒ์ ์ด์ ์ ๋ก๋๋ค. ์ด๋ฏธ ์๋ง์ ํ๋ ์์ํฌ์์ ๋ง์ ๋ถ๋ถ์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด ์ฝ๋๊ฐ ์ฐ๋ฆฌ๋ ๋ชจ๋ฅด๊ฒ ์ ์ฉ๋์ด ์์ต๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํดAbstract Class : ์๊ณ ๋ฆฌ์ฆ์ ๋จ๊ณ๋ค์ ์ญํ ์ ํ๋ ๋ฉ์๋๋ค์ ์ ์ธํ๋ฉฐ,..
Deep Dive Into Design Patterns - ๋น๋ ํจํด
๐ก ๋น๋(Builder) ํจํด์ด๋?๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์ ์ง์ ์ผ๋ก ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ๋ณต์กํ ๊ฐ์ฒด๋ค์ ๋จ๊ณ ๋ณ๋ก ์์ฑํ๋ ์์ฑ ๋์์ธ ํจํด์ ๋๋ค. ์์ฑ์์ ๋ค์ด๊ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฉ์๋๋ก ํ๋ํ๋ ๋ฐ์๋ค์ด๊ณ ๋ง์ง๋ง์ ํตํฉ ๋น๋ํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ์์ฑ์๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง, ์์ฑ ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ์ ์ฃผ๊ฑฐ๋ ์์ฑํ ํด๋์ค๋ฅผ ์ ํํ๊ณ ์ถ์ ๋ ๋ณํ์ด ํ์ํฉ๋๋ค. ์ฆ, ๊ฐ์ฒด ์์ฑ์ ํด๋์ค ๋ก์ง ๋ฐ์ผ๋ก ์ฎ๊ธธ ํ์๊ฐ ์์ ๋ ๋น๋ ํจํด์ ์ฌ์ฉํฉ๋๋ค.public static void main(String[] args) { // ์์ฑ์ ๋ฐฉ์ Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0); // ๋น๋ ๋ฐฉ์ Hambu..
Deep Dive Into Design Patterns - ํ๋ผ์ด์จ์ดํธ ํจํด
๐ก ํ๋ผ์ด์จ์ดํธ(Flyweight) ํจํด์ด๋?์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ณต์ ์์ผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํ๋ ๊ตฌ์กฐ ํจํด์ ๋๋ค. ๊ฐ ๊ฐ์ฒด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ๋์ ์ฌ๋ฌ ๊ฐ์ฒด๋ค ๊ฐ์ ์ํ์ ๊ณตํต ๋ถ๋ถ๋ค์ ๊ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ RAM์ ๋ ๋ง์ ๊ฐ์ฒด๋ค์ ํฌํจํ ์ ์๋๋ก ํฉ๋๋ค. ์์ฃผ ๋ณํ๋ ์์ฑ(extrinsic)๊ณผ ๋ณํ์ง ์๋ ์์ฑ(intrinsic)์ ๋ถ๋ฆฌํ๊ณ , ๋ณํ์ง ์๋ ์์ฑ์ ์บ์ํ์ฌ ์ฌ์ฌ์ฉํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ ๋๋ค. ๊ทธ๋์ ๋์ผํ๊ฑฐ๋ ์ ์ฌํ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ฐ๋ฅํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋๋ก ํ์ฌ ์ต์ ํ๋ฅผ ๋ ธ๋ฆฌ๋ ๊ฒฝ๋ ํจํด์ด๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ํ๋ผ์ด์จ์ดํธ ํจํดFlyweight : ๊ฒฝ๋ ๊ฐ์ฒด๋ฅผ ๋ฌถ๋ ์ธํฐํ์ด์ค.Flyweight State : ํ๋ผ์ด์จ์ด..
Deep Dive Into Design Patterns - ์ฑ ์ ์ฐ์ ํจํด
๐ก ์ฑ ์ ์ฐ์(Chain of Responsibility) ํจํด์ด๋?ํธ๋ค๋ฌ๋ค์ ์ฒด์ธ(์ฌ์ฌ)์ ๋ฐ๋ผ ์์ฒญ์ ์ ๋ฌํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ํด๋ผ์ด์ดํธ์ ์์ฒญ์ ๋ํ ์ธ์ธํ ์ฒ๋ฆฌ๋ฅผ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชฝ๋ ํ๋ ๊ฒ์ด ์๋, ์ฌ๋ฌ ๊ฐ์ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ค๋ก ๋๋๊ณ , ์ด๋ค์ ์ฌ์ฌ(chain)์ฒ๋ผ ์ฐ๊ฒฐํด ์งํฉ ์์์ ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ ํจํด์ ๋๋ค. ์ด๋ฌํ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ค์ ํธ๋ค๋ฌ(handler)๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ฐ ํธ๋ค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง ํ๋จํ๊ณ , ์์ผ๋ฉด ์ฒด์ธ์ ๋ค์ ํธ๋ค๋ฌ๋ก ์ฒ๋ฆฌ์ ๋ํ ์ฑ ์์ ์ ๊ฐํฉ๋๋ค. ์ฒ๋ฆฌ์ ๋ํ ์ฑ ์์ ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ(sender)๊ณผ ์์ฒญ์ ์ฒ๋ฆฌํ๋(receiver) ์ชฝ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ถํ์ผ๋ก ๋ ๋ฆฝ์ํค๊ณ ๊ฒฐํฉ๋๋ฅผ ๋์จํ๊ฒ ๋ง๋ค๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ์ ์์ฒญ..
Deep Dive Into Design Patterns - ํ๋ก์ ํจํด
๐ก ํ๋ก์ ํจํด์ด๋?๋์ ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋๋ฆฌํ์ฌ ๋์ ์ฒ๋ฆฌํ๊ฒ ํจ์ผ๋ก์จ ๋ก์ง์ ํ๋ฆ์ ์ ์ดํ๋ ํ๋ ํจํด์ ๋๋ค. “ํ๋ก์”์ ์ฌ์ ์ ์ธ ์๋ฏธ์ธ ‘๋๋ฆฌ์ธ’์ฒ๋ผ, ํด๋ผ์ด์ธํธ๊ฐ ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ ์๋๋ผ ์ค๊ฐ์ ํ๋ก์(๋๋ฆฌ์ธ)์ ๊ฑฐ์ณ์ ์ฌ์ฉํ๋ ์ฝ๋ ํจํด์ ๋๋ค. ๋ฐ๋ผ์ ๋์ ๊ฐ์ฒด(Subject)์ ๋ฉ์๋๋ฅผ ์ง์ ์คํํ๋ ๊ฒ์ด ์๋, ๋์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ ์ ํ๋ก์(Proxy) ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ ๊ทผํ ํ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค. ํ๋ก์๋ ์ค์ ๊ฐ์ฒด์ ์ก์ธ์คํ์ง ์๊ณ , ์ ์์ ๋๋ ๋น์ ์์ ์ธ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ๋ ํฉ๋๋ค. ๐ก ํ๋ก์ ํจํด์ ์ฐ๋ ์ด์ ํ๋ก์ ํจํด์ ๋์ ํด๋์ค๊ฐ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋ ์ธ์คํด์คํ ํ๊ธฐ์ ๋ฌด๊ฒ๊ฑฐ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฏธํ๊ณ ์ถ์๋ฐ, ์๋ณธ ๊ฐ์ฒด๋ฅผ ์์ ..
Deep Dive Into Design Patterns - ์ค์ฌ์ ํจํด
๐ก ์ค์ฌ์(Mediator) ํจํด์ด๋? ๊ฐ์ฒด ๊ฐ์ ํผ๋์ค๋ฌ์ด ์์กด ๊ด๊ณ๋ค์ ์ค์ผ ์ ์๋ ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์ด ํจํด์ ๊ฐ์ฒด ๊ฐ์ ์ง์ ํต์ ์ ์ ํํ๊ณ ์ค์ฌ์ ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ํ๋ ฅํ๋๋ก ํฉ๋๋ค. ์ค์ฌ์ ํจํด์ ๊ฐ ๊ฐ์ฒด๋ค์ ๊ฐํ ์ฐ๊ฒฐ(์ฐธ์กฐ)๋ฅผ ๋๊ณ , ๊ทธ ๋์ ์ปดํฌ๋ํธ๋ค์ด ํน์ ์ค์ฌ์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ์ฌ ์ ์ ํ ์ปดํฌ๋ํธ๋ค๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๊ฒ๋ ํฉ๋๋ค. ์ด๋ก ์ธํด ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ ์ ์ผ๋ก ํ๋ ฅํ๊ฒ ๋๊ณ , ์์ญ ๊ฐ์ ๋๋ฃ ์ปดํฌ๋ํธ๋ค๊ณผ ๊ฒฐํฉ๋๋ ๋์ ๋จ์ผ ์ค์ฌ์ ํด๋์ค์๋ง ์์กดํฉ๋๋ค. โญ ์ต์๋ฒ ํจํด๊ณผ ์ค์ฌ์ ํจํด? ์ต์๋ฒ ํจํด์ 1๊ฐ์ ๋ฐํ์์ N๊ฐ์ ๊ตฌ๋ ์๊ฐ ์กด์ฌํ์ฌ ์ต์๋ฒ๊ฐ ๋ฐํ์ ๋ด๋นํ๊ณ ์ค์ฌ์ ํจํด์ M๊ฐ์ ํผ๋ธ๋ฆฌ์ ์ N๊ฐ์ ๊ตฌ๋ ์ ์ฌ์ด์์ 1๊ฐ์ ์ค์ฌ์๋ฅผ ํตํด ํต์ ํฉ๋๋ค. ์ต์๋ฒ ํจํด์ ์ฌ์ฌ์ฉ์ฑ์ ์ข์ง๋ง ..
Deep Dive Into Design Patterns - ์ต์๋ฒ ํจํด
๐ก ์ต์๋ฒ(Observer) ํจํด์ด๋? ๊ฐ์ฒด์ ๋ฐ์ํ๋ ๋ชจ๋ ์ด๋ฒคํธ์ ๋ํ์ฌ ์ต์๋ฒ(๊ด์ฐฐ์)๋ค์๊ฒ ์๋ฆฌ๊ณ , ์ต์๋ฒ๋ค์ ์๋ฆผ์ ๋ฐ์ ์กฐ์น๋ฅผ ์ทจํ๋ ํ๋ ํจํด์ ๋๋ค. ์ผ๋ช ๊ตฌ๋ ๋งค์ปค๋์ฆ์ ๊ตฌํํ ํจํด์ผ๋ก, ๋ค๋ฅธ ๋์์ธ ํจํด๋ค๊ณผ ๋ค๋ฅด๊ฒ ์ผ๋๋ค ์์กด์ฑ์ ๊ฐ์ง๋๋ค. ์ต์๋ฒ ํจํด์ ์์๋ก๋ MVC ํจํด(Model, View, Controller)์ด ์์ต๋๋ค. MVC์ Model๊ณผ View์ ๊ด๊ณ๋ Observer ํจํด์ Subject ์ญํ ๊ณผ Observer ์ญํ ์ ๊ด๊ณ์ ๋์๋ฉ๋๋ค. ์ฆ, ํ๋์ Model์ ๋ณต์์ View๊ฐ ๋์ํฉ๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ์ต์๋ฒ ํจํด Publisher(Subject) : ๊ด์ฐฐ ๋นํ๋ ๋์์ผ๋ก, Subscriber(Observer)๋ค์ ๋ฆฌ์คํธ๋ก ๊ฐ๊ณ ์๋ค. (Aggrega..
Deep Dive Into Design Patterns - ์ฑ๊ธํค ํจํด
๐ก ์ฑ๊ธํค(Singleton) ํจํด์ด๋? ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์๋๋ก ํ๋ฉด์ ์ด ์ธ์คํด์ค์ ๋ํ ์ ์ญ ์ ๊ทผ(์ก์ธ์ค) ์ง์ ์ ์ ๊ณตํ๋ ์์ฑ ๋์์ธ ํจํด์ ๋๋ค. ์ฝ๊ฒ ๋งํด, ๋จ ํ๋์ ์ ์ผํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ฝ๋ ํจํด์ด๋ฉฐ ์ธ์คํด์ค๊ฐ ํ์ํ ๋ ๋๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ ํ์ฉํ๋ ๊ธฐ๋ฒ์ ๋งํฉ๋๋ค. ๋ณดํต ์ฑ๊ธํค ํจํด์ด ์ ์ฉ๋ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ๊ทธ ๊ฐ์ฒด๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฐจ์งํ๋ ์ญํ ์ ํ๋ ๋ฌด๊ฑฐ์ด ํด๋์ค์ผ๋ ์ ํฉํฉ๋๋ค. ๋ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ชจ๋์ ์๋ก ๋ค ์ ์๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๋ ์์ (I/O ๋ฐ์ด๋)์ ๊ทธ ์์ฒด๋ก ๋ฌด๊ฑฐ์ด ์์ ์ ์ํ๋ฉฐ ๋ํ ํ๋ฒ๋ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋๋ ค์ฐ๋ฉด ๋์ง ๊ตณ์ด ์ฌ๋ฌ๋ฒ ์์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ..