๊ฐ๋ฐ์ 99% ์ปค๋ฎค๋ํฐ์์ ์๋ค ๋จ์ด์!
์ค๋ TIL 3์ค ์์ฝ
๋ด๊ฐ ์๋ฒฝํ ์ฝ๋๋ฅผ ์งค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ๋ง๋ผ.
ํด๋ผ์ด์ธํธ, ์ฝ๋ ์ค๊ณ ๋ฑ์ ๊ณ์ฝ์ ๋ช ์ํ๋ ๊ฒ์ด ๋์์ด ๋๋ค.
๋ชจ๋ ์ฝ๋๋ค์ ํผ๋๋ฐฑ์ ํด๊ฐ๋ฉฐ ์ ์คํ๊ฒ ์ง๋ผ.
TIL (Today I Learned) ๋ ์ง
2022.03.24
์ค๋ ์ฝ์ ๋ฒ์
์ค์ฉ์ฃผ์ ํธ์ง์ฆ
์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ์ ์จ๋ณด์ธ์.
์ค์ฉ์ฃผ์ ํ๋ก๊ทธ๋๋จธ๋ ์๊ธฐ ์์ ์ญ์ง ๋ฏฟ์ง ์๋๋ค. ์ด๋ ๋๊ตฌ๋, ์ฌ์ง์ด๋ ์๊ธฐ ์์ ๋ ์๋ฒฝํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์์ ์๊ธฐ ๋๋ฌธ์ ์ค์ฉ์ฃผ์ ํ๋ก๊ทธ๋๋จธ๋ ์์ ์ ์ค์์ ๋๋นํ ๋ฐฉ์ด์ฑ ์ ๋ง๋ จํ๋ค.
DBC(Design By Contract) - ๊ณ์ฝ์ ์ํ ์ค๊ณ. ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ํํธ์จ์ด ๋ชจ๋์ ๊ถ๋ฆฌ์ ์ฑ ์์ ๋ฌธ์ํํ๊ณ ํฉ์ํ๋ ๋ฐ์ ์ด์ ์ ๋ง์ถค
์ ํ์กฐ๊ฑด(precondition) - ๋ฃจํด์ด ํธ์ถ๋๊ธฐ ์ํด ์ฐธ์ด์ด์ผ ํ๋ ๊ฒ(๋ฃจํด์ ์๊ตฌ ์ฌํญ)
ํํ ์กฐ๊ฑด(postcondition) - ๋ฃจํด์ด ์๊ธฐ๊ฐ ํ ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ๋ ๊ฒ(๋ฃจํด์ด ์๋ฃ๋์์ ๋ ์ธ์์ ์ํ)
ํด๋์ค ๋ถ๋ณ์(class invariant) - ๋ฃจํด์ ๋ด๋ถ ์ฒ๋ฆฌ ๋์ค์๋ ๋ถ๋ณ์์ด ์ฐธ์ด ์๋ ์๋ ์์ง๋ง, ๋ฃจํด์ด ๋๋๊ณ ํธ์ถ์๋ก ์ ์ด๊ถ์ด ๋ฐํ๋๋ ์์ ์๋ ๋ถ๋ณ์์ด ์ฐธ์ด ๋์ด์ผ ํจ.
์ ํจํ ์ ๋ ฅ ๋ฒ์, ๊ฒฝ๊ณ ์กฐ๊ฑด, ๋ฃจํด์ด ์ ๋ฌํ ๊ฒ, ์ฝ์ํ์ง ์์ ๊ฒ ๋ฑ์ ๋์ดํ๋ฉด ๋์์ด ๋จ.
๊ฒ์ผ๋ฆ๋ฑ ์ด ์ฝ๋ - ์์ํ๊ธฐ ์ ์ ์์ ์ด ์์ฉํ ๊ฒ์ ์๊ฒฉํ๊ฒ ํ์ธํ๊ณ , ๋ด์ด ์ค ๊ฒ์ ๋ํด์๋ ์ต์ํ๋๋ฅผ ์ฝ์ํ๋ ๊ฒ.
๋ฌธ์ ๋ฅผ ์ฐพ๊ณ ์์ธ์ ๋ฐํ๊ธฐ ์ํด์๋ ์ฌ๊ณ ๊ฐ ๋ ์ง์ ์์ ์ผ์ฐ ๋ฉ์ถ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฃฝ์ ํ๋ก๊ทธ๋จ์ด ๋ผ์น๋ ํผํด๋ ์ด์ํ ์ํ์ ํ๋ก๊ทธ๋จ์ด ๋ผ์น๋ ํผํด๋ณด๋ค ํจ์ ์ ์ ๋ฒ์ด๋ค.
"์์ ์ด ์์ํ ๊ฒ์ ์์ ์ด ๋๋ด๋ผ." - ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๋ ๋ฃจํด์ด ํด์ ์ญ์ ์ฑ ์์ ธ์ผ ํ๋ค.
"์์ ๋จ๊ณ๋ค์ ๋ฐ์๋ผ. ์ธ์ ๋." - ์ธ์ ๋ ์ ์คํ๊ฒ ์์ ๋จ๊ณ๋ค์ ๋ฐ์๋ผ. ๋ ์งํํ๊ธฐ ์ ์ ํผ๋๋ฐฑ์ ํ์ธํ๊ณ ์กฐ์ ํ๋ผ. ํผ๋๋ฐฑ์ ๋น๋๋ฅผ ์ฌ๋ฌ๋ถ์ ์ ํ ์๋๋ผ๊ณ ์๊ฐํ๋ผ.
์ค๋ ์ฝ์ ์๊ฐ์? ๋ ์ค๋ฅด๋ ์๊ฐ์ ๊ฐ๋ณ๊ฒ ์ ์ด๋ณด์ธ์
์ค๋์ ์ฑ ์ ์ฝ๋๋ฐ ์์ธ์ง ์ง์ค๋ ฅ์ด ์๊พธ ๋จ์ด์ก๋ค. ์ฒ์ ์ ํด๋ณด๋ ๊ฐ๋ ๋ค๊ณผ ๋ด๊ฐ ๋ชจ๋ฅด๋ ์ธ์ด์ ์ฝ๋๋ค์ด ๋ง์ด ๋์์ ๊ทธ๋ฐ๋ฏํ๋ค.
๊ณ์ฝ์ ์ํ ์ค๊ณ(DBC)๋ ์ ๋ง ์ฒ์ ์๊ฒ๋๋ ๊ฐ๋ ์ธ๋ฐ ๊ทธ ๋ด์ฉ์ด ์ฌ์ด ๋ฏ ํ๋ฉด์๋ ๋ชจํธํด์ 100% ์๊ฒ๋ ๊ฒ ๊ฐ์ง๋ ์๋ค. ์์ผ๋ก ์ฝ๋ ์ค๊ณ ๊ฒฝํ์ ๋ ์์ ํ์ ์ฑ ์ ๋ค์ ๋ณด๋ฉด ์ด๊ฒ ๊ทธ ๋ด์ฉ์ด๊ตฌ๋! ํ ๊ฒ ๊ฐ๋ค.
์ฝ๋๋ฅผ ์งค ๋ ํผ๋๋ฐฑ์ ๋ฒ๋ฆ์ฒ๋ผ ํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ์ด ์ฑํฐ์์๋ ํด๋ฆฐ ์ฝ๋์ ๋ํด์๋ ์ธ๊ธํ์ง ์์์ง๋ง, ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ์ผ๋ฉด์ ์ ๋ง ์ฝ๋ ๋ค์ด ์ฝ๋๋ฅผ ์ง๊ณ ์ถ๋ค.