[๊ฐ๋ฐ์ ์ฑ ์ฝ๊ธฐ] ํด๋ฆฐ ์ํคํ ์ฒ-์ํํธ์จ์ด ๊ตฌ์กฐ์ ์ค๊ณ์ ์์น (5์ฅ 6์ฅ - ๊ฐ์ฒด ์งํฅ, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ)
ํด๋น ๊ธ์ Robert C.Martin ํด๋ฆฐ ์ํคํ ์ฒ ๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํด๋ฆฐ ์ํคํ ์ฒ - ์ํํธ์จ์ด ๊ตฌ์กฐ์ ์ค๊ณ์ ์์น ์์ ํ์ธํด์ฃผ์ธ์.
ํด๋ฆฐ ์ํคํ ์ฒ - ์ํํธ์จ์ด ๊ตฌ์กฐ์ ์ค๊ณ์ ์์น (Robert C. Martin)
- ์ํค๋ถ์ค
- ์ง์์ด: Robert C.Martin (Uncle Bob)
- ์ฎ๊ธด์ด: ์ก์ค์ด
์ด๋ฒ ์ฅ์์ ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๊ฒ
๊ฐ์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ข์ ์ํคํ
์ฒ๋ฅผ ๋ง๋๋ ๊ฒ
- ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น์ ์ ์ดํดํ๊ณ ์์ฉํ๋ ๋ฐ์์ ์ถ๋ฐํ๋ค.
- ๊ฐ์ฒด ์งํฅ์ ์ค๋ช
ํ๊ธฐ ์ํด์ 3๊ฐ์ง๋ฅผ ์ ์ดํดํด์ผ ํจ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
- ์บก์ํ, Encapsulation
- ๊ตฌ๋ถ์ ๋ฐ์ ๋ฐ์ดํฐ๋ ์๋๋๊ณ ์ผ๋ถ ํจ์๋ง ๋ ธ์ถ์ํด์ผ๋ก ๋ฐ์ดํฐ์ ํจ์๋ฅผ ์์ง๋ ฅ ์๊ฒ ๋ง๋ฆ
- ๊ผญ OO ์ธ์ด์๋ง ๊ตญํ๋ ๊ฐ๋ ์ ์๋
- ์์, Inheritance
- ์ด๋ค ๋ณ์์ ํจ์๋ฅผ ํ๋์ ์ ํจ ๋ฒ์๋ก ๋ฌถ์ด์ ์ฌ์ ์ ํ๋ ์ผ
- ๋คํ์ฑ, Polymorphism
- ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ์งํฑํ๋ ํ
- ์ฅ์น ๋ ๋ฆฝ์ฑ, ์ฆ ๊ตฌํ์ ๋ํ ์ข ๋จ์ ์์
- ์์กด์ฑ์ ๋ํ ์ ์ด์ ์ญ์
- ๋ฐฐํฌ ๋ ๋ฆฝ์ฑ๊ณผ ๊ฐ๋ฐ ๋ ๋ฆฝ์ฑ์ ๊ฐ๋๋ค
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ๋ถ๋ณ์ฑ
- Race Condition, Deadlock, Concurrent Update ๋ฌธ์ ๋ ๋ชจ๋ ๊ฐ๋ณ ๋ณ์๋ก ์ธํด์ ๋ฐ์๋จ
- ๊ฐ๋ณ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์์
- ๊ณผ์ฐ ๊ฐ๋ณ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์์ ์ ์์๊น?
- ๊ฐ๋ฅํ๋ค.
- ๋จ, ์ ์ฅ ๊ณต๊ฐ์ด ๋ฌดํํ๊ณ ํ๋ก์ธ์์ ์๋๊ฐ ๋ฌดํํ ๋น ๋ฅด๋ค๋ฉด ๊ฐ๋ฅํ๋ค.
- ํ์ค์ ์ผ๋ก ๋ถ๋ณ์ฑ์ ๋ง์กฑํ๋ ค๋ฉด
- ๋ถ๋ณ์ฑ์ 100% ๋ง์กฑํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ์ด๋ ต๋ค.
- ๊ฒฐ๊ตญ ํํ์ ํด์ผํ๋ค.
- ๊ฐ๋ณ ์ปดํฌ๋ํธ์ ๋ถ๋ณ ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ ๊ฒ
- ์ด๋ฒคํธ ์์ฑ
- Event ์์ฒด๋ฅผ ๋ชจ๋ ์ ์ฅ์์ผ๋ฒ๋ ค์ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ด ์๋๋ก ํ๋ ๊ฒ
- ์ด๋ฒคํธ๋ฅผ ์ํ๊ฐ ์๋ ํธ๋์ญ์ ์ ์ ์ฅํ๋ ๊ฒ
- ๊ฒฐ๊ตญ Application ์ ์ต์ข ์ํ๋ CR ๋ง ์กด์ฌ
- git ๊ณผ ๊ฐ์ VCS ๊ฐ ์ด์ ๊ฐ์ ๋ฐฉ์์
๋์ ํด์๊ณผ ํ๊ณ
์ด๋ฒ ์ฅ์์๋ ๊ฐ์ฒด ์งํฅ์ด ๋ฌด์์ธ์ง ์ ์ํ๊ธฐ ์ ์ ๊ฐ์ฒด ์งํฅ์ด ์ด๋ค ๊ฒ๋ค์ ๊ฐ์ง๊ณ ์๋์ง์ ๋ํด์ ์ด์ผ๊ธฐํ๋ค.
๋๋ ๊ฐ์ฒด์งํฅ์ ๋ฐฐ์ธ ๋, ์ด๋ค ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ ์ธ์ฐ๋ฉด ๋์ด๋ผ๊ณ ํ๋ค.
์บก! ์์ถ๋ค!
(์บก์ํ, ์์, ์ถ์ํ, ๋คํ์ฑ)
๊ฒฐ๊ตญ ์๋ฌด ์๋ฏธ ์์ด ๊ทธ๋ฅ ์บก์์ถ๋ค
๋ผ๋ ๋ฌธ์๋ง ๋ฌ๋ฌ ์ธ์์ ์ํ์ ๋ดค๋ ๊ธฐ์ต์ด ์๋ค.
์ฌ์ค ๊ฐ์ฒด์งํฅ์ด๋ผ๋ ๊ฒ์ ์ด๋ ๋ฏ ๋จ์ํ๊ฒ ํ ๋จ์ด, ๋ฌธ์ฅ, ๋ช๋ง๋์ ๊ธด ๋ฌธ์ฅ์ผ๋ก ์ ์ํ ์ ์๋ค๊ณ ๋ฏฟ๋๋ค.
๊ฐ์ฒด์งํฅ์ด๋ผ๋ ๊ฒ์ ์งํฅ์ด๋ผ๋ ๋ง ์์ฒด๊ฐ ๊ฐ์ง ํ์ผ๋ก ์ธํด ๋๋ฌด๋๋ ์ถ์์ ์ด๊ณ ๋ฐ์๋ค์ด๊ธฐ ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ ๋๋ ์ด๋ป๊ฒ ๊ฐ์ฒด์งํฅ์ ์ ์ํ๋๊ฐ?
๋ด๊ฐ ์ ์ํ ๊ฐ์ฒด์งํฅ์ด๋ ๊ฐ์ฒด ์ค์ค๋ก๊ฐ ์์จ์ฑ์ ๊ฐ๊ณ ์ค์ค๋ก ํ๋ ฅํ์ฌ ํ์ค ์ธ๊ณ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์๊ฐ๋ ๊ฒ
์ด๋ผ๊ณ ์ ์ํ๋ค.
์ฌ์ค ์ด๋ง์ ๋ ๋งค์ฐ ์ถ์์ ์ด๋ค.
์ด๋ฐ ์ถ์์ ์ธ ๊ฐ์ฒด์งํฅ์๋ 3๊ฐ์ง์ ํน์ง์ด ์กด์ฌํ๋ค๊ณ ์ฑ ์์๋ ์ธ๊ธํ๋ค.
- ์บก์ํ
- ์์
- ๋คํ์ฑ
์ด ์ค์์ ๋๋ ๋คํ์ฑ์ด์ผ ๋ง๋ก ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฒด์งํฅ์ ์ดํ ๋ก ์ฌ๋ํ๋์ง ์ ์ ์๋ ๋๋ชฉ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ฐ๋ฆฌ๋ ํผ์์ ์ผ์ ํ์ง ์๋๋ค. ์ฌ๋ฌ ์ฌ๋๊ณผ ๋๋ฃ๋ค๊ณผ ํ๋ ฅ์ ํตํด์ ํ๋์ ์์คํ ์ ๋ง๋ค์ด ๋๊ฐ๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ํ๋์ ๊ณตํต์ ๋ชฉํ (์ํํธ์จ์ด์ ๊ฐ๋ฐ๊ณผ ์์ฅ์ ์ถ์)๋ฅผ ์ด๋ฃจ๊ธฐ ์ํด์ ์ ์ ํ๊ฒ ์ ๋ฌด๋ฅผ ๋๋ ๊ฐ์ ธ๊ฐ์ผ ํ๋ค.
์ด ๋ ๊ฐ์ฒด์งํฅ์ด ๊ฐ์ง ํ์ ์ด์ฉํ ์ ์๋ค.
๋ฐ๋ก ๋คํ์ฑ์ด๋ค.
์ฑ ์์๋ ๋คํ์ฑ์ ๋ฐฐํฌ ๋ ๋ฆฝ์ฑ, ๊ฐ๋ฐ ๋ ๋ฆฝ์ฑ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํ๋๋ฐ, ์ด๋ฌํ ๋ ๋ฝ์ฑ์ด์ผ ๋ง๋ก ์ ๊ฐ์ฒด์งํฅ์ด ์ดํ ๋ก ์ค๋ ์ด์๋จ์๋์ง ์
์ ์๋ ๋๋ชฉ์ด๋ผ ์๊ฐํ๋ค.
๋จ์ง ๋ ๋ฆฝ์ฑ์ด๋ผ๋๊ฒ ํ์ ์ ์ ํ๊ธฐ ์ํด์? ๋ผ๊ณ ๋ฌป๋ ์ฌ๋์ด ์์ ์ ์๋ค.
ํ์ง๋ง ๋๋ ๊ทธ์ ๋ํ ๋๋ต์ ํ์น์ ๊ณ ๋ฏผ๋ ์์ด ๊ทธ๋ ๋ค. ๋ผ๊ณ ํ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ํด๋ฆฐ ์ฝ๋, ํด๋ฆฐ ์ํคํ ์ฒ, OOP ๋ฅผ ํ๋ ๋ชฉ์ ์ ๋ฌด์์ธ๊ฐ? ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐ์ ํ๋ ๋ชฉ์ ์ ๋ฌด์์ธ๊ฐ? ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ์ผ์ ์ ํ๊ธฐ ์ํด์๊ฐ ์๋๊ฐ?