๊ฐ์ฒด ์งํฅ์ ๊ฐ ์ ๋ฌธํ ์ฌ๋๋ค์ ๊ฐ์ฅ ํํ ์ค์๋
ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ์ ๊ณ ๋ คํ์ง ์์ ์ฑ ๊ฐ์ฒด๊ฐ ๊ฐ์ ธ์ผํ ์ํ์ ํ๋๋ถํฐ ๊ณ ๋ฏผํ๊ธฐ ์์ํ๋ค.
์ค์ํ ๊ฒ์ ๊ฐ๋ณ ๊ฐ์ฒด๊ฐ ์๋๋ผ ๊ฐ์ฒด๋ค ์ฌ์ด์ ์ด๋ค์ง๋ ํ๋ ฅ์ด๋ค.
01. ํ๋ ฅ
ํ๋ ฅ์ ํ ์ฌ๋์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋์์ ์์ฒญํ ๋ ์์๋๋ค.
๋ค์์ ์์ฒญ๊ณผ ์๋ต์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ ์ฒด์ ์ผ๋ก ํ๋ ฅ์ ๋ค์์ ์ฐ์์ ์ธ ์์ฒญ๊ณผ ์๋ต์ ํ๋ฆ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
02. ์ฑ ์
์ด๋ค ๊ฐ์ฒด๊ฐ ์ด๋ค ์์ฒญ์ ๋ํด ๋๋ตํด ์ค ์ ์๊ฑฐ๋, ์ ์ ํ ํ๋์ ํ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ฒด๊ฐ ์ฑ ์์ ๊ฐ์ง๋ค๊ณ ๋งํ๋ค.
๊ฐ์ฒด์ ์ฑ ์์ '๊ฐ์ฒด๊ฐ ๋ฌด์์ ์๊ณ ์๋๊ฐ(knowing)'์ '๋ฌด์์ ํ ์ ์๋๊ฐ(doing)'๋ก ๊ตฌ์ฑ๋๋ค.
ํ๋ ๊ฒ(doing) | ์๋ ๊ฒ(knowing) |
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๊ณ์ฐ์ ํ๋ ๋ฑ์ ์ค์ค๋ก ํ๋ ๊ฒ | ๊ฐ์ธ์ ์ธ ์ ๋ณด์ ๊ดํด ์๋ ๊ฒ |
๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์ ์์ํ๋ ๊ฒ | ๊ด๋ จ๋ ๊ฐ์ฒด์ ๊ดํด ์๋ ๊ฒ |
๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋์ ์ ์ดํ๊ณ ์กฐ์ ํ๋ ๊ฒ | ์์ ์ด ์ ๋ํ๋๋ ๊ณ์ฐํ ์ ์๋ ๊ฒ์ ๊ดํด ์๋ ๊ฒ |
์ฑ ์์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํ์ง์ ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ์ค์ํ ์์์ด๊ณ ,
๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์์ ์ ์ ์ ํ ๊ฐ์ฒด์๊ฒ ์ ์ ํ ์ฑ ์์ ํ ๋นํ๋ ๋ฐ ์๋ค.
์ฑ ์์ด ๋ถ๋ถ๋ช ํ ๊ฐ์ฒด๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋ ์ญ์ ๋ถ๋ถ๋ช ํ๊ฒ ๋ง๋ ๋ค.
ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ ์กํ ์์ฒญ์ ๊ทธ ์์ฒญ์ ์์ ํ ๊ฐ์ฒด์ ์ฑ ์์ด ์ํ๋๊ฒ ํ๋ค. ์ด์ฒ๋ผ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์ฃผ์ด์ง ์ฑ ์์ ์ํํ๋๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ๋ฉ์ธ์ง ์ ์ก(message-send)์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ๋ ๊ฐ์ฒด ๊ฐ์ ํ๋ ฅ์ ๋ฉ์์ง๋ฅผ ํตํด ์ด๋ค์ง๋ค.
๋ฉ์ธ์ง๋ฅผ ์ ์กํจ์ผ๋ก์จ ํ๋ ฅ์ ์์ฒญํ๋ ๊ฐ์ฒด : ์ก์ ์
๋ฉ์์ง๋ฅผ ๋ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด : ์์ ์
๋ฉ์์ง๋ ํ๋ ฅ์ ์ํด ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ์ฒด์งํฅ ์ค๊ณ๋ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ํด ์ด๋ค ๊ฐ์ฒด๊ฐ ์ด๋ค ์ฑ ์์ ์ํํด์ผ ํ๊ณ ์ด๋ค ๊ฐ์ฒด๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํ ๊ฒ์ธ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ผ๋ก๋ถํฐ ์์๋๋ค. ์ด๋ค ํด๋์ค๊ฐ ํ์ํ๊ณ ์ด๋ค ๋ฉ์๋๋ฅผ ํฌํจํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฑ ์๊ณผ ๋ฉ์์ง์ ๋ํ ๋๋ต์ ์ธ ์ค๊ณฝ์ ์ก์ ํ ์์ํด๋ ๋ฆ์ง ์๋ค.
03. ์ญํ
์ญํ ์ ํ๋ ฅ ๋ด์์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๋์ฒดํ ์ ์์์ ๋ํ๋ด๋ ์ผ์ข ์ ํ์์ด๋ค.
ํ๋ ฅ ์์์ ์ญํ ์ "์ด ์๋ฆฌ๋ ํด๋น ์ญํ ์ ์ํํ ์ ์๋ ์ด๋ค ๊ฐ์ฒด๋ผ๋ ๋์ ํ ์ ์์ต๋๋ค." ๋ผ๊ณ ๋งํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
์ญํ ์ ๋์ฒดํ ์ ์๋ ๊ฐ์ฒด๋ ๋์ผํ ๋ฉ์์ง๋ฅผ ์ดํดํ ์ ์๋ ๊ฐ์ฒด๋ก ํ์ ๋๋ค.
์ญํ ์ ๊ฐ๋ ์ ์ฌ์ฉํ๋ฉด ์ ์ฌํ ํ๋ ฅ์ ์ถ์ํํด์ ์ธ์ง ๊ณผ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
๋ํ ๋ค์ํ ๊ฐ์ฒด๋ค์ด ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ฅ์ด ์ข ๋ ์ ์ฐํด์ง๋ฉฐ ๋ค์ํ ๊ฐ์ฒด๋ค์ด ๋์ผํ ํ๋ ฅ์ ์ฐธ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
์ญํ ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋จ์์ฑ(simplicity), ์ ์ฐ์ฑ(flexibility), ์ฌ์ฌ์ฉ์ฑ(reusability)์ ๋ท๋ฐ์นจํ๋ ํต์ฌ ๊ฐ๋ ์ด๋ค.
์ญํ ์ ์ด์ฉํ๋ฉด ํ๋ ฅ์ ์ถ์ํํ ์ ์๋ค.
04. ๊ฐ์ฒด์ ๋ชจ์์ ๊ฒฐ์ ํ๋ ํ๋ ฅ
์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด๋ฅผ ํ๋ ฅ์ด๋ผ๋ ๋ฌธ๋งฅ์์ ๋ผ์ด๋์ ์ฑ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ๊ณ ์ด๋ค ํด๋์ค๋ก ๊ตฌํํด์ผ ํ๋ ์ง๋ฅผ ๊ณ ๋ฏผํ๋ ๊ฒ์ ์๋ฌด๋ฐ ๋์์ด ๋์ง ์๊ณ , ๊ฐ์ฒด์ ํ๋ฆ์ ํ๋ ฅ์ ๋ฐ๋ผ ํ๋ฌ์ผ ํ๋ค.
ํ๋ ฅ์ ์ค๊ณํ๋ค๋ ๊ฒ์ ์ค๊ณ์ ์ฐธ์ฌํ๋ ๊ฐ์ฑ๋ค์ด ์ฃผ๊ณ ๋ฐ์ ์์ฒญ๊ณผ ์๋ต์ ํ๋ฆ์ ๊ฒฐ์ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ ๊ฒ ๊ฒฐ์ ๋ ์์ฒญ๊ณผ ์๋ต์ ํ๋ฆ์ ๊ฐ์ฒด๊ฐ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ํด ์ํ๋ ์ฑ ์์ด ๋๋ค.
๊ฐ์ฒด์๊ฒ ์ฑ ์์ ํ ๋นํ๊ณ ๋๋ฉด ์ฑ ์์ ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ์ ๊ณตํ๊ฒ ๋ ํ๋์ด ๋๋ค.
ํ๋์ ๊ฒฐ์ ํ ํ์ ๊ทธ ํ๋์ ์ํํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฏผํด์ผ ํ๋ค.
๊ฐ์ฒด๊ฐ ํ๋ ฅ์ ์ฐธ์ฌํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ์ ํ๋์ด ๊ฒฐ์ ๋ ํ์ ํด๋์ค์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํด์ผ ํ๋ค.
05. ๊ฐ์ฒด์งํฅ ์ค๊ณ ๊ธฐ๋ฒ
์ฑ ์-์ฃผ๋ ์ค๊ณ (Responsibility-Driven Design)
ํ๋ ฅ์ ํ์ํ ์ฑ ์๋ค์ ์๋ณํ๊ณ ์ ํฉํ ๊ฐ์ฒด์๊ฒ ์ฑ ์์ ํ ๋นํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ค.
๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ์ ๋ฌธ๊ฐ๋ค์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฌ๊ณ ํ๊ณ ๋ฌด์์ ๊ธฐ๋ฐ์ผ๋ก ์์ฌ๊ฒฐ์ ์ ๋ด๋ฆฌ๋์ง ์ ๋ณด์ฌ์ค๋ค.
๋์์ธ ํจํด (Design Pattern)
์ค๊ณ๋ฅผ ํ ๋ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ ํผํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํจํด์ด๋ค.
์ฑ ์-์ฃผ๋ ์ค๊ณ๋ ๊ฐ์ฒด์ ์ญํ , ์ฑ ์, ํ๋ ฅ์ ๊ณ ์ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๊ณผ ์ ์ฐจ๋ฅผ ์ ์ํ๊ณ
๋์์ธ ํจํด์ ์ฑ ์-์ฃผ๋ ์ค๊ณ์ ๊ฒฐ๊ณผ๋ฅผ ํํํ๋ค.
๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๊ทธ ๋ฌธ์ ์ ๋ํ ํด๋ฒ์ ์์ผ๋ก ์ ์๋๋ค.
ํจํด์ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๋ช ํํ๊ฒ ์์ ํ๊ณ , ํจํด์ ์ ์ฉํ ์ ์๋ ์ํฉ๊ณผ ์ ์ฉํ ์ ์๋ ์ํฉ์ ํจ๊ป ์ค๋ช ํ๋ค.
๋์์ธ ํจํด์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ญํ , ์ฑ ์, ํ๋ ฅ์ ํ ํ๋ฆฟ์ด๋ค.
๋ง์ฝ ํน์ ํ ์ํฉ์ ์ ์ฉ ๊ฐ๋ฅํ ๋์์ธ ํจํด์ ์ ์๊ณ ์๋ค๋ฉด ์ฑ ์-์ฃผ๋ ์ค๊ณ์ ์ ์ฐจ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฐ๋ฅด์ง ์๊ณ ๋ ์์คํ ์์ ๊ตฌํํ ๊ฐ์ฒด๋ค์ ์ญํ ๊ณผ ์ฑ ์, ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋น ๋ฅด๊ณ ์์ฝ๊ฒ ํฌ์ฐฉํ ์ ์๋ค.
๋์์ธ ํจํด์ ์ฑ ์-์ฃผ๋ ์ค๊ณ์ ๊ฒฐ๊ณผ๋ฌผ์ธ ๋์์ ์ง๋ฆ๊ธธ์ด๋ค!
ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ (Test-Driven Development)
๊ธฐ๋ณธ ํ๋ฆ์ ์คํจํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์ฑํ ํ, ๋ฆฌํฉํฐ๋ง(Refactoring)์ ํตํด ์ค๋ณต์ ์ ๊ฑฐํ๋ ์ค๊ณ ๊ธฐ๋ฒ์ด๋ค.
๋จ์ํ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ฑ ์์ ์ํํ ๊ฐ์ฒด ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ๋ํ๋ ๊ฐ์ฒด์ ์ญํ ์ด ๋ฉ์์ง๋ฅผ ์์ ํ ๋ ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ๊ทธ ๊ณผ์ ์์ ์ด๋ค ๊ฐ์ฒด์ ํ๋ ฅํ ๊ฒ์ธ์ง์ ๋ํ ๊ธฐ๋๋ฅผ ์ฝ๋์ ํํ๋ก ์์ฑํ๋ค.
ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ์ ์ฑ ์-์ฃผ๋ ์ค๊ณ์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋ค์ํ ์์น๊ณผ ํ๋ํฐ์ค, ํจํด์ ์ข ํฉ์ ์ผ๋ก ์ดํดํ๊ณ ์ข์ ์ค๊ณ์ ๋ํ ๊ฐ๊ฐ๊ณผ ๊ฒฝํ์ ๊ธธ๋ฌ์ผ๋ง ์ ์ฉํ ์ ์๋ ์ค๊ณ๊ธฐ๋ฒ์ด๋ค. ์ญํ , ์ฑ ์, ํ๋ ฅ์ ์ง์คํ๊ณ ๊ฐ์ฒด์งํฅ์ ์์น์ ์ ์ฉํ๋ ค๋ ๊น์ด ์๋ ๊ณ ๋ฏผ๊ณผ ๋ ธ๋ ฅ์ ํตํด์๋ง ํ ์คํธ-์ฃผ๋ ๊ฐ๋ฐ์ ํํ์ ๋๋ฆด ์ ์๋ค.
'๐ book > ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
05 ์ฑ ์๊ณผ ๋ฉ์์ง (2) ์ธํฐํ์ด์ค (0) | 2022.01.13 |
---|---|
05 ์ฑ ์๊ณผ ๋ฉ์์ง (1) ๋ฉ์์ง (0) | 2022.01.12 |
03 ํ์ ๊ณผ ์ถ์ํ (2) ํ์ (0) | 2021.12.29 |
03 ํ์ ๊ณผ ์ถ์ํ (1) ์ถ์ํ (0) | 2021.12.27 |
02 ์ด์ํ ๋๋ผ์ ๊ฐ์ฒด (2) (0) | 2021.12.21 |