Table of Contents
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
-
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ :
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ป๊ฒ(HOW) ๋ชฉ์ ์ ๋ฌ์ฑ ํ ์ง์ ์ด์ ์ด ๋ง์ถ์ด์ ธ ์๊ณ ํ๋ก๊ทธ๋๋ฐ์ ์ํ์ ๊ทธ๊ฒ์ ๋ณ๊ฒฝ์ํค๋ ๊ตฌ๋ฌธ์ ๊ด์ ์์ ์ฐ์ฐ์ ์ค๋ช ํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ๊ทธ๋์ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์๋ ๋ช ์๋์ด ์๊ณ ๋ชฉํ์ ๋ํด์๋ ๋ช ์๋์ด ์์ง ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปดํจํฐ๊ฐ ์ํํ ๋ช ๋ น๋ค์ ์์๋๋ก ์จ๋ด๋ ค๊ฐ๋๋ฐ ์ผ๋ฐ์ ์ธ ์์๋ก๋ C, C++, Java, Paskal, Ruby ๋ฑ ์ฐ๋ฆฌ๊ฐ ์๋ ์ฌ๋งํ ์ ์ฐจํ, ๊ฐ์ฒด์งํฅ ์ธ์ด๋ค์ ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
-
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ :
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ์ ์๋ก ๋๋๋ค.
- ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌด์์(WHAT) ํ ์ง์ ์ด์ ์ด ๋ง์ถ์ด์ ธ ์๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์ํ์ง ์๊ณ ๋ชฉํ์ ๋ํด์๋ง ๋ช ์ ํ๋ค. ์๋ฅผ๋ค์ด HTML ๊ณผ ๊ฐ์ด ๋ฌด์์ ์น์ ๋ํ๋ผ์ง์ ๋ํด ๊ณ ๋ฏผํ๋ ๊ฒ์ด์ง ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๋ํ๋ผ์ง๋ฅผ ๊ณ ๋ฏผ ํ๋ ๊ฒ์ด ์๋๋ค.
- ํจ์ํ, ๋ ผ๋ฆฌํ, ์ ํํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฐ์ธ ๊ฒฝ์ฐ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ค. ๋ช ๋ นํ ์ธ์ด์ ๋๋น๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์ ์ธํ์ผ๋ก ํต์นญํ๋ค. ํ์ง๋ง ์ด ์ค ๋ ผ๋ฆฌํ, ์ ํํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ ๋ช ๋ฐฑํ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ ์ ์๊ณ ๊ตฌํ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฒซ๋ฒ์งธ ์ ์๋ฅผ ๋ฐ๋ฅด๋ ์๋ฐํ ์๋ฏธ์ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ์๋๋ค.
"์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋ฅ ์๊ฐํ๋ฉด ๋๋ ๊ฒ์ด๊ณ , ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์กด๊ณผ ๋ค๋ฅด๊ฒ ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋น์ ์ ์๋ง๋ ์์ ๋ฐฉ์์ผ๋ก ์ ๋ ๋์๊ฐ์ง ์์ ๊ฒ์ด๋ค."
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฐฉ์์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์๋๋ผ ํจ์๋ก ํ๋ก๊ทธ๋๋ฐ ํ๋ ์ฌ๊ณ ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ด๋ค. ์ฆ ๊ธฐ์กด์ ์ฌ๊ณ ๋ฐฉ์์ ์ ํํ์ฌ ์ฌ๊ณ ๋ฅผ ์ ์ฐํ๊ฒ ๋ฌธ์ ํด๊ฒฐ์ ์ ๊ทผ ํ๋ ๊ฒ์ด๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์๋ฃ์ฒ๋ฆฌ๋ฅผ ์ํ์ ํจ์์ ๊ณ์ฐ์ผ๋ก ์ทจ๊ธํ๊ณ ์ํ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํ๋์ด๋ค. ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์์ ์ํ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๊ฐ์กฐํ๋ ๊ฒ๊ณผ๋ ๋ฌ๋ฆฌ ํจ์ํํ๋ก๊ทธ๋๋ฐ์ ํจ์์ ์์ฉ์ ๊ฐ์กฐํ๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋ฐ์ด ์์ด๋ ์ ์ธ์ผ๋ก ์ํ๋๋ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ฐ๋ฅด๊ณ ์๋ค.
-
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ํจ์์ ์ํ์ ํจ์์ ์ฐจ์ด
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ์ ํจ์ : ํ๋ก๊ทธ๋จ์ ์ํ์ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค. ์ด ๋๋ฌธ์ ์ฐธ์กฐ ํฌ๋ช ์ฑ์ด ์๊ณ ๊ฐ์ ์ฝ๋๋ผ ํด๋ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ ๋ผ ์ ์๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (์ํ์ ) ํจ์ : ์ด ํจ์์ ์ถ๋ ฅ๊ฐ์ ํจ์์ ์ ๋ ฅ๋ ์ธ์์๋ง ์์กดํ๋ฏ๋ก ์ธ์ x์ ๋ํด ํจ์ f ๋ฅผ ํธ์ถ ํ๋ฉด f(x) ๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์ด๊ฒ์ ํ๋ก๊ทธ๋จ์ ๋์์ ์์ธกํ๊ธฐ ํจ์ฌ ์ฌ์์ง๋ค. (ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ ํต์ฌ ๋๊ธฐ)
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ํจ์(pure function) ์ ์กฐํฉํ๊ณ ๊ณต์ ์ํ(shared state), ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ(mutable data) ๋ฐ ๋ถ์์ฉ(side-effects) ์ ํผํ์ฌ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ํ๋ก์ธ์ค์ด๋ค.
- ์์ ํจ์(pure function) : ๋ฌด์กฐ๊ฑด ๊ฐ์ ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋ค. ๋ํ ๋ถ์์ฉ์ด ์๋ ํจ์ ์ด๋ค.
- ํฉ์ฑ ํจ์(function composition) : ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ ์ด์์ ํจ์๋ฅผ ์กฐํฉํ๋ ๊ณผ์ ์ด๋ค. f(g(x))๋ก ์ดํดํ๋ฉด ๋๋ค. ํฉ์ฑ ํจ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ์ฌ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ฑํ๋ ์ค์ํ ๋ฐฉ๋ฒ์ด๋ค.
- ๊ณต์ ์ํ(shared state) : ๊ณต์ ๋ฒ์(shared scope) ๋ด์ ์๋ ๋ณ์, ๊ฐ์ฒด ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๊ฑฐ๋ ๋ฒ์ ๊ฐ์ ์ ๋ฌ๋๋ ๊ฐ์ฒด์ ์์ฑ์ ๋๋ค.
- ๋ถ๋ณ์ฑ(Immutability) : ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ ์์ฑํ ํ์ ์์ ํ ์ ์๋ ๊ฐ์ฒด์ด๋ค. ๋ถ๋ณ์ฑ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ด๋ค. ๋ถ๋ณ์ฑ์ ๋นผ๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ ํ๋ฆ์ด ์์ค๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ถ์์ฉ(side effects) : ๋ฐํ๊ฐ ์ด์ธ์ ํธ์ถ๋ ํจ์ ์ธ๋ถ์ ์ํฅ์ ๋ผ์น์ง๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ถ์์ฉ์ด ์๋ ์์ํ ํจ์๋ ์ค๋ ๋ ์ธก๋ฉด์์ ์์ ํ๊ณ ๋ณ๋ ฌ์ ์ธ ๊ณ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์ธ๋ถ ๋ณ์ ๋๋ ๊ฐ์ฒด ์์ฑ ์์
- ์ฝ์์์ ๋ก๊น
- ํ๋ฉด์ ์ฐ๊ธฐ ์์
- ํ์ผ์ ์ฐ๊ธฐ ์์
- ๋คํธ์ํฌ์ ์ฐ๊ธฐ ์์
- ์ธ๋ถ ํ๋ก์ธ์ค๋ฅผ ํธ๋ฆฌ๊ฑฐ
- ๋ถ์์ฉ์ ๋๋ฐํ ๋ค๋ฅธ ํจ์ ํธ์ถ
- ๊ณ ์ฐจํจ์(high order function) : ํจ์๋ฅผ ์ธ์๋ก ์ทจ๊ธํ๊ฑฐ๋, ํจ์๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋๋ ๋ ๋ค์ธ ํจ์์ด๋ค.
- ์ฝ๋ฐฑ ํจ์, ํ๋ก๋ฏธ์ค, ๋ชจ๋๋ ๋ฑ์ ์ฌ์ฉํ์ฌ ์ก์ , ํจ๊ณผ ๋๋ ๋น๋๊ธฐ ํ๋ฆ์ ์ถ์ํํ๊ฑฐ๋ ๋ถ๋ฆฌ
- ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ๋ํด ๋์ํ ์ ์๋ ์ ํธ๋ฆฌํฐ ๋ง๋ฌ
- ํฉ์ฑ ํจ์๋ ์ฌ์ฌ์ฉ์ ๋ชฉ์ ์ผ๋ก ์ปค๋ง ํจ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ธ์๋ฅผ ํจ์์ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉ
- ํจ์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๊ณ , ์ ๋ ฅ ํจ์์ ํฉ์ฑ์ ๋ฐํ
- ์์ฐจ์ , ๋น๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ : ๋ง๊ทธ๋๋ก ์์ฐจ์ ์ผ๋ก ์ฝ๋ฉํด ๋๊ฐ๋ ๊ฒ, ํ์ํ ๊ฒ์ด ์์ผ๋ฉด ์์๋ฅผ ์ถ๊ฐํด๊ฐ๋ฉด์ ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค. ์ง๊ด์ ์ด์ง๋ง goto๋ฌธ์ ํ์ฉํ๋ฏ๋ก์ ๊ท๋ชจ๊ฐ ๋งค์ฐ ์ปค์ง๊ฒ ๋๊ณ ๋์ค์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์๋์ง ๊ตฌ๋ถํ๊ธฐ ๋งค์ฐ ์ด๋ ต๋ค.
- ์ ์ฐจ์ , ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ : ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๊ฐ์ ํ๊ธฐ ์ํด ๋์จ ํจ๋ฌ๋ค์์ด๋ค. ๋ฐ๋ณต๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ํจ์(ํ๋ก์์ )๋ค์ ๋ฐ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ํ๋์ ํฐ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ ๋จ์์ ๊ธฐ๋ฅ๋ค์ผ๋ก ๋๋์ด ์ฒ๋ฆฌํ๊ณ ๋น๊ต์ ์์ ๊ท๋ชจ์ ์์ ์ ์ํํ๋ ํจ์๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ์ด๋ฌํ ์ ์ฐจ์ , ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ํจ์(๋ ผ๋ฆฌ์ ๋จ์)๋ ํํ์ด ๋์ง๋ง ์ค์ ๋ฐ์ดํฐ์ ๋ํ ๋ณ์ ๋ ์์(๋ฌผ๋ฆฌ์ ๋จ์)์ ํํ์๋ ์ด๋ ค์์ด ์๋ค. ์ด๋ฌํ ๋จ์ ์ ํ๋ก๊ทธ๋จ์ ๋นํจ์จ์ ์ผ๋ก ์ฝ๋ฉํ๊ฒ ๋๊ณ ๊ฒฐ๊ตญ์ ์ ์ง๋ณด์์ ๋๋ฒ๊น ์ ์ด๋ ค์์ ๊ฐ์ ธ์จ๋ค. ์ฆ ํฐ ๊ท๋ชจ์ ์์ ์ผ๋ก ๊ฐ ์ ๋ก ๋ ํจ์จ์ ์ธ ๋ชจ๋ํ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค ๊ทธ๋ ๊ธฐ์ ๋์จ๊ฒ ๋ฐ์ดํฐ์ ํจ์๋ฅผ ๋์์ ๊ด๋ฆฌ ํ ์ ์๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๊ด๋ฐ๊ฒ ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ ํ ๊ฐ๋ ์ ํจ์์ ์๋ฃํ์ ํจ๊ป ๋ฌถ์ด์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด๋ค. ์ฆ ๊ฐ์ฒด ๋ด๋ถ์ ์๋ฃํ(ํ๋)์ ํจ์(๋ฉ์๋) ๊ฐ ๊ฐ์ด ์กด์ฌ ํ๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด ๊ฐ์ฒด๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ์๊ธฐ๊ณ ์ค๋ณต์ฝ๋์ ์์ด ์ค์ด๋๋ ์ฅ์ ์ด ์๋ค. ๋ํ ๋ ๋ฆฝ์ฑ์ด ํ๋ฆฝ๋๋ฉด์ ์ ์ง๋ณด์์๋ ํฐ ๋์์ ์ฃผ๊ฒ ๋๋ค.
๋ํ ์ด๋ฌํ ๊ฐ์ฒด๋ค ๋ผ๋ฆฌ ์๋ก ์ํธ์์ฉํ๋ฉด์ ์ด๋ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ ๊ฒ์ด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ด๋ค.
-
์ถ์ํ(Abstraction)
์ด๋ค ์์ญ์์ ํ์๋ก ํ๋ ์์ฑ์ด๋ ํ๋์ ์ถ์ถํ๋ ์์ , ์ฆ ๋ชจ๋ธํ
- ์ฌ๋ฌผ๋ค์ ๊ณตํต๋ ํน์ง, ์ฆ ์ถ์์ ํน์ง์ ํ์ ํด ์ธ์์ ๋์์ผ๋ก ์ผ๋ ํ์
- ๊ตฌ์ฒด์ ์ธ ์ฌ๋ฌผ๋ค์ ๊ณตํต์ ์ธ ํน์ง์ ํ์ ํด์ ์ด๋ฅผ ํ๋์ ๊ฐ๋ (์งํฉ)์ผ๋ก ๋ค๋ฃจ๋ ์๋จ
๊ตฌ์ฒด์ ์ธ ๊ฐ๋ ์ ์์กด
switch(๋๋ฌผ์ ์ข ๋ฅ){ case ์ฌ์ : //somthing case ํธ๋์ด : // something case ํ ๋ผ : // someting }
์๋ก์ด ์ข ์ด ์ถ๊ฐ ๋๋ฉด ์ฝ๋๋ฅผ ์๋ก ์ถ๊ฐ ํด์ผํจ
์ถ์์ ์ธ ๊ฐ๋ ์ ์์กด
void something(Animal a){ a.something(); }
์๋ก์ด ์ข ์ด ๋์๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝ ํ ํ์๊ฐ ์๋ค. ๋ค์์ ๋คํ์ฑ์ ์ํ ์ค๋ฒ๋ผ์ด๋๋ก ์ฒ๋ฆฌ
-
์บก์ํ(Encapsulation)
๋์ ์์ง๋(Cohesion) ๊ณผ ๋ฎ์ ๊ฒฐํฉ๋(Coupling) ๋ฅผ ์ ์งํด์ผ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ์ ์ฐํ๊ฒ ๋์ฒ ํ ์ ์๋ค.
- ์์ง๋ : ๋ชจ๋(ํด๋์) ๋ด์์ ์์๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ์ด ์๋์ง, ์์ง๋๋ ์ ๋ณด ์๋์ ํตํด ๋์ผ ์ ์๋ค. ์ฆ, ๋ด๋ถ์์๋ง ์ฌ์ฉํ๋ ์ ๋ณด๋ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ๊ฒ์ด๋ค. Ex) private
- ๊ฒฐํฉ๋ : ์ด๋ ํ ๊ธฐ๋ฅ์ ์ํํ๋๋ฐ ๋ค๋ฅธ ๋ชจ๋(ํด๋์ค)์ ์ผ๋ง๋ ์์กด์ ์ธ์ง
-
์ผ๋ฐํ(Generalization) : ์์
์ด๋ฏธ ์ ์๋ ์์ํด๋์ค์ ๋ชจ๋ ์์ฑ๊ณผ ์ฐ์ฐ์ ํ์ํด๋์ค๊ฐ ๋ฌผ๋ ค ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ผ๋ฐํ๋ฅผ ์ด์ฉ ํ๋ฉด ์์ ํด๋์ค๋ก ๋ถํฐ ์์๋ฐ์ ํ์ ํด๋์ค๋ ๋ชจ๋ ์์ฑ(ํ๋)๊ณผ ์ฐ์ฐ(๋ฉ์๋)์ ๋ค์ ์ ์ํ์ง ์๊ณ ์์ ์ ๊ฒ์ผ๋ก ์ฌ์ฉ ํ ์์๋ค.
- ์์๋ฐ์ ์์ฑ๊ณผ ์ฐ์ฐ ์ธ์ ์๋ก์ด ์์ฑ๊ณผ ์ฐ์ฐ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉ ํ๋ฏ๋ก์ ์ํํธ์จ์ด ์ฌ์ฌ์ฉ์ฑ์ ์ฆ๋์ํค๋ ์ค์ํ ๊ฐ๋ ์ด๋ค.
-
๋คํ์ฑ(Polymorphism)
-
Pure Polymorphism : ์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์๋ ๊ฐ์์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ๋ฅ๋ ฅ์ด๋ค.
- ์ผ๋ฐํ์ ํจ๊ป ํ๋ก๊ทธ๋จ์ ๋ณํ์ ์ ์ฐํ๊ฒ ๋ง๋ ๋ค.
- ๋คํ์ฑ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ค ํด๋์ค๊ฐ ์ฐธ์กฐ ๋์๋์ง ๋ฌด๊ดํ๊ฒ ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ค.
-
Ad hoc polymorphism : Overridng & Overloading
-
Generics (parameter type) : T (type parameter, ์ด๋ค ํ์ ์ด ์๋ ๋ฌด๊ด)
-
-
SRP(๋จ์ผ ์ฑ ์์ ์์น : Single Responsibility Principle) : ์์ฑ๋ ํด๋์ค๋ ํ๋์ ๊ธฐ๋ฅ๋ง ๊ฐ์ง๋ฉฐ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ์๋น์ค๋ ๊ทธ ํ๋์ ์ฑ ์์ ์ํํ๋๋ฐ ์ง์ค๋์ด ์์ด์ผ ํ๋ค๋ ์์น
-
OCP(๊ฐ๋ฐฉํ์์ ์์น : Open Close Principle) : ์ํํธ์จ์ด์ ๊ตฌ์ฑ์์๋ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค๋ ์์น. ๋ณ๊ฒฝ์ ์ต์ํ ํ๊ณ ํ์ฅ์ ์ต๋ํ
-
LSP(๋ฆฌ์ค์ฝ๋ธ ์นํ์ ์์น : The Liskov Substitution Principle) : ์๋ธํ์ ์ ์ธ์ ๋ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค๋ ์์น, ์ฆ ํญ์ ํ์ ํด๋์ค๋ ์์ ํด๋์ค๋ฅผ ๋์ ํ ์ ์๋ค. ์์ํด๋์ค๊ฐ ํ ์ ์๋ ์ผ๋ค์ ๋ํด์ ํ์ํด๋์ค๋ ๋น์ฐํ ํ ์ ์๋ค๋ ์์น์ด๋ค.
-
ISP(์ธํฐํ์ด์ค ๋ถ๋ฆฌ์ ์์น : Interface Segregation Principle) : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ด ์ด์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์์์ผ ํ๋ค๋ ์์น์ด๋ค. ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น์ ํฐ ๋ฉ์ด๋ฆฌ์ ์ธํฐํ์ด์ค๋ค์ ๊ตฌ์ฒด์ ์ด๊ณ ์์ ๋จ์๋ค๋ก ๋ถ๋ฆฌ์ํด์ผ๋ก์จ ํด๋ผ์ด์ธํธ๋ค์ด ๊ผญ ํ์ํ ๋ฉ์๋๋ค๋ง ์ด์ฉํ ์ ์๊ฒ ํ๋ค. SRP ๋ ํด๋์ค์ ๋จ์ผ ์ฑ ์์ด๋ผ๋ฉด ISP๋ ์ธํฐํ์ด์ค์ ๋จ์ผ ์ฑ ์์ ๊ฐ์กฐํ๋ ๊ฒ์ด๋ค.
-
DIP(์์กด์ฑ ์ญ์ ์ ์์น : Dependency Inversion Principle) : ์์ฃผ ๋ณํํ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค ๋ณด๋ค๋ ๋ณํํ๊ธฐ ์ด๋ ค์ด ์ธํฐํ์ด์ค๋ ์์(์ถ์) ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ผ๋ ์์น
์๋์ ์๋ฃ์์ ์์ธํ ์ค๋ช ๊ณผ ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค.
- ์์ฑ์ ์ด์ธ๋ช | Agile Software Development
- ์์ฑ์ ์ ํฌ์ฌ | eXtreme Programming(XP)
์ง๋ฌธ์ ๋ํ ๋ต์ ๋งํด๋ณด๋ฉฐ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๊ฒํ ์ ์์ผ๋ฉฐ, ํด๋ฆญํ๋ฉด ๋ต๋ณ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ์์ผ์ฒ๋ผ ์ํํธ์จ์ด ๊ณตํ์์์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ ๊ฒฝํ์ด ์์ผ์ ๊ฐ์? ์ด๋ป๊ฒ ์งํํ๋์?
์ง์์์ ๊ฒฝํ์ ์คํฌ๋ผ, XP, ํญํฌ์ ๋ชจ๋ธ ๊ฐ๋ฐ ๋ฐฉ๋ฒ ๋ฑ์ ์งํ ๊ณผ์ ์ ์ค๋ช ํ๋ฉด ๋ฉ๋๋ค. ์๋๋ ๋ต์์ ํ ์์๋ก ์ฐธ์กฐํ์๋ฉด ๋๊ฒ ์ต๋๋ค.
๋งค์ผ๋งค์ผ ์งง๊ฒ๋ผ๋ ํ์๋ฅผ ์งํํ์ฌ ๊ณํํ๊ณ , ๋ฆฌํฉํ ๋ง์ ๋๋ ค์ํ์ง์๊ณ ํ๋กํ ํ์
์ ๋ง๋๋ ๊ฒ์ ๋จผ์ ์๊ฐํ๋ค.
์ฌ์ฉํ ๊ธฐ๋ฅ์ ๋ํ ์ฐ์ ์์๋ฅผ ๋์ด ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ง๋ค ์ ์ฉํ ๊ธฐ๋ฅ์ ๋ชฉ๋ก์ ๋ง๋ค์ด๋ณด์๊ณ ์ ์ฉ์ํจ ํ ํ์๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ํตํ์ฌ ์ ํ์ ํ์ตํ๊ณ ์ดํดํ์๋ค. ์ด ํ ๋ ๋ค์ ๋ฐฑ๋ก๊ทธ๋ฅผ ์ค๋นํ๋ ์คํฌ๋ผ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ ์์ผ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ด ์๊ฒจ๋๊ฒ ๋ ๋ฐฐ๊ฒฝ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ค ์ ์๋์?
์ ํต์ ์ธ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์์๋ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ฐ๋ฐ๋ณด๋ค๋ ๋ฌธ์ํ, ํ์, ์ค๊ณ ๋ฑ์ ์
๋ฌด์ ๋ ๋ง์ ์๊ฐ์ ์๋นํ๋ค.
๋ํ ์ ํต์ ์ธ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ์๋น์์ ์๊ตฌ์ฌํญ์ด ๋ณ๋๋์์ ๋ ๊ทธ์ ๋ํด ๋น ๋ฅด๊ฒ ๋์ํ์ง ๋ชปํ๋ ๋จ์ ์ด ์์๋ค.
์ ์์ผ์ ์ด๋ฌํ ์ ํต์ ์ธ ๋ฐฉ๋ฒ๋ก ๋ณด๋ค ๋ ๋์ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์ ํ๋ ๋ฐ์์ ์์๋์๋ค.
์์ฆ ๋ง์ ๊ธฐ์ ๋ค์ด ์ ์์ผ ํ๋ก์ธ์ค๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ์ ๊ทธ๋ด๊น์?
- ๋ณํ์ ๋ํด ์ ์ํ๊ณ ๋ฅ๋์ ์ธ ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ดํด๊ด๊ณ์๋ค๊ณผ ํจ๊ณผ์ ์ธ ์ํต์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ค์ด ๊ฐ๋ฐ์ ์ข ๋ ์ง์คํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ๊ธฐํ-์ค๊ณ-๊ตฌํ-ํ ์คํธ ์ด๋ ๊ฒ ๋ค ๊ฐ์ง ๋จ๊ณ๋ก ๋ถ๋ฅํ๋ค๊ณ ํ์ ๋ ๋ณธ์ธ์ด ์๊ฐํ๊ธฐ์ ๊ฐ์ฅ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ์๊ตฌ๋๋ ๋จ๊ณ๋ ์ด๋๋ผ๊ณ ์๊ฐ ํ์๋์? ๊ทธ ์ด์ ์ ํจ๊ป ๋ต๋ณ ๋ถํ๋๋ฆฝ๋๋ค.
2021๋
ํ์ฌ ์ํํธ์จ์ด ์๋ช
์ฃผ๊ธฐ ๋จ๊ณ ์ค ์๊ฐ๊ณผ ๋น์ฉ์ด ๊ฐ์ฅ ๋ง์ด ์๊ตฌ๋๋ ๋จ๊ณ๋ 'ํ
์คํธ' ๋จ๊ณ์
๋๋ค.
์ดํดํ๊ธฐ ์ฝ๊ฒ ์์๋ฅผ ๋ค์ด ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์๋์ฐจ์ ๊ดํ ์ํํธ์จ์ด๋ผ๋ฉด ์ฒ์๋ถํฐ ์์ ์ ์ฐ์ ์์๋ก ์ค๊ณํ์ฌ ๊ตฌํํจ์๋ ์ค์ ํ ์คํธ๋จ๊ณ์์ ์ผ์ด๋๋ ์์ธ์ฌํญ์ ๋ง์ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ค์ด๊ฐ๋๋ค. ์ด์์ด ์ผ์ด๋ ์์ ๋ถ๊ฐํผํ ๋ฆฌํฉํ ๋ง์ ๋ง์ ์๊ฐ๊ณผ ๋น์ฉ์ ์ฌ์ฉํ์ฌ์ผ ํฉ๋๋ค. ๋ํ ์๋์ฐจ ๋ฟ๋ง ์๋๋ผ ์ค๋งํธํฐ ๋ฐ ๊ฒ์์์๋ ํ ์คํธ๊ฐ ์๊ฐ๊ณผ ๋น์ฉ์ด ๊ฐ์ฅ ๋ง์ด ์๊ตฌ๋์์ต๋๋ค.
Validation๊ณผ Verification ์ด๋ผ๋๊ฒ ์์ต๋๋ค. ํ๊ตญ์ด๋ก ํ์ดํ๋ฉด ๋๋ค ๊ฒ์ฆ, ํ์ธ์ด๋ผ๋ ๋ป์ผ๋ก ๋๊ฐ์ด ํด์์ด ๋๋๋ฐ ์ํํธ์จ์ด๊ณตํ์ ์ ์ฅ์์ ๋ณด๋ฉด ์ด ๋ ๋จ์ด๋ ์๋ก ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ๋์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ค ์ ์๋์?
- Validation : ์ํํธ์จ์ด์ ๊ธฐ๋ฅ๊ณผ ๋ชฉ์ ์ด ์๊ตฌ์ฌํญ์ ๋ฐ์ํ๋๊ฐ, ์ผ์นํ๋๊ฐ, ๋๋ฝ๋ ์๊ตฌ์ฌํญ์ ์๋๊ฐ
- Verification : ์ํํธ์จ์ด์ ์ ๋ ฅ์ ๋ํด ์ถ๋ ฅ ๊ฐ์ด ์๊ตฌ์ฌํญ์์ ์ํ๋ ๋ฐ์ ์ผ์นํ๋๊ฐ ์ฆ, ๋ฒ๊ทธ๊ฐ ์๋๊ฐ
์๊ตฌ์ฌํญ ๋ช ์ธ์๋ ๋ฌด์์ธ๊ฐ์? ์ ํ์ํ๊ฐ์?
๊ฐ๋ฐํ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ , ๋น๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ์ ์์ ํด ๋์ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ดํด ๊ด๊ณ์์ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ค์ ์์ฌ์ํต ๋๊ตฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ ํ์ ๊ธฐ๋ฅ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ํฉ์๋ฅผ ์์ํ๊ฒ ๋์ถํด๋ผ ์ ์์ต๋๋ค.
- ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋น์ฉ๊ณผ ์ค์ผ์ค์ ์์ธกํ ์ ์๋ ์งํ๊ฐ ๋๊ธฐ๋ ํฉ๋๋ค.
- ํจ์จ์ ์ธ ๊ฐ๋ฐ ๊ณํ์ ์ธ์ธ ์ ์๊ณ ์ ํ ํ ์คํธ, ๊ฒ์ฆ์ ์ํ ๋ฒ ์ด์ค๋ฅผ ์ ๊ณตํด์ค๋๋ค.
- ์ ํ์ ์ฑ๋ฅ ํฅ์์ ์ํ ๊ธฐ๋ฐ์ด ๋๋ ์๋ฃ ์ ๋๋ค.