์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Node.js
- custom hook
- ์ฝ๋ ํฌ๋ฉง
- ๋๋๊ทธ ์ด๋ฒคํธ
- ๋์ ๊ณํ๋ฒ
- svgํ์ผ ๋ค๋ฃจ๊ธฐ
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- DP
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ถ์คํธ์ปจํผ๋ฐ์ค
- JavaScript
- ์ด๋ฏธ์ง ์์
- ์นด์นด์ค์ฑ์ฉ
- ์ฝํ
- ๋ฆฌ๋์ค ํดํท
- js
- ๋ถ์คํธ์บ ํ์น๋ชจ๋ฐ์ผ
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค
- React
- router v6
- ์๊ณ ๋ฆฌ์ฆ
- ์ด๋ถํ์
- Redux toolkit
- icecandidate
- ์นด์นด์ค
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ธ๋ฃจํธํฌ์ค
- TypeScript
- ๊ณผ์ ํ ์คํธ
- Today
- Total
๐ฅ dev-ruby
[์ํํธ์จ์ด๊ณตํ] Design-Pattern ๋ณธ๋ฌธ
Preliminary design (์์์ค๊ณ)
: ์๊ตฌ์ฌํญ์ ๋ฐ์ดํฐ ๋ฐ ์ํํธ์จ์ด ์ํคํ ์ฒ๋ก ๋ณํ
Detailed design (์์ธ์ค๊ณ)
: ์ํํธ์จ์ด์ ๋ํ ์์ธํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ํํ์ผ๋ก ์ํคํ ์ฒ ๊ฐ์
๊ธฐ์ ์ ์ธก๋ฉด์์ ์ค๊ณ
Data design
: ์์ฑ๋ ์ ๋ณด ์์ญ ๋ชจ๋ธ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋ณํ
Architectural design
: ์ํํธ์จ์ด์ ์ฃผ์ ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ ๊ฐ์ ๊ด๊ณ์ ๋ํ ์ ์
Procedural design
: ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ํํธ์จ์ด์ ์ ์ฐจ์ ๋์คํฌ๋ฆฝ์ ์ผ๋ก ๋ณํ
Interface design
: ์ธ๊ฐ-๊ธฐ๊ณ ์ํธ์์ฉ์ ์ํ ๋ฐฐ์น ๋ฐ ์ํธ ์์ฉ ๋ฉ์ปค๋์ฆ์ ํ๋ฆฝ
Design Patterns
- ๊ฐ์ฒด์งํฅ ์ค๊ณ ์ฐ์ถ๋ฌผ์ ์ฌ์ฌ์ฉ : ์ ์ฉํ ์ค๊ณ์ ๋ณด๋ฅผ ํจํด์ผ๋ก ์ ์
- ํน์ ๋ฌธ์ ์ ๋ํ ๋ฐ๋ณต๋๋ ์๋ฃจ์ (๋ ธํ์ฐ)์ ์ผ์ ํ ํ์์ผ๋ก ์ ์ํ ๊ฒ
์ ์ค๊ณ ํจํด?
- ์ค๊ณ์๋ค๊ฐ์ ์์ฌ ์ํต์ ์๋จ
- ์ดํ๋ฆฌ์ผ์ด์ ์์กด์ ์ธ ๋ถ๋ถ์ ๋ถ๋ฆฌ : ํ์ฅ์ฑ ์ฆ๋
- ๊ธฐ์กด ๋ชจ๋ธ์ ํ์ง ํฅ์
- ํด๋์ค๋ฅผ ํ์ฅํ์ง๋ง ์ฝ๋๋ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ๊ฐ์ถค
Design Patterns์์ฉ
ํน์ ํด๋์ค์์ ๊ฐ์ฒด ์์ฑ์ : ํด๋์ค ์ด๋ฆ์ ๋ช ์ํ๋ฉด ๊ตฌํ์ ์ข ์๋จ. -> ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํธ์ถ
์ฐ์ฐ ์์กด์ฑ : ํน์ ์ฐ์ฐ์ ํธ์ถํ๋ฉด ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ด ์ฐ์ฐ์ ์์กด -> ์ปดํ์ผ ์์ ๊ณผ ๋ฐํ์ ์์ ๋ชจ๋ ๋ง์กฑํ๋ ์์ฒญ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ
ํ๋ซํผ ์์กด์ฑ : ํ๋ซํผ ์์กด์ ์ธ ์ธํฐํ์ด์ค๋ ์ฌ์ฌ์ฉ์ฑ์ด ์ ํ๋จ -> ์ ๊ฑฐํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์์ฑ
๊ฐ์ฒด ๊ตฌํ ํน์ ์๊ณ ๋ฆฌ์ฆ ์์กด์ฑ : ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์ฉ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ -> ๊ตฌํ ๊ฐ์ฒด์ ์์ฉ ๊ฐ์ฒด ๋ถ๋ฆฌ
์๋ธ ํด๋์ค๋ฅผ ํตํ ๊ธฐ๋ฅ ํ์ฅ : ์์ ๊ตฌ์กฐ์ ๋ํ ์ดํด ํ์ -> ์๋ธ ํด๋์ค๋ฅผ ํ์ฅํ์ง ์๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด์์ ํฉ์ฑ์ ํตํด ๊ธฐ๋ฅ ์์ฑ
ํด๋์ค ๋ณ๊ฒฝ์ ์ด๋ ค์ : ํ ํด๋์ค ๋ณ๊ฒฝ์ด ๋ค์ ํด๋์ค์ ์ํฅ์ ๋ฏธ์น ๋ -> ์ธํฐํ์ด์ค ํด๋์ค๋ฅผ ๋์ด ๋ณ๊ฒฝ ์ํฅ์ ์ต์ํ
1. ์์ฑํจํด
: ๊ฐ์ฒด ์์ฑ ๊ด๋ จ ํจํด, ๊ฐ์ฒด ์์ฑ, ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์คํ ์ํฅ ์ต์ํ
factory method ํจํด
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ธํฐํ์ด์ค์ ์ค์ ๊ฐ์ฒด ์์ฑ ํด๋์ค๋ฅผ ๋ถ๋ฆฌ
์์ ํด๋์ค : ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ง ๊ฒฐ์
ํ์ ํด๋์ค : ์ธ์คํด์ค๋ฅผ ์์ฑ
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์์ ์ ์์ง๋ง, ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ ์ง ์ ์ ์์ ๋, ๊ฐ์ฒด ์์ฑ์ ํ์ ํด๋์ค์ ์์ํ์ฌ ํด๊ฒฐ
singleton ํจํด
: ์ ํํ ํ๋์ ์์๋ง ๊ฐ๋ ์งํฉ
ํน์ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์ค์ง ํ ๊ฐ๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅ
๋์ผํ ์์์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ง ํ ์๊ฐ ์์ ๊ฒฝ์ฐ ์ฃผ๋ก ์ด์ฉ
<<singleton>> ์ผ๋ก ์คํ ๋ ์ค ํ์ ์ ์
prototype ํจํด
: ์ธ์คํด์ค๋ฅผ ๋ณต์ ํ์ฌ ์ฌ์ฉํ๋ ๊ตฌ์กฐ
์ฒ์๋ถํฐ ์ผ๋ฐ์ ์ธ prototype(์ธ์คํด์ค)์ ๋ง๋ค์ด ๋๊ณ ๊ทธ๊ฒ์ ๋ณต์ฌํ ํ ํ์ํ ๋ถ๋ถ๋ง ์์
<<prototype>> ์ผ๋ก ์คํ ๋ ์ค ํ์ ์ ์
builder ํจํด
: ๋ณต์กํ ์ธ์คํด์ค๋ฅผ ์กฐ๋ฆฝํ์ฌ ๋ง๋๋ ๊ตฌ์กฐ
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๋ฆฌ
abstract factory ํจํด
: ์ฌ๋ฌ ๊ฐ์ concrete Product๋ฅผ ์ถ์ํ์ํจ ๊ฒ
๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ concreteProduct ํด๋์ค์์ ์ด๋ฃจ์ด์ง
์ฌ์ฉ์์๊ฒ ์ธํฐํ์ด์ค(API)๋ฅผ ์ ๊ณตํ๊ณ , ์ธํฐํ์ด์ค๋ง ์ฌ์ฉํด์ ๋ถํ์ ์กฐ ๋ฆฝํ์ฌ ๋ง๋ฆ
2. ๊ตฌ์กฐํจํด
: ํ๋ก๊ทธ๋จ ๋ด์ ์๋ฃ๊ตฌ์กฐ๋ ์ธํฐํ์ด์ค ๊ตฌ์กฐ ๋ฑ ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ ์ค๊ณ ํจํด
: ํด๋์ค/๊ฐ์ฒด๋ค์ ํฉ์ฑ์ ํตํด์ ๋ ํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑ
: ๊ท๋ชจ๊ฐ ํฐ ๋ณต์กํ ์์คํ ์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋๋ก ์ง์
composite ํจํด
: ๋ถ๋ถ(Part) – ์ ์ฒด(Whole) ์์๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ํธ๋ฆฌ ๊ตฌ์กฐ ํจํด
์ฌ์ฉ์๊ฐ ๋จ์ผ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด ๋ชจ๋ ๋์ผํ๊ฒ ๋ค๋ฃจ๋๋ก ํ ๊ฒ
์ฌ๊ท์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ค๊ณ ํจํด
์ฌ์ฉ ์์
- ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํํํ๊ณ ์ ํ ๋
- ํ์ฌ์ ์กฐ์ง๋๋ฅผ ๋ํ๋ด๊ณ ์ ํ ๋
adapter ํจํด
: ๊ธฐ์กด ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ฐ์์ ๋ง์ถฐ์ฃผ๋ ์ญํ
- ํธํ์ฑ์ด ์๋ ๊ธฐ์กด ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ณํํด ์ฌ์ฌ์ฉํ ์ ์ ๋๋ก ํจ
ํจํด ํํ
- ์์์ ์ด์ฉํ ์ด๋ํฐ ํจํด (ํด๋์ค adapter ํจํด)
- ์์์ ์ด์ฉํ ์ด๋ํฐ ํจํด (์ธ์คํด์ค adapter ํจํด)
decorator ํจํด
: ๊ธฐ์กด์ ๊ตฌํ๋์ด ์๋ ํด๋์ค์ ๊ทธ๋ ๊ทธ๋ ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํด ๋๊ฐ๋ ์ค๊ณํจํด
๊ธฐ๋ฅํ์ฅ์ด ํ์ํ ๋ ์์์ ๋์์ผ๋ก ์ฌ์ฉ
facade ํจํด
: ๋ช ๊ฐ์ ํด๋ผ์ด์ธํธ ํด๋์ค์ ์๋ธ์์คํ ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ facade ๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ธ์๋์์ผ๋ก์จ ๋ณต์กํ ๊ด๊ณ๋ฅผ ์ ๋ฆฌํ ๊ฒ
๋ชจ๋ ๊ด๊ณ๊ฐ ์ ๋ฉด์ ์ธ์์ง facade ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ์ด๋ฃจ์ด์ง ์ ์๊ฒ ๋จ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
facade ํจํด์ ์ด์ฉํ๋ฉด ํด๋์ค๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ์ค์ด๋ค๊ณ ๋ณต์ก์ฑ๋ ๋ฎ์์ง
proxy ํจํด
: Proxy : ๋๋ฆฌ์ธ (๋ฌด์ธ๊ฐ๋ฅผ ๋์ ํด์ ์ฒ๋ฆฌํ๋ ๊ฒ)
๋ณต์กํ๊ฑฐ๋ ์์ฑํ๋๋ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์ข ๋ ๊ฐ๋จํ ๊ฐ์ฒด๋ก ํํํ๊ธฐ ์ํด ํ์ํ ๋๊น์ง ๊ฐ์ฒด ์์ฑ์ ๋ณด๋ฅ
๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋์ด ์ด์ํ๋ ๊ฒ
3. ํ์ํจํด
: ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ค์ ์ํธ์์ฉ์ ํจํดํ
- ํด๋์ค/๊ฐ์ฒด์ ์ํธ์์ฉ ๋ฐฉ๋ฒ๊ณผ ์ฑ
์์ ๋ํ ๋ถ์ฐ ๋ฐฉ๋ฒ
- ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ๋ณํ์ง ์์ง๋ง ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ฌ๋ผ์ง ๋
- ํ์๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ฎ๊ธฐ๊ฑฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ฒดํ๋ ๊ฒฝ์ฐ
- ๋ฉ์์ง ๊ตํ๊ณผ ๊ด๋ จ๋ ๊ฒ
iterator ํจํด
: ๋ฐ๋ณต์ด ํ์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๊ทผ (๋ฐฐ์ด, ๋ฆฌ์คํธ, Set, Map ๋ฑ)
๋ฐ์ดํฐ๋ค์ ์งํฉ์ฒด๋ฅผ ๋ชจ๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ ํ ์ ์๊ฒ ํ๋ ๊ฒ
observer ํจํด
: ์ด๋ค ํด๋์ค์ ๋ณํ๊ฐ ์ผ์ด๋ฌ์ ๋, ์ด๋ฅผ ๊ฐ์งํ์ฌ ๋ค๋ฅธ ํด๋์ค์ ํต๋ณด ํด์ฃผ๋ ๊ฒ
์ด๋ค ์ผ์ด ์๊ธฐ๋ฉด ๋ฏธ๋ฆฌ ๋ฑ๋กํ ๊ฐ์ฒด๋ค์๊ฒ ์ํ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ์ญํ
strategy ํจํด
: ์๊ณ ๋ฆฌ์ฆ ๊ตฐ์ ์ ์ํ๊ณ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๊ฐ ํ๋์ ํด๋์ค๋ก ์บก์ํํ ๋ค์, ํ์ํ ๋ ์๋ก ๊ตํํด์ ์ฌ์ฉํ ์ ์๊ฒ ํจ
ํด๋ผ์ด์ธํธ์๊ฒ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ๊ทธ ๊ตฌ์กฐ๋ฅผ ์จ๊ฒจ์ฃผ๋ ์ญํ
์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ณณ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ๋ ๊ณณ์ ๋ถ๋ฆฌ์ํจ ๊ตฌ์กฐ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๋์ ์ผ๋ก ๊ต์ฒด ํ ์ ์์
template method ํจํด
: ์์ ํด๋์ค์์๋ ์ถ์์ ์ผ๋ก ํํํ๊ณ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ํ์ ํด๋์ค์์ ๊ฒฐ์ ๋๋ ๋์์ธ ํจํด
์ฝ๋ ์์ ์ค์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋๋ ์ญํ
์ ์ฌํ ์๋ธ ํด๋์ค๊ฐ ์กด์ฌํ ๋ ๋งค์ฐ ์ ์ฉ
chain of responsibility ํจํด
: ์ฑ ์๋ค์ด ์ฐ๊ฒฐ๋์ด ์์ด ๋ด๊ฐ ์ฑ ์์ ๋ชป ์ง ๊ฒ ๊ฐ์ผ๋ฉด ๋ค์ ์ฑ ์์ ์๊ฒ ์๋์ผ๋ก ๋์ด๊ฐ๋ ๊ตฌ์กฐ
์๋์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ตฌ์กฐ
- (์) ํ์ ์ ํ ์๋ด
- ์ ํ ๋ฐ์ ์ฌ๋์ด ๋ด๋น์๊ฐ ๋ฌ๋ผ์ ์ ํ๋ฒํธ๋ง ์๋ ค์ฃผ๊ณ ์ผ๋จ ์ ํ ๋ฅผ ๋๊ณ ๋ค์ ๊ฑฐ๋ (a)์ ์ ๊ตฌ์กฐ
- ๋ด๋น์๊ฐ ์๋ ๊ฒฝ์ฐ ์ ํ๋ฅผ ๋๋ ค์ฃผ ๋ (b)๋์ ๊ตฌ์กฐ
mediator ํจํด
: ์ค๊ฐ์์ ์ฐ๊ฒฐํ๊ณ ํต์ ํ๋ ์ญํ
์ค์ฌ์์๊ฒ ๋ชจ๋ ๊ฒ์ ์๊ตฌํ์ฌ ํต์ ์ ๋น๋์๋ฅผ ์ค์ฌ ๊ฐ์ฒด์งํฅ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ฒ ํด์ฃผ๋ ๊ฒ
memento ํจํด
: ํด๋์ค ์ค๊ณ ๊ด์ ์์ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ ๋ ์ ์ฉ
ํจํด ์ ํ
- ํจํด์ด ์ด๋ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ๋ช ํํ ์ดํดํ๋ค.
- ํจํด์ด ์๋ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง๋ฅผ ํ์ธํ๋ค.
- ๋น์ทํ ๋ชฉ์ ์ ํจํด์ ๋ชจ์์ ์ดํดํ๋ค.
- ์ฌ์ค๊ณ ํน์ ํจํด ์ ์ฉ์ด ๊ฐ๋ฅํ ๋ถ๋ถ์ ์๋ณํ๋ค.
- ๋์ผํ ๊ธฐ๋ฅ์ ๊ฐ๋ ํด๋์ค ์๋ณ ๋ฐ ํ์ธ
- ํด๋น ํจํด์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ๊ณผ ๋งคํํด ๋ณธ๋ค.
- ๋์ฒด๋ฅผ ํ์ ํ๊ณ ํจํด์ ์ ์ฉํ๋ค.
- ํ์ํ ์ธํฐํ์ด์ค๋ฅผ ์์ ํ๋ค.
'์ํํธ์จ์ด๊ณตํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํํธ์จ์ด๊ณตํ] ํ์๊ด๋ฆฌ (0) | 2021.12.12 |
---|---|
[์ํํธ์จ์ด๊ณตํ] Verification & Validation (0) | 2021.12.12 |
[์ํํธ์จ์ด๊ณตํ] ๊ฐ์ฒด์งํฅ์ค๊ณ (0) | 2021.12.12 |
[์ํํธ์จ์ด๊ณตํ] ๋ชจ๋ํ(Modularity) (0) | 2021.12.11 |