You Can Become A
๋ฆ๊ฒ ์์ํด๋ ๋๊ตฌ๋ ์ง ๋ ธ๋ ฅํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ ์ ์์ด์ !
๋์์ธ ํจํด
๐ Chain Of Responsibility ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Chain Of Responsibility Pattern ์ฑ ์ ์ฐ์ ํจํด(Chain Of Responsibility Pattern, COR)์ ํด๋ผ์ด์ดํธ์ ์์ฒญ์ ๋ํ ์ธ์ธํ ์ฒ๋ฆฌ๋ฅผ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชฝ๋ ํ๋ ๊ฒ์ด ์๋, ์ฌ๋ฌ๊ฐ์ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ค๋ก ๋๋๊ณ , ์ด๋ค์ ์ฌ์ฌ(chain) ์ฒ๋ผ ์ฐ๊ฒฐํด ์งํฉ ์์์ ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ ํจํด์ด๋ค. ์ด๋ฌํ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ค์ ํธ๋ค๋ฌ(handler)๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ฐ ํธ๋ค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง, ์์ผ๋ฉด ์ฒด์ธ์ ๋ค์ ํธ๋ค๋ฌ๋ก ์ฒ๋ฆฌ์ ๋ํ ์ฑ ์์ ์ ๊ฐํ๋ค. ํ๋ง๋๋ก ์ฑ ์ ์ฐ์๋ผ๋ ๋ง์ ์์ฒญ์ ๋ํ ์ฑ ์์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ ๋๊ธด๋ค๋ ์๋ฆฌ์ด๋ค. ๋ ๋๊ธด๋ค๊ณ ํ๋๊น ๋ถ์ ์ ์ธ ์๋ฏธ๋ก ๋ค๋ฆด์๋ ์๊ฒ ์ง๋ง, ์ด๋ฌํ ์ฒด์ธ ๊ตฌ์ฑ์ ํ๋์ ๊ฐ์ฒด์ ์ฒ๋ฆฌ์ ๋ํ ์ฑ ์์ ์์ฒญ์ ๋ณด๋ด๋..
๐ ๋ณตํฉ์ฒด(Composite) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Composite Pattern ๋ณตํฉ์ฒด ํจํด(Composite Pattern)์ ๋ณตํฉ ๊ฐ์ฒด(Composite) ์ ๋จ์ผ ๊ฐ์ฒด(Leaf)๋ฅผ ๋์ผํ ์ปดํฌ๋ํธ๋ก ์ทจ๊ธํ์ฌ, ํด๋ผ์ด์ธํธ์๊ฒ ์ด ๋์ ๊ตฌ๋ถํ์ง ์๊ณ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ๊ตฌ์กฐ ํจํด์ด๋ค. ๋ณตํฉ์ฒด ํจํด์ ์ ์ฒด-๋ถ๋ถ์ ๊ด๊ณ๋ฅผ ๊ฐ๋ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์ ์ํด์ผ ํ ๋ ์ ์ฉํ๋ค. ์๋์ฐ๋ ๋ฆฌ๋ ์ค์ ํ์ผ ์์คํ ๊ตฌ์กฐ๋ฅผ ๋ ์ฌ๋ ค๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค. ํด๋(๋๋ ํ ๋ฆฌ) ์์๋ ํ์ผ์ด ๋ค์ด ์์์๋ ์๊ณ ํ์ผ์ ๋ด์ ๋ ๋ค๋ฅธ ํด๋๋ ๋ค์ด์์ ์ ์๋ค. ์ด๋ฅผ ๋ณตํฉ์ ์ผ๋ก ๋ด์์ ์๋ค ํด์ Composite ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฆฌ์ด๋ค. ๋ฐ๋ฉด ํ์ผ์ ๋จ์ผ ๊ฐ์ฒด ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ Leaf ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฆฌ์ด๋ค. ์ฆ Leaf๋ ์์์ด ์๋ค. ๋ณตํฉ์ฒด ํจํด์..
๐ ๊ฒฝ๋(Flyweight) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Flyweight Pattern ํ๋ผ์ด์จ์ดํธ ํจํด(Flyweight Pattern)์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ณต์ ์์ผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํ๋ ๊ตฌ์กฐ ํจํด์ด๋ค. ๊ฐ๋จํ ๋งํ๋ฉด ์บ์(Cache) ๊ฐ๋ ์ ์ฝ๋๋ก ํจํดํ ํ๊ฒ์ผ๋ก ๋ณด๋ฉด ๋๋๋ฐ, ์์ฃผ ๋ณํ๋ ์์ฑ(extrinsit)๊ณผ ๋ณํ์ง ์๋ ์์ฑ(intrinsit)์ ๋ถ๋ฆฌํ๊ณ ๋ณํ์ง ์๋ ์์ฑ์ ์บ์ํ์ฌ ์ฌ์ฌ์ฉํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๋ ๋ฐฉ์์ด๋ค. ๊ทธ๋์ ๋์ผํ๊ฑฐ๋ ์ ์ฌํ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ฐ๋ฅํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋๋ก ํ์ฌ ์ต์ ํ๋ฅผ ๋ ธ๋ฆฌ๋ ๊ฒฝ๋ ํจํด์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. Flyweight ๋จ์ด ์๋ฏธ๋ Fly(๊ฐ๋ฒผ์ด) + Weight(๋ฌด๊ฒ)๋ฅผ ๋ปํจ์ผ๋ก์จ, ๋ณต์ฑ์ ์ฒด๊ธ์์ ์ ๋๋์๋ค. ์ด๋ฅผ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ชฉํด๋ณด๋ฉด ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ผ์ผํ ์ธ์คํด์คํ..
๐ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (Static Factory Method)
Static Factory Method Pattern ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋(Static Factory Method) ํจํด์ ๊ฐ๋ฐ์๊ฐ ๊ตฌ์ฑํ Static Method๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋์์ธ ํจํด์ด๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ๊ฐ์ฒด๋ฅผ ์ธ์คํด์คํ ํ ๋ ์ง์ ์ ์ผ๋ก ์์ฑ์(Constructor)๋ฅผ ํธ์ถํ์ฌ ์์ฑํ์๋๋ฐ, ๋ณ๋์ ๊ฐ์ฒด ์์ฑ์ ์ญํ ์ ํ๋ ํด๋์ค ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ๊ฐ์ฒด ์์ฑ์ ์ ๋ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ์ ๋ฉ์๋๋ฅผ ํต์นญ์ ์ผ๋ก ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค. class Book { private String title; // ์์ฑ์๋ฅผ privateํ ํ์ฌ ์ธ๋ถ์์ ์์ฑ์ ํธ์ถ ์ฐจ๋จ private Book(String title) { this.title ..
๐ Template Callback ๋์์ธ ํจํด
Template Callback Pattern ํฌํ๋ฆฟ ์ฝ๋ฐฑ ํจํด(Template Callback Pattern)์ ์คํ๋ง ํ๋ ์์ํฌ์์ DI(Dependency injection) ์์กด์ฑ ์ฃผ์ ์์ ์ฌ์ฉํ๋ ํน๋ณํ ์ ๋ต ํจํด์ด๋ค. ์คํ๋ง์ JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate๊ณผ ๊ฐ์๊ณณ์ ์ฌ์ฉ๋๋ค. ํ๋ง๋๋ก GOF ๋์์ธ ํจํด์ ์๋๊ณ ์ ๋ต ํจํด์ ํ์ฅํ ์ ๋๋ก ๋ณด๋ฉด ๋๋ค. ๊ธฐ์กด์ ์ ๋ต ํจํด์ ๋ณํ๋๋ ์ ๋ต ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ถ์ ์ปดํ์ผ ํ์์์ ํด๋์ค๋ก ๋ง๋ ๋ค ๊ตฌํ์ฒด๋ฅผ ์ฃผ์ ํด ์ฃผ์ด์ผ ๋์ง๋ง, ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด์ ๋ฐํ์ ํ์์์ ์ต๋ช ํด๋์ค๋ฅผ ์ด์ฉํด ๋์ ์ผ๋ก ์ ๋ต ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ ํ๋ค. ์ฉ์ด๋ ๊ทธ๋ฅ ์ ๋ต ํจํด์์์ ์ปจํ ์คํธ(Context)๋ฅผ ..
๐ ๋น๋(Builder) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Builder Pattern ๋น๋ ํจํด(Builder Pattern)์ ๋ณต์กํ ๊ฐ์ฒด์ ์์ฑ ๊ณผ์ ๊ณผ ํํ ๋ฐฉ๋ฒ์ ๋ถ๋ฆฌํ์ฌ ๋ค์ํ ๊ตฌ์ฑ์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ์์ฑ ํจํด์ด๋ค. ์์ฑ์์ ๋ค์ด๊ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฉ์๋๋ก ํ๋ํ๋ ๋ฐ์๋ค์ด๊ณ ๋ง์ง๋ง์ ํตํฉ ๋น๋ํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด๋ค. ์ดํดํ๊ธฐ ์ฌ์ด ์ฌ๋ก๋ก ์์ ํ๋ฒ๊ฑฐ๋ฅผ ๋ค ์ ์๋ค. ์์ ํ๋ฒ๊ฑฐ๋ฅผ ์ฃผ๋ฌธํ ๋ ๋นต์ด๋ ํจํฐ ๋ฑ ์์ฌ๋ฃ๋ค์ ์ฃผ๋ฌธํ๋ ์ฌ๋์ด ๋ง์๋๋ก ๊ฒฐ์ ๋๋ค. ์ด๋ ์ฌ๋์ ์น์ฆ๋ฅผ ๋นผ๋ฌ๋ผ๊ณ ํ ์ ์๊ณ ์ด๋ ์ฌ๋์ ํ ๋งํ ๋ฅผ ๋นผ๋ฌ๋ผ๊ณ ํ ์ ์๋ค. ์ด์ฒ๋ผ ์ ํ์ ์์ฌ๋ฃ๋ค์ ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ฐ์ ๋ค์ํ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ด, ํด๋์ค์ ์ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ๋ง์ ์ํฉ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค. ๋น๋ ํจํด ํ์ ๋ฐฐ๊ฒฝ ์ ์ธต์ ์์ฑ์ ํจํด ์ ์ธต์ ์์ฑ์ ํจํด(Telesc..
๐ ํผ์ฌ๋(Facade) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Facade Pattern ํผ์ฌ๋ ํจํด(Facade Pattern)์ ์ฌ์ฉํ๊ธฐ ๋ณต์กํ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ๊ฐํธํ ์ธํฐํ์ด์ค(API)๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ตฌ์กฐ ํจํด ์ด๋ค. ์๋ฅผ๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ ํด๋์ค์ ๋ฉ์๋๋ค์ด ์ด๋ค ๋ชฉ์ ์ ๋์์ธ์ง ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ฐ๋ก ๊ฐ์ ธ๋ค ์ฐ๊ธฐ์๋ ๋์ด๋๊ฐ ๋์๋, ์ด์ ๋ํ ์ ์ ํ ๋ค์ด๋ฐ๊ณผ ์ ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ์ฝ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฃฐ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ง๋๋๋ฐ, ์ฐ๋ฆฌ๊ฐ ๊ต์ ๋ฅผ ๋ณด๊ณ ํ๊ธฐ๋ ธํธ์ ์ฌ์ ๋ฆฌ๋ฅผ ํ๋ฏ์ด ํด๋์ค๋ฅผ ์ฌ์ ๋ฆฌํ๋ ํ์๋ก ๋ณด๋ฉด ๋๋ค. ๋ณธ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ ์ ์ปค์ง๊ฒ ๋๋ค. ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ์๋ก ๋ง์ ํด๋์ค๋ค์ด ๋ง๋ค์ด์ ธ ์๋ก ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด์ ์ ์ ๋ณต์กํด์ง๊ฒ ๋๋ค. ๊ทธ๋์ ์ปค๋ค๋ ์๋ฃจ์ ์ ๊ตฌ์ฑํ๋ ค๋ฉด ์ํธ ๊ด๋ จ๋ ๋ง์ ํด๋์ค..
๐ ๋ฐ๋ณต์(Iterator) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Iterator Pattern ๋ฐ๋ณต์(Iterator) ํจํด์ ์ผ๋ จ์ ๋ฐ์ดํฐ ์งํฉ์ ๋ํ์ฌ ์์ฐจ์ ์ธ ์ ๊ทผ(์ํ)์ ์ง์ํ๋ ํจํด์ด๋ค. ๋ฐ์ดํฐ ์งํฉ์ด๋ ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด ์๋ฃ์ ๊ตฌ์กฐ๋ฅผ ์ทจํ๋ ์ปฌ๋ ์ ์ ๋งํ๋ค. ๋ํ์ ์ธ ์ปฌ๋ ์ ์ผ๋ก ํ๋ฒ์ฏค์ ๋ค์ด๋ณธ ๋ฆฌ์คํธ๋ ํธ๋ฆฌ, ๊ทธ๋ํ, ํ ์ด๋ธ ..๋ฑ์ด ์๋ค. ๋ณดํต ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ ๊ฐ์ ๊ฒฝ์ฐ ์์๊ฐ ์ฐ์์ ์ธ ๋ฐ์ดํฐ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ for๋ฌธ์ ํตํด ์ํํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํด์, ํธ๋ฆฌ์ ๊ฐ์ ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ ์ ์ฅ ์์๊ฐ ์ ํด์ง์ง ์๊ณ ์ ์ฌ๋๊ธฐ ๋๋ฌธ์, ๊ฐ ์์๋ค์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ ๊ทผํด์ผ ํ ์ง ์ ๋งคํด์ง๋ค. ์๋ฅผ๋ค์ด ์๋์ ๊ฐ์ด ํธ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์๋ค๋ฉด ์ด๋ค ์ํฉ์์ ๊น์ด(์ธ๋ก)๋ฅผ ์ฐ์ ์ผ๋ก ์ํ ํด์ผ ํ ์๋ ์๊ณ , ๋๋น(๊ฐ๋ก)๋ฅผ ์ฐ์ ์ผ๋ก ์ํํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ฒ๋ผ ..
๐ ์ต์ ๋ฒ(Observer) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Observer Pattern ์ต์ ๋ฒ ํจํด(Observer Pattern)์ ์ต์ ๋ฒ(๊ด์ฐฐ์)๋ค์ด ๊ด์ฐฐํ๊ณ ์๋ ๋์์์ ์ํ๊ฐ ๋ณํ๊ฐ ์์ ๋๋ง๋ค ๋์์๋ ์ง์ ๋ชฉ๋ก์ ๊ฐ ๊ด์ฐฐ์๋ค์๊ฒ ํต์งํ๊ณ , ๊ด์ฐฐ์๋ค์ ์๋ฆผ์ ๋ฐ์ ์กฐ์น๋ฅผ ์ทจํ๋ ํ๋ ํจํด์ด๋ค. ์ต์ ๋ฒ ํจํด์ ์ฌํ ๋ค๋ฅธ ๋์์ธ ํจํด๋ค๊ณผ ๋ค๋ฅด๊ฒ ์ผ๋๋ค(one-to-many) ์์กด์ฑ์ ๊ฐ์ง๋๋ฐ, ์ฃผ๋ก ๋ถ์ฐ ์ด๋ฒคํธ ํธ๋ค๋ง ์์คํ ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. Pub/Sub(๋ฐํ/๊ตฌ๋ ) ๋ชจ๋ธ๋ก๋ ์๋ ค์ ธ ์๊ธฐ๋ ํ๋ค. ์ด ํจํด์ ์ดํดํ๋๋ฐ ์์ด ๋ด์ค ํผ๋๋ ์ ํ๋ธ๋ก ๋น์ ํด๋ณด๋ฉด ์ฝ๋ค. ์ ํ๋ธ ์ฑ๋์ ๋ฐํ์(Subject)๊ฐ ๋๊ณ ๊ตฌ๋ ์๋ค์ ๊ด์ฐฐ์(Observer)๊ฐ ๋๋ ๊ตฌ์กฐ๋ก ๋ณด๋ฉด ๋๋ค. ์ค์ ๋ก ์ ํ๋ฒ๊ฐ ์์์ ์ฌ๋ฆฌ๋ฉด ์ฌ๋ฌ๋ช ์ ๊ตฌ๋ ์๋ค์ ๋ชจ๋ ์์์ด ์ฌ๋ผ์๋ค๋ ์๋ฆผ..
๐ ๋ฐ์ฝ๋ ์ดํฐ(Decorator) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Decorator Pattern ๋ฐ์ฝ๋ ์ดํฐ ํจํด(Decorator Pattern)์ ๋์ ๊ฐ์ฒด์ ๋ํ ๊ธฐ๋ฅ ํ์ฅ์ด๋ ๋ณ๊ฒฝ์ด ํ์ํ ๋ ๊ฐ์ฒด์ ๊ฒฐํฉ์ ํตํด ์๋ธํด๋์ฑ ๋์ ์ธ์ ์๋ ์ ์ฐํ ๋์ ๊ตฌ์กฐ ํจํด์ด๋ค. Decorator์ ํด์ํ์๋ฉด '์ฅ์์' ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋ง์น ๊ธฐ๋ณธ ์ ํ์ ํฌ์ฅ์ง๋ ์ธ๋ถ ๋์์ธ์ ์ด์ง ๋ณ๊ฒฝํด ์ค์ผ๋ก์จ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ถ์ฌํ๋ ๊ฒ๊ณผ ๊ฐ์ด, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ์๋ณธ ๊ฐ์ฒด์ ๋ํด์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฅ์ํ์ฌ ๋ ๋ฉ์ง ๊ธฐ๋ฅ์ ๊ฐ์ง๊ฒ ๋ง๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ช ์นญ์ด ๋ถ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ์ด์ฉํ๋ฉด ํ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์กฐํฉ์ ๋ฐํ์์์ ๋์ ์ผ๋ก ์์ฑํ ์ ์๋ค. ๋ฐ์ฝ๋ ์ดํฐํ ๋์ ๊ฐ์ฒด๋ฅผ ์๋ก์ด ํ๋๋ค์ ํฌํจํ ํน์ ์ฅ์์ ๊ฐ์ฒด์ ๋ฃ์ด์ ํ๋๋ค์ ํด๋น ์ฅ์์ ๊ฐ์ฒด๋ง๋ค ..
๐ ์ด๋ํฐ(Adaptor) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Adaptor Pattern ์ด๋ํฐ ํจํด(Adaptor Pattern) ์ด๋ ์ด๋ฆ ๊ทธ๋๋ก ํด๋์ค๋ฅผ ์ด๋ํฐ๋ก์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ ํจํด์ด๋ค. ์ด๋ํฐ๋ ์ฐ๋ฆฌ ์ฃผ๋ณ์๋ ๋ง์ด ๋ณผ ์ ์๋ ๊ฒ์ผ๋ก์, ๋ํ์ ์ผ๋ก 110V ์ ์ฉ ๊ฐ์ ์ ํ์ 220V ์ด๋ํฐ๋ฅผ ๋ผ์ ์ฌ์ฉํ๋ ๊ฑธ ๋ค ์ ์๋ค. ์ฆ, ์๋ก ํธํ์ด ๋์ง ์์ ๋จ์๋ฅผ ์ด๋ํฐ๋ก ํธํ์์ผ ์๋์ํค๊ฒ๋ ํ๋ ๊ฒ์ด ์ด๋ํฐ์ ์ญํ ์ธ ๊ฒ์ด๋ค. ์ด๋ฅผ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ชฉํด๋ณด๋ฉด, ํธํ์ฑ์ด ์๋ ์ธํฐํ์ด์ค ๋๋ฌธ์ ํจ๊ป ๋์ํ ์ ์๋ ํด๋์ค๋ค์ ํจ๊ป ์๋ํด์ฃผ๋๋ก ๋ณํ ์ญํ ์ ํด์ฃผ๋ ํ๋ ํจํด์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์๋ฅผ๋ค์ด ๊ธฐ์กด์ ์๋ ์์คํ ์ ์๋ก์ด ์จ๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๊ฑฐ๋, Legacy ์ธํฐํ์ด์ค๋ฅผ ์๋ก์ด ์ธํฐํ์ด์ค๋ก ๊ต์ฒดํ๋ ๊ฒฝ์ฐ์ ์ด๋ํฐ ํจํด์ ์ฌ์ฉํ๋ฉด ์ฝ๋์..
๐ ํ๋ก์(Proxy) ํจํด - ์๋ฒฝ ๋ง์คํฐํ๊ธฐ
Proxy Pattern ํ๋ก์ ํจํด(Proxy Pattern)์ ๋์ ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋๋ฆฌํ์ฌ ๋์ ์ฒ๋ฆฌํ๊ฒ ํจ์ผ๋ก์จ ๋ก์ง์ ํ๋ฆ์ ์ ์ดํ๋ ํ๋ ํจํด์ด๋ค. ํ๋ก์(Proxy)์ ์ฌ์ ์ ์ธ ์๋ฏธ๋ '๋๋ฆฌ์ธ'์ด๋ผ๋ ๋ป์ด๋ค. ์ฆ, ๋๊ตฐ๊ฐ์๊ฒ ์ด๋ค ์ผ์ ๋์ ์ํค๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ, ์ด๋ฅผ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ๋ชฉํด๋ณด๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋์ ๊ฐ์ฒด๋ฅผ ์ง์ ์ฐ๋๊ฒ ์๋๋ผ ์ค๊ฐ์ ํ๋ก์(๋๋ฆฌ์ธ)์ ๊ฑฐ์ณ์ ์ฐ๋ ์ฝ๋ ํจํด์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ๋ฐ๋ผ์ ๋์ ๊ฐ์ฒด(Subject)์ ๋ฉ์๋๋ฅผ ์ง์ ์คํํ๋ ๊ฒ์ด ์๋, ๋์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ ์ ํ๋ก์(Proxy) ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์ ๊ทผํ ํ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค ์ ๊ทผํ๊ฒ ๋๋ค. ๊ทธ๋ฅ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด ๋์ง, ์ด๋ ๊ฒ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ค๊ณ ๋๋ฆฌ์๋ฅผ ํตํด ์ด์ฉํ๋ ๋ฐฉ์์ ์ทจํ๋ ์ด์ ๋, ๋์..