ํด๋น ๊ธ์ Robert C.Martin ํด๋ฆฐ ์ฝ๋ ๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ ์์ ํ์ธํด์ฃผ์ธ์.
ํด๋ฆฐ ์ฝ๋ - ์ ์์ผ ์ํํธ์จ์ด ์ฅ์ธ ์ ์ (Uncle Bob)
- ์ํค๋ถ์ค
- ์ง์์ด: Robert C.Martin (Uncle Bob)
- ์ฎ๊ธด์ด: ๋ฐ์ฌํธ, ์ดํด์
์ด๋ฒ ์ฅ์์ ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๊ฒ
์ด๋ฒ ์ฅ์์๋ ์ข์ ํจ์์ ๋ํด ์ด์ผ๊ฐ๋ฅผ ํ๊ณ ์๋ค.
ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ฅผ ์ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ง์ ํด์ผํ๋ค.
์๊ฒ ๋ง๋ค๊ณ ํ ๋ฒ์ ํ ๊ฐ์ง๋ง ํด๋ผ
- ํ ํจ์๋ 6 ~ 7 ์ค ์ ๋๋ก ํํํ ์ ์์ด์ผ ํ๋ค.
- ์ค์ฒฉ๋
if / while / for
๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค. - ๊ทธ๋์ผ ์ฝ๊ธฐ ํธํด์ง๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
- ํ ๊ฐ์ง๋ง ํด๋ผ
- ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ฅผ ์ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ง์ ํด์ผ ํ๋ค.
- ํจ์ ๋น ์ถ์ํ ์์ค์ ํ๋๋ก
- ํจ์๊ฐ ํ์คํ ํ ๊ฐ์ง๋ฅผ ํ๊ธฐ ์ํด์๋ ํจ์ ๋ด ๋ชจ๋ ๋ฌธ์ฅ์ ์ถ์ํ ์์ค์ด ๋์ผํด์ผ ํจ
render()
๋ ๋์ ์ถ์ํHttp.get(uri)
๋ ์ค๊ฐ ์ถ์ํString.valueOf("abs");
๋ ๋ฎ์ ์ถ์ํใด
- ํ ํจ์ ๋ด์์ ์ถ์ํ ์์ค์ด ์์ฌ์์ผ๋ฉด ์ฝ๋ ์ฌ๋์ด ํท๊ฐ๋ฆผ
- ํจ์๊ฐ ํ์คํ ํ ๊ฐ์ง๋ฅผ ํ๊ธฐ ์ํด์๋ ํจ์ ๋ด ๋ชจ๋ ๋ฌธ์ฅ์ ์ถ์ํ ์์ค์ด ๋์ผํด์ผ ํจ
์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํด๋ผ
- ์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ์ง์ํ๋ ๊ธฐ๋ฅ์ ๊ฐ ๋ฃจํด์ด ๊ทธ๋๋ก ์ํํ๋ค๋ฉด ๊นจ๊ฟํ ์ฝ๋๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์๋์ ๋ง
- ์ด๋ฆ์ด ์งง๊ณ ์ด๋ ค์ด ์ด๋ฆ๋ณด๋ค ์์ ์ ์ด๋ฆ์ด ๋ ์ข๋ค
- ์ด๋ฆ์ ์ ํ๋๋ผ ์๊ฐ์ ๋ค์ฌ๋ ๊ด์ฐฎ๋ค
ํจ์ ์ธ์
- ๊ด์ ์ ๋ฐ๋ผ
- ๊ฐ๋
์ฑ์ ๊ด์
- ์ด์์ ์ธ ํจ์ ์ธ์๋ 0๊ฐ ์ด๋ฉฐ 1, 2, 3 ์์ฐจ์ ์ผ๋ก ๊ฐ๋ค
- ์ฝ๋ ์ฌ๋์
void convert(String a, char[] b)
๋ณด๋คvoid convert()
๊ฐ ๋ ์ง๊ด์ ์ด๋ค
- ํ
์คํธ ์ฝ๋์ ๊ด์
- ์ธ์๊ฐ 3๊ฐ๋ผ๋ฉด ๊ทธ ๋งํผ ์กฐํฉํด์ผํ ํ ์คํธ ์ผ์ด์ค๊ฐ ๋์ด๋๋ค.
- ๊ฐ๋
์ฑ์ ๊ด์
- ์ต์ ์ ์ธ์๊ฐ 0๊ฐ, ์ฐจ์ ์ ์ธ์๊ฐ 1๊ฐ
- ํ๋๊ทธ ์ธ์๋ ํ ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ํ๋ค๊ณ ํ๋ ๊ฒ์ด๋ฏ๋ก ๋งค์ฐ ์ข์ง ์๋ค.
- true ๋ฉด ์ด๊ฒ์ ํ๊ณ false ๋ฉด ์ ๊ฒ์ ํ๊ธฐ ๋๋ฌธ
- ๋์ฌ์ ํค์๋๋ฅผ ์กฐํฉํ๋ผ
๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋ถ๋ฆฌํ๋ผ + ์ค๋ฅ ์ฝ๋๋ณด๋ค๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
- ํจ์๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ํํ๊ฑฐ๋ ๋ฌด์ธ๊ฐ์๊ฒ ๋ตํ๊ฑฐ๋! ๋ ์ค์ ํ๋๋ง ํด์ผ ํ๋ค.
- ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ช
๋ น๊ณผ ์กฐํ ๊ท์น์ ์๋ฐํ๋ค.
- ์ค๋ฅ ์ฝ๋๋ฅผ ๋ช ์ํ๊ณ ๊ฐ๋ฐํ๋ค๋ฉด ์ด๋์ ๊ฐ๋ ํด๋น ์ฝ๋๋ฅผ ์ ์ํ๊ณ ์ด๋์๋ import ํ๋ค๋ ๋ป
- ๊ทธ๋ผ ์ค๋ฅ ์ฝ๋ ์ ์๊ฐ ๋ฐ๋๋ค๋ฉด ๊ทธ๋ฅผ import ํ๋ ๋ชจ๋ ์ฝ๋์์ ์์กด์ด ์๊ฐ๊ฒ ๋๊ณ compile ์ ๊ด๋ จ์ด ์๋ค๋ ์๋ฏธ๊ฐ ๋จ -> ์ด๋ฅผ ์์กด์ฑ ์์์ด๋ผ๊ณ ํํ
- ์ฆ, Try-Catch ๋ธ๋ญ์ ์ด์ฉํ์
- ์์์ ๋งํ ์์กด์ฑ ์์์ ๋์ ์ ์๋ค.
- ์๋ก์ด ์์ธ๋
Exception
์์ ํ์๋๊ธฐ ๋๋ฌธ์ ์ ์์ธ๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ์์กด์ฑ ์์์ด ๋๊ธฐ๊ฒ ๋จ
ํจ์๋ฅผ ์ด๋ป๊ฒ ์งค ๊ฒ์ธ๊ฐ?
- ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ๋ ํ์๋ ์ฌ๋ ๊ธ์ง๊ธฐ์ ๋น์ทํ๋ค.
- ๊ธ์ง๊ธฐ ์์ : ์ด์ ์์ฑ -> ๋ง ๋ค๋ฌ๊ธฐ, ๋ฌธ๋จ ์ ๋ฆฌ -> ์ถํ
- ์ฝ๋ฉ ์์ : ์ฒ์์๋ ๊ธธ๊ณ ๋ณต์กํด๋ ์ข๋ค. ์ค์ฒฉ๋ ๋ฃจํํ ๊ด์ฐฎ๋ค. ๊ทธ๋ฐ ๋ค์ ํ ์คํธ์ผ์ด์ค๋ฅผ ์ง๊ณ ์ฝ๋๋ฅผ ๋ค๋ฌ์ผ๋ฉฐ ํจ์๋ก extract ํ์ฌ ์ค๋ณต์ ์ค์ด๊ณ ์ ๊ฑฐํ๋ค. ์ด๋ฐ ์์ค์๋ ํ ์คํธ๋ฅผ ๋ชจ๋ ํต๊ณผํ๊ฒ ํ๋ค
- ์ด๋ฌํ ์์๋ฅผ ์ต์ข
์ ์ผ๋ก๋ ์ด ์ฅ์์ ์ค๋ช
ํ ๊ท์น์ ๋ฐ๋ฅด๋๋ก ํ๋ฉด ๋๋ค.
- ์ฒ์๋ถํฐ ์๋ฒฝํ๊ฒ ์งค ํ์๊ฐ ์๋ค. ๊ทธ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค
๊ฒฐ๋ก
- master ํ๋ก๊ทธ๋๋จธ๋ ์์คํ ์ ๊ตฌํํด์ผํ๋ ํ๋ก๊ทธ๋จ์ด ์๋๋ผ ํ์ด๊ฐ ์ด์ผ๊ธฐ๋ผ๊ณ ์ฌ๊ธด๋ค.
- ์ด๋ฒ ์ฅ์์๋ ํจ์๋ฅผ ํน์ ํ ๊ท์น์ ๋ฐ๋ผ ์ ๋ง๋๋ ๊ฒ์ ์ง์คํ์์ง๋ง ์ง์ง ๋ชฉํ๋ ์์คํ ์ด๋ผ๋ ์ด์ผ๊ธฐ๋ฅผ ํ์ด๋๊ฐ๋๋ฐ ์๋ค.
๋์ ํด์๊ณผ ํ๊ณ
ํจ์ ์ธ์๋ฅผ ์ฝ๊ณ ์์ผ๋ ์ฌ๋ด์์ ํ ๋ฆฌ๋๊ฐ ํ์๋ ๋ง์ด ์๊ฐ์ด ๋ฌ๋ค.
Test Code ๋ฅผ ๋ณด๋ค๊ฐ assertEquals()
๊ณผ assertThat().isEqualTo()
๊ฐ ์์๋๋ฐ, ๋ด๊ฐ ์ ์ ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํ์๋ฅผ ์ฌ์ฉํ๋๊ฐ? ์ ๋ํ ์ง๋ฌธ์ ํ์๋ค.
๋ฆฌ๋๋ ๋์๊ฒ ๋ช ํํ ํ๊ธฐ ์ํด์ ๋ผ๊ณ ๋ต๋ณํ๋ ๊ฒ์ด ์๊ฐ์ด ๋ฌ๋ค.
๊ทธ ๋น์์๋ ์ด๋ค ๋ง์ธ์ง ์ ํํ ์ดํด๊ฐ ๊ฐ์ง ์์์ง๋ง ์ด์ ์ผ ์๊ฒ ๊ฐ๋ค.
assertEquals()
๋ ์ ํํ assertEquals(expected, actual)
์ด๋ค
assertEquals()
๋ 2๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ฐ, 2๊ฐ์ ์ธ์ ์์์ ๋ฐ๋ผ์ ํด๋น ํ
์คํธ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ผ๋ก ํ์ฌ๊ธ ํผ๋์ ๋ถ๋ฌ์ผ์ผํฌ ์ ์๋ค๊ณ ์๊ฐ๋๋ค.
๊ทธ๋์ ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ assertExpectedEqualsActual(expected, actual)
์ฒ๋ผ ๋์ฌ์ ํค์๋๋ฅผ ์กฐํฉํ๋ ๋ค์ด๋ฐ์ด ๋ ์ ์ ํ๋ค๊ณ ๋ณด๊ณ , ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ Chaining ์ ํตํด assertThat().isEqualTo()
์ ๊ฐ์ด ํํํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐ์ด ๋๋ค.
๋๊ธ