์ด์ ์ฅ๋ค์์๋ Code, Code Block, ํจ์ ๊ตฌํ ๋ฐฉ๋ฒ, ํจ์๋ค์ ์ฐ๊ด ๋ฐฉ์์ ์์๋ณด์์ง๋ง, ์ด๋ฒ์๋ ์กฐ๊ธ๋ ๊ณ ์ฐจ์์ ์๊ธฐ๋ฅผ ํ ๊น ํ๋ค.
ํด๋์ค ์ฒด๊ณ
Java Convention์ ๋ฐ๋ฅด๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ณ์ ๋ชฉ๋ก์ด ๋์จ๋ค. static public, static private, private instance, (public instance), public function, private function ์์ผ๋ก ์ ๊ฐ๋๋ค. ์ฆ, ์ถ์ํ ๋จ๊ณ๊ฐ ์์ฐจ์ ์ผ๋ก ๋ด๋ ค๊ฐ๋ค.
์บก์ํ
๋ณ์์ ์ ํธ๋ฆฌํฐ ํจ์๋ ๊ฐ๋ฅํ ๊ณต๊ฐํ์ง ์๋ ๊ฒ์ด ์ข๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ๋ฐ๋์ ์จ๊ฒจ์ผ ํ๋ ๊ฒ์ ์๋๋ค. ํ
์คํธ๋ฅผ ์ํด protected๋ก ์ ๊ทผ์ ํ์ฉํ๊ธฐ๋ ํ๋ค. ํ์ง๋ง ๋ช
์ฌํด์ผ ํ๋ ๊ฒ์ ๋น๊ณต๊ฐ ์ํ๋ฅผ ์ ์งํ ์จ๊ฐ ๋ฐฉ๋ฒ์ ๊ฐ๊ตฌํ๊ณ , ์บก์ํ๋ฅผ ํ์ด์ฃผ๋ ๊ฒฐ์ ์ ์ตํ์ ์๋จ์ด๋ผ๋ ๊ฒ์ด๋ค.
ํด๋์ค๋ ์์์ผ ํ๋ค!
์ญ์ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์์ผ ํ๋ค. ํจ์์ ๊ฒฝ์ฐ์๋ ๋ฌผ๋ฆฌ์ ์ธ ํ์๋ก ์ด๋ฅผ ๊ฐ๋ ํ๋ค. ํด๋์ค์ ๊ฒฝ์ฐ๋ ๋งก์ ์ฑ
์์ ์ธก์ ํ๋ค.
๋๋ฌด ํฌ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ช๊ฐ์ ๋ฉ์๋๋ง ์ถ๋ฆฌ๋ฉด ๊ด์ฐฎ์๊น?
๊ฒ์ผ๋ก๋ ์์๋ณด์ฌ์ ์ข์ง๋ง, ์ธ์ธํ ๋ณด๋ฉด ์ด ํด๋์ค๋ ๋๊ฐ์ ์ฑ
์์ ๊ฐ์ง๊ณ ์๋ค. ์ฒซ์งธ, ๋ฒ์ ์ ๋ณด๋ฅผ ์ถ์ ํ๋ค. ๋์งธ, UI ์ปดํฌ๋ํธ๋ฅผ ๊ด๋ฆฌํ๋ค.
์ด๋ ๊ฒ ์ฑ
์์ด ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ ์ ์๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์๋ช
์ด๋ค. ์ด๋ฆ ์ง๊ธฐ๊ฐ ๊ณค๋ํ๋ค๋ฉด, ํด๋์ค ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ ๊ทธ๋ ๋ค. Processor
, Manager
, Super
์ ๊ฐ์ด ๋ชจํธํ ๋จ์ด๊ฐ ์๋ค๋ฉด ์ฌ๋ฌ ์ฑ
์์ ๋ ์๊ฒผ๋ค๋ ์ฆ๊ฑฐ๋ค. ๋ if
, and
, or
, but
๊ณผ ๊ฐ์ ๋จ์ด์์ด 25์ ์์ ํํ๋์ด์ผ ํ๋ค.
๋จ์ผ ์ฑ
์ ์์น
๋จ์ผ ์ฑ
์ ์์น์ ํด๋์ค๋ ๋ชจ๋์ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ๋จ ํ๋์ฌ์ผ ํ๋ค๋ ์์น์ด๋ค. ํ์ง๋ง ์์์ ๋งํ๋ฏ SuperDashBoard
์ ๊ฒฝ์ฐ ์ฑ
์์ด ๋๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ด์ ๋ ๋๊ฐ์ง๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๋ถ๋ฆฌ๋ฅผ ํตํ ์ถ์ํ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
SRP๋ ๊ฐ์ฒด์งํฅ์ค๊ณ์์ ๋์ฑ ์ค์ํ ๊ฐ๋
์ด๊ณ , ์งํค๊ธฐ ์์ํ ๊ฐ๋
์ธ๋ฐ, ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ๋ฌด์ํ๋ ๊ท์น ์ค ํ๋์ด๋ค. ์ด๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๋์๊ฐ๋ ์ํํธ์จ์ด์ ์ด์ ์ ๋ง์ถ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ํ๋์ด๊ธฐ๋ ํ์ง๋ง, ๋์๊ฐ๋ ์ํํธ์จ์ด๊ฐ ์์ฑ๋๋ฉด ๊นจ๋ํ๊ณ ์ฒด๊ณ์ ์ธ ์ํํธ์จ์ด๋ผ๋ ๋ค์ ๊ด์ฌ์ฌ๋ก ์ ํ์ ํด์ผํ๋ค.
์์คํ
์ ๊ตฌ์ฑํ๋๋ฐ ์์ด ๊ฒฐ๊ตญ ๋์๊ฐ๋ ๋ถํ์ ๊ฐ์๋ ๋น์ทํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ ๋ถํ(component)๋ค์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์๊ฐ? ์์ ์๋์ ์ฌ๋ฌ๊ฐ ๋๊ณ ์ด๋ฆํ๋ฅผ ๋ถ์ฌ์ ๊ด๋ฆฌํ๊ณ ์ถ์๊ฐ, ํฐ ์๋ํ๋์ ๋ชจ๋ ๋ฃ์ด๋ฒ๋ฆฌ๊ณ ์ถ์๊ฐ? ๋น์ฐํ ์์ ํด๋์ค ์ฌ๋ฟ์ผ๋ก ์ด๋ค์ง ์์คํ
์ด ๋ ๋ฐ๋์งํ๋ค.
์์ง๋(Cohesion)
ํด๋์ค๋ ์ธ์คํด์ค ๋ณ์ ์๊ฐ ์์์ผ ํ๋ค. ๋ชจ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ๋ฉ์๋๋ง๋ค ์ฌ์ฉํ๋ค๋ฉด ๊ฐ์ฅ ์์ง๋๊ฐ ๋์ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ ํธํ๋ ์ด์ ๋, ํด๋์ค ๋ด๋ถ์ ์๋ ๋ฉ์๋์ ๋ณ์๊ฐ ์๋ก ์์กดํ๋ฉฐ ๋
ผ๋ฆฌ์ ์ธ ๋จ์๋ก ๋ฌถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
โํด๋์ค ์ธ์คํด์ค ๋ณ์๋ ์ ๊ฒ, ํจ์๋ ์งง๊ฒโ ์ ๋ต์ ๋ฐ๋ฅด๋ค๋ณด๋ฉด ๋ช๋ช ๋ฉ์๋๋ง์ด ์ฌ์ฉํ๋ ์ธ์คํด์ค ๋ณ์๊ฐ ๋ง์์ง๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ทธ ๋ฉ์๋์ ๋ณ์๋ค์ ๋ฌถ์ด์ ๋ถ๋ฆฌํด์ผ ํ๋ค๋ ์ ํธ๋ค. ์์ง๋๊ฐ ๋๋ค๋ ๋ง์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์์ง๋๋ฅผ ์ ์งํ๋ฉด ์์ ํด๋์ค ์ฌ๋ฟ์ด ๋์จ๋ค
ํฐ ํจ์๋ฅผ ์์ ํจ์ ์ฌ๋ฟ์ผ๋ก ๋๋๊ธฐ๋ง ํด๋ ํด๋์ค ์๊ฐ ๋ง์์ง๋ค. ์๋ฅผ ๋ค์ด ๋ณด์.
- ๋ณ์๊ฐ ์์ฃผ ๋ง์ ํฐ ํจ์๊ฐ ํ๋ ์๋ค.
- ํฐ ํจ์ ์ผ๋ถ๋ฅผ ์์ ํจ์๋ก ๋นผ๋ด๊ณ ์ถ๋ค.
- ๋นผ๋ด๋ ค๋ ์ฝ๋๊ฐ ํฐ ํจ์์ ์ ์ ๋ ๋ณ์๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
- ๋ณ์๋ค์ ์ ํจ์์ ์ธ์๋ก ๋๊ฒจ์ผ ํ๋? ์๋!
- ๋ณ์๋ค์ ํด๋์ค ์ธ์คํด์ค ๋ณ์๋ก ์น๊ฒฉ ์ํค๋ฉด ์ธ์๊ฐ ํ์์๋ค. But! ์์ง๋ ฅ์ด ๋ฎ์์ง๋ค. ์ฆ, ์์ ํจ์์์๋ง ์ฌ์ฉํ๋ ๋ณ์๊ฐ ๋๋ฒ๋ฆฐ๋ค.
- ๋ช๋ช ํจ์๊ฐ ๋ช๋ช ์ธ์คํด์ค ๋ณ์๋ง ์ฌ์ฉํ๋ค๋ฉด ๋
์์ ์ธ ํด๋์ค๋ก ๋ถ๋ฆฌํด๋ ๋๋ค!
์ด๋ ๊ฒ ํฐ ํจ์๋ฅผ ์์ ํจ์๋ก ๋ถ๋ฆฌํ๋ค ๋ณด๋ฉด ์ข
์ข
์์ ํด๋์ค๋ก ์ชผ๊ฐค ๊ธฐํ๊ฐ ์๊ธด๋ค.
์ด ์ฝ๋๋ฅผ ๋๋ ๋ณด์.
์ผ๋จ ๋๋๊ฒ ๋๋ ํ๋ก๊ทธ๋จ์ด ๊ธธ์ด์ก๋ค. ์ด๋ ์์ ์ ์ธ ๋ณ์ ์ด๋ฆ ์ฌ์ฉ, ํจ์ ์ ์ธ, ํด๋์ค ์ ์ธ, ๊ณต๋ฐฑ ์ถ๊ฐ, ํ์ ๋ณ๊ฒฝ ๋ฑ์ ์ด์ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ ๋ฐ๋ก ์ฒ์๋ถํฐ ์ฌ๊ตฌํ์ ํ ๊ฒ์ด ์๋๋ค. ์์ฅ์์ ๋งํ TDD๋ฅผ ์ ์ฉํ์ฌ, ํ๋ฒ์ ํ๋์ฉ ์์ฐจ๋ก์ ๊ฑธ์ณ ๋ณ๊ฒฝํ ๊ฒฐ๊ณผ์ด๋ค.
๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ํด๋์ค
์์คํ
์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐํผํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ๋ง๋ค ์๋๋๋ก ๋์ํ์ง ์์ ์ํ์ด ์๋ค. ๊นจ๋ํ ์์คํ
์ ํด๋์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํด ๋ณ๊ฒฝ์ ๋ฐ๋ฅด๋ ์ํ์ ์ต๋ํ ๋ฎ์ถ๋ค.
ํด๋์ค ์ผ๋ถ์์๋ง ์ฌ์ฉ๋๋ ๋น๊ณต๊ฐ ๋ฉ์๋๋ ์ฝ๋ ๊ฐ์ ์ ์ ์ฌ์ ์ธ ์ฌ์ง๊ฐ ์์์ ๋ณด์ฌ์ค๋ค. ๋ถ๋ฆฌํ์.
์ ์ง์ฌ์ง ์์คํ
์ ์ถ๊ฐ์ ์์ ์ ์์ด์ ๊ฑด๋๋ฆด ์ฝ๋๊ฐ ์ต์์ด๋ค. ํ์ฅํ๊ธฐ ์ํด์๋ interface๋ฅผ ์ฑํํ์ฌ ์์
ํ๋ฉด ๋๊ณ , ์์ ์ ํน์ ํด๋์ค๋ง ์๋ณด๋ฉด ๋๋ค.
๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ
OOP์
๋ฌธ์์ concrete ํด๋์ค์ abstract ํด๋์ค๊ฐ ์๋๋ฐ, concrete ํด๋์ค์ ์์กด(์์ธํ ๊ตฌํ์ ์์กด)ํ๋ ํด๋ผ์ด์ธํธ ํด๋์ค๋ ๊ตฌํ์ด ๋ฐ๋๋ฉด ์ํ์ ๋น ์ง๋ค. ๊ทธ๋์ ์ธํฐํ์ด์ค์ abstract ํด๋์ค๋ฅผ ์ฌ์ฉํด ๊ตฌํ์ด ๋ฏธ์น๋ ์ํฅ์ ๊ฒฉ๋ฆฌ์์ผ์ผ ํ๋ค.
์์ธํ ๊ตฌํ์ ์์กดํ๋ ์ฝ๋๋ ํ
์คํธ๊ฐ ์ด๋ ต๋ค. ์ถ์ํ๋ฅผ ํตํด ํ
์คํธ๊ฐ ๊ฐ๋ฅํ ์ ๋๋ก ์์คํ
์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ฒ ๋๋ฉด ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ๋ ๋์์ง๋ค. ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค๋ ๋ง์ ์์คํ
์ ๊ฐ ์์๊ฐ ๋ค๋ฅธ ์์๋ก๋ถํฐ, ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ์ ๊ฒฉ๋ฆฌ๋์ด ์๋ค๋ ๋ป์ด๋ค.
์ธ๋ถ์์ ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ ํตํด, ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ ๋ฃ์ด์ค ์ ์๊ฒ ๋์๋ค. ์์ธ ๊ตฌํ ํด๋์ค๊ฐ ์๋ interface์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๊ตฌํ์ด ๋์ด์๋์ง ์จ๊ธด ์ํ๋ก ๋์์ด ๊ฐ๋ฅํ๋ค.
์์ฝ
- ํด๋์ค๋ ํ๋์ ์ฑ
์์ ๊ฐ์ ธ์ผ ํ๋ค.
- ์์ง๋๋ฅผ ๋๊ฒ ์ ์งํ๋ฉด ์์ ํด๋์ค ์ฌ๋ฟ์ด ๋์จ๋ค.
- ์์ ํด๋์ค ์ฌ๋ฟ์ด ํฐ ํด๋์ค ํ๋๋ณด๋ค ๋ซ๋ค.
- ๊ฒฐํฉ๋๋ฅผ ๋ฎ๊ฒ ์ ์งํ๋ฉด ๋ณ๊ฒฝ์ด ์ฝ๊ณ ๊ฒฉ๋ฆฌ๋ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
Reference