๐บ๏ธ Design Pattern
Flyweight Patternํ๋ผ์ด์จ์ดํธ ํจํด(Flyweight Pattern)์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํด ๋ง์ ์์ ์์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ ๋์์ธ ํจํด์
๋๋ค. ์ด ํจํด์ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ด์ ์ํ์ ์ธ์ ์ํ๋ก ๋๋์ด, ๋ด์ ์ํ๋ฅผ ๊ณต์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํฉ๋๋ค.Flyweight Pattern → ๋์ผํ ๊ฒ์ ๊ณต์ ํด์ ๋ญ๋น๋ฅผ ์์ค๋ค๋ ํน์ง์ด ์์ต๋๋ค.Flyweight๋ ํ๋ผ์ด๊ธ ์ด๋ผ๋ ์๋ฏธ๋ก, ๊ถํฌ์์ ๊ฐ์ฅ ์ฒด์ค์ด ๊ฐ๋ฒ์ด ์ฒด๊ธ์ ์๋ฏธํฉ๋๋ค.Design Pattern์์๋ Object๋ฅผ ๊ฐ๋ณ๊ฒ ํ๊ธฐ ์ํ ๊ฒ์ ์๋ฏธ์์ ์ฌ์ฉ๋ฉ๋๋ค.Object๋ ์ปดํจํฐ ๋ด๋ถ์์ ๊ฐ์์ ์ผ๋ก ์กด์ฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฒ๋ค ๋๋ ๊ฐ๋ณ๋ค๊ณ ํํ์ ์ค์ ๋ฌด๊ฒ๊ฐ ์๋, “๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋”์ ์๋ฏธํ๋ ๊ฒ์
๋๋ค.๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ทธ ..
๐บ๏ธ Design Pattern
Bridge Pattern๋ธ๋ฆฌ์ง ํจํด(Bridge Pattern)์ ์ํํธ์จ์ด ๋์์ธ ํจํด ์ค ํ๋๋ก, ๊ตฌํ๋ถ์ ์ถ์ํ๋ ์ธํฐํ์ด์ค(๊ธฐ๋ฅ) ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ํจํด์
๋๋ค.์ด ํจํด์ ๊ตฌ์กฐ ํจํด(Structural Pattern) ์ค ํ๋๋ก, ์์คํ
์ ๋ ๋ชจ๋ํํ๊ณ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.AbstractionHigh Level Layer์ดํ๋ฆฌ์ผ์ด์
์ Interface ํน์ UIImplementor์ดํ๋ฆฌ์ผ์ด์
์์ ๋์๊ฐ๋ ์ค์ ๊ตฌํ ์ฝ๋Abstraction๋ง ๋ณผ ์ ์๊ณ ์ค์ Implementor์ ์จ๊ธธ ์ ์๋ ๊ตฌ์กฐ์
๋๋ค.์ธ๋ถ์์ ๋ณด์ฌ์ง๋ ๊ฒ๊ณผ ๋ด๋ถ Implementor๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๊ธฐ ์ข์ต๋๋ค.Bridege Pattern: Example 1Class..
๐บ๏ธ Design Pattern
Facade Patternํผ์ฌ๋ ํจํด(Facade Pattern)์ ๋ณต์กํ ์์คํ
์ด๋ ์๋ธ์์คํ
์ ์ธํฐํ์ด์ค๋ฅผ ๋จ์ํํ๋ ๋์์ธ ํจํด์
๋๋ค.์ด ํจํด์ ํด๋ผ์ด์ธํธ๊ฐ ์์คํ
์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์์คํ
์ ๋ณต์ก์ฑ์ ๊ฐ์ถ๊ณ , ๋จ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.ํผ์ฌ๋ ํจํด์ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น ์ค ํ๋์ธ "๋จ์ผ ์ฑ
์ ์์น"(Single Responsibility Principle)์ ๋ฐ๋ฅด๋ฉฐ, ์์คํ
์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ณด๋ค ๋ช
ํํ๊ฒ ๋ถ๋ฆฌํฉ๋๋ค.Facade Pattern์ด๋ ๊ฑด๋ฌผ์ ์๋ฉด์ฒ๋ผ ๊ทธ ๋ค์ชฝ์ ๋ณต์กํจ์ ๋ด๋ถ์ ์จ๊ธฐ๊ณ ๋จ๋จํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํฉ๋๋ค.์ฌ๋ฌ๊ฐ์ ์๋ธ์์คํ
์ ํตํฉํ์ฌ ๊ณ ์์ค์ API๋ฅผ ์ ๊ณตํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.Client๋ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋ฅผ ํ์๋ก ํ๋ ์ํ์
๋๋ค.์ด๋ฐ ๊ฒฝ์ฐ, ์ฌ๋ฌ ํด๋..
๐บ๏ธ Design Pattern
Decorator Pattern๋ฐ์ฝ๋ ์ดํฐ ํจํด(Decorator Pattern)์ ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ๋์ ์ผ๋ก ์ถ๊ฐํ๊ณ ํ์ฅํ ์ ์๋ ํจํด์
๋๋ค.์ด ํจํด์ ์์์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๊ฐ์ฒด์ ์๋ก์ด ํ๋์ ์ถ๊ฐํ ์ ์๊ฒ ํด์ค๋๋ค.๋ฐ์ฝ๋ ์ดํฐ ํจํด์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ฝ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ์กฐํฉํ์ฌ ๋ค์ํ ๊ธฐ๋ฅ์ ๋์ ์ผ๋ก ์กฐํฉํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.Decorator Pattern์ Object(๊ฐ์ฒด)๋ฅผ ๊พธ๋ฉฐ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.์ํ๋ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ํจํด ์
๋๋ค.class Animal: def speak(self): passclass Cat(Animal): def speak(self): print("Meow", end='')class Dog(Animal): ..
๐บ๏ธ Design Pattern
Adapter Pattern - ์ด๋ํฐ ํจํดAdapter Pattern์ ํธํ๋์ง ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค๋ค์ด ํจ๊ป ๋์ํ ์ ์๋๋ก ์ค๊ฐ์ ์ด๋ํฐ๋ฅผ ๋์ด ์ธํฐํ์ด์ค๋ฅผ ๋ณํํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.ํ๋์ Interface๋ฅผ ๋ค๋ฅธ Interface๋ก ์ ํํ๋ ์ญํ → ์ด๋ฌํ ์ญํ ์ Adapter Pattern์ ์ ์ฉํฉ๋๋ค.‘์ด๋ฏธ ์ ๊ณต๋์ด ์๋ ๊ฒ’๊ณผ ‘ํ์ํ ๊ฒ’ ์ฌ์ด์ ‘์ฐจ์ด’๋ฅผ ์์ ์ฃผ๋ ๋์์ธ ํจํด์ Adapter ํจํด์ด๋ผ๊ณ ํฉ๋๋ค.๋ํ Adapter ํจํด์ Wrapper ํจํด์ผ๋ก ๋ถ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.Wrapper๋ ‘๊ฐ์ธ๋ ๊ฒ’์ด๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ฐ, ๋ฌด์ธ๊ฐ๋ฅผ ํฌ์ฅํด์ ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๊ฒ ๊ตํํด์ฃผ๋ ๊ฒ์ด wrapper์ด๋ฉฐ, adapter๋ผ๊ณ ํฉ๋๋ค.๋๊ฐ์ง์ ์ข
๋ฅ๊ฐ ์์ต๋๋ค.ํด๋์ค์ ์ํ Adap..
๐บ๏ธ Design Pattern
Proxy Pattern - ํ๋ก์ ํจํดProxy Pattern์ ์ฃผ๋ก ๊ฐ์ฒด์ ์ ๊ทผ์ ์ ์ดํ๊ฑฐ๋ ๊ฐ์ฒด์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.์ด ํจํด์ ์ฃผ์ฒด(Real Subject)์ ๊ทธ ์ฃผ์ฒด์ ๋ํ ๋๋ฆฌ์(Proxy)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.Proxy๋ ๋๋ฆฌ์ธ ์ด๋ผ๋ ์๋ฏธ, ์ผ์ ๋์ ํ๋ ์ฌ๋์ด๋ผ๋ ์๋ฏธ์
๋๋ค.‘๋๋ฆฌ์ธ proxy’์ด ํ ์ ์๋ ๋ฒ์๋ฅผ ๋๋ ์ผ์ด ๋ฐํํ๋ฉด, ์ค์ ‘๋ณธ์ธ real’ ์๊ฒ ์์ ์
๋ฌด์์ฒญ์ ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ฐ๋น ์ ์ผ์ ํ ์ ์๋ ‘real object’ ๋์ ์ ‘proxy object’๊ฐ ์ด๋์ ๋ ์ผ์ ์ฒ๋ฆฌํ๊ธฐ๋ ํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ real ์ค๋ธ์ ํธ๋ proxy ์ค๋ธ์ ํธ์ ์กด์ฌ๋ฅผ ๋ชจ๋ฆ
๋๋ค.์ฆ, ์ด๋ง์ ์์ ์ด proxy๋ฅผ ๊ฒฝ์ ํด์ ํธ์ถ๋๊ณ ์๋์ง ์ง์ ํธ..
๐บ๏ธ Design Pattern
Singleton PatternSingleton ํจํด์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๋๋ก ๋ณด์ฅํ๊ณ , ๊ทธ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๋ ์ ์ญ ์ ๊ทผ์ ์ ์ ๊ณตํ๋ ํจํด์
๋๋ค.๊ทธ๋ฆฌ๊ณ ํน์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ํ๋๋ง ์กด์ฌํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.๋ํ ํน์ง๋ค์ ์๋์ ์ ์ด๋ณด์๋ฉด.ํด๋์ค์ ๋ํ ๋จ์ผ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.์ ์ญ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค.๊ณต์ ๋ ๋ฆฌ์์ค์ ๋ํ ๋์ ์ ๊ทผ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.๊ธ๋ก๋ฒ ์์ธ์ค ์ง์ ์ ์ ๊ณตํ๋, ๋จ์ ์ด ๊ฑฐ์ด ์๋ ๊ฒ์ฆ๋ ํจํด์
๋๋ค.์์ ๋ค์ด์ด๊ทธ๋จ์ ์์๋ก ๋ณด๋ฉด, ์์ฑ์๋ฅผ private๋ก ์ ์ธํ๊ณ , ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๋ static ํจ์๋ฅผ ๋ง๋ค์ด ๊ตฌํํ ์ ์์ต๋๋ค.์ฒซ ํธ์ถ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ , ๊ทธํ ํด๋์ค๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ณ์ ๋ฐํํฉ๋๋ค.class Singleton(objec..
๐บ๏ธ Design Pattern
Builder PatternBuilder ํจํด์ ๊ฐ์ฒด ์์ฑ ํจํด ์ค ํ๋๋ก, ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๋จ๊ณ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ ํจํด์
๋๋ค.Object์ ์์ฑ๊ณผ์ ์ด ๋ณต์กํ ๋ ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด์ค๋๋ค.์์ฑ๊ณผ์ ์ด ๋ณต์กํ ์ ์๋ ์ฌ๋ฌ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋ค์ํฉ๋๋ค.์๋ฅผ ๋ค์ด ํ๋์ Object๋ฅผ ์์ฑ์, ์ฌ๋ฌ๊ฐ์ argument๊ฐ ํ์ํ ๋ Builder Pattern์ด ์ฝ๊ฒ ๋ง๋ค์ด ์ค ์ ์์ต๋๋ค.ํต์ฌ ๊ฐ๋
Builder ์ธํฐํ์ด์ค: ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ ๋จ๊ณ๋ฅผ ์ ์ํฉ๋๋ค.Concrete Builder ํด๋์ค: Builder ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ, ๊ฐ ๋จ๊ณ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํฉ๋๋ค.Director: Builder ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ์ ์์๋ฅผ ์ ์ํฉ๋๋ค. ์์ฑ ๊ณผ์ ์ ์ ์ด๋ฅผ ๋ด๋นํฉ๋๋ค.Product: ์ต์ข
์ ..
๐บ๏ธ Design Pattern
Prototype Pattern๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฏธ๋ฆฌ ์ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ณต์ (clone)ํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์
๋๋ค์๋์ ๊ฒฝ์ฐ ํด๋์ค๋ก๋ถํฐ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ธ์คํด์ค๋ฅผ ๋ณต์ฌํด์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋๋๊ฒ์ด ์ข์ต๋๋ค.์ข
๋ฅ๊ฐ ๋๋ฌด ๋ง์์ ํด๋์ค๋ก ์ ๋ฆฌ๋์ง ์๋ ๊ฒฝ์ฐํด๋์ค๋ก๋ถํฐ ์ธ์คํด์ค ์์ฑ์ด ์ด๋ ค์ด ๊ฒฝ์ฐframework ์ ์์ฑํ๋ ์ธ์คํด์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ฅ์ ๊ฐ์ฒด ์์ฑ ๋น์ฉ ์ ๊ฐ: ๋ณต์ (clone) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฏ๋ก, ๊ฐ์ฒด๋ฅผ ์ฒ์๋ถํฐ ์์ฑํ๋ ๊ฒ๋ณด๋ค ๋น์ฉ์ด ์ ๊ฒ ๋ญ๋๋ค.๊ฐ์ฒด ์ด๊ธฐํ์ ๋จ์ํ: ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ๊ณผ์ ์ด ๋ณต์กํ ๊ฒฝ์ฐ, ๋ฏธ๋ฆฌ ์ด๊ธฐํ๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.๋์ ์ธ ๊ฐ์ฒด ์์ฑ: ๋ฐํ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์ ํ ์ ์์ต๋๋ค. ๋จ์ ๊น..
๐บ๏ธ Design Pattern
Abstract Factory Pattern ์ถ์ ํฉํ ๋ฆฌ ํจํด(Abstract Factory Pattern)์ ๊ด๋ จ์ฑ์ด ์๋ ์ฌ๋ฌ ์ข
๋ฅ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์์ฑ ๋์์ธ ํจํด์
๋๋ค. ์ด ํจํด์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋ํ ์ ๋ณด ์์ด๋ ์๋ก ์ฐ๊ด๋๊ฑฐ๋ ์์กด์ ์ธ ๊ฐ์ฒด์ ๊ตฐ์ ์์ฑํ ์ ์๋๋ก ํด์ค๋๋ค. ๋ํ, ํฉํ ๋ฆฌ ์์ฒด๋ฅผ ์ถ์ํํจ์ผ๋ก์จ ๊ฐ์ฒด๋ค์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ์ธํฐํ์ด์ค ์ ๊ณต: ์ถ์ ํฉํ ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ์์ฑ์ ์ถ์ํํ๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ๋ ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ์จ๊น๋๋ค. ์๋ก ์ฐ๊ด๋ ๊ฐ์ฒด ์์ฑ: ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์๋ก ์ฐ๊ด๋ ๊ฐ์ฒด๋ค์ ๊ตฐ์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ..