DAY 13
๐ย ์ค๋ ์ฝ์ ๋ฒ์ : 7์ฅ, ์ค๋ฅ ์ฒ๋ฆฌ ~
<aside>
๐ ์ฑ
์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ์ ์จ๋ณด์ธ์.
</aside>
- ์ค๋ฅ ์ฝ๋๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ.
- ํธ์ถ ์์ ์ ์์ธ ํธ๋ค๋ง์ด ํจ์จ์ ์ผ๋ก ๊ฐ๋ฅํ๊ฑฐ๋ ์์ธ๋ฅผ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋นํ์ธ ์์ธ ์ฌ์ฉ(Java ๋ง)
- ์์ธ์ ์๋ฏธ ์ ๊ณตํ๋ผ(์ฐ์ฐ ์ด๋ฆ+์คํจ ์ ํ+์คํ)
- โ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ์ก์๋ผ์งโ๋ฅผ ๊ด์ ์ผ๋ก, ํธ์ถ์๋ฅผ ๊ณ ๋ คํ ์์ธ ํด๋์ค๋ฅผ ์ ์ํ๋ผ
โ wrapping ์ ํตํ ๊ณตํต ์์ธ ์ ํ์ ๋ฐํํ์ฌ ๋ฐ๋ณต ์์
์ ์์ ๊ณ ๋จ์ํ ํ๋ผ.
โ ๋จ์ํ ์ผ์ด์ค๋ณ ๋ฐ๋ณต์ ์ธ ๋ก๊น
์ด ์๋๋ผ, ํจ์จ์ ์ผ๋ก ์์กด์ฑ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํ๋ผ.
<aside>
๐ค ์ค๋ ์ฝ์ ์๊ฐ์? ๋ ์ค๋ฅด๋ ์๊ฐ์ ๊ฐ๋ณ๊ฒ ์ ์ด๋ณด์ธ์
</aside>
- ๊ทผ๋์ Exception Handling์ IDE ๊ฐ์ด๋ ๋๋ก ๋์ถฉ ์ฒ๋ฆฌํด์จ ๊ฒ ๊ฐ์ ๋ฐ์ฑํ๊ฒ ๋์๋ค. ์์ผ๋ก ๋ณด๋ค ๋ช
ํํ๊ฒ ์์ธ ํ๋์ ์ธ์ ํธ๋ค๋ง์ ํด์ผ๊ฒ ๋ค.
<aside>
๐ ๊ถ๊ธํ ๋ด์ฉ์ด ์๊ฑฐ๋, ์ ์ดํด๋์ง ์๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ด๋ณด์ธ์.(๋๋ ์ค์ค๋ก์ ๊ณผ์ )
</aside>
- ํ์ธ ์์ธ vs ๋นํ์ธ ์์ธ
*๊ฒฐ๋ก : ํธ์ถ ์์ ์ ์์ธ ํธ๋ค๋ง์ด ํจ์จ์ ์ผ๋ก ๊ฐ๋ฅํ๊ฑฐ๋ ์์ธ๋ฅผ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋นํ์ธ ์์ธ ์ฌ์ฉ(๋ฌผ๋ก Java๋ง ํด๋น)
โ ๋ณธ๋ฌธ์์๋ ํ์ธ ์์ธ๊ฐ ํธ์ถ๋ ์์ ๋งค์๋๋ง๋ค ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ผ๊ธฐ(OCP ์๋ฐ)์ํฌ ์ ์์ผ๋ฏ๋ก, ํ์ธ ์์ธ๋ฅผ ํผํ๊ณ ๋นํ์ธ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ์ธ๊ธ
โ ์ฑ
์ ๋์จ C#, C++ ๋ฟ๋ง ์๋๋ผ, Java ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง Kotlin์์๋ ํ์ธ ์์ธ๋ฅผ ์์ฐ (๋ค์๊ฐ ํ์ธ ์์ธ๋ ์๋ชป๋ ์ฌ์ฉ์ผ๋ก ๋ถํ์ํ ์์ ๋ญ๋น๋ฅผ ์ผ๊ธฐ์ํฌ ์ ์๋ค๊ณ ํ๋จํ๋ ๋ฏ)
โ ํ์ง๋ง API , ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ ์์ธ ํธ๋ค๋ง์ ๊ฐ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ํ์ธ ์์ธ๊ฐ ์ ์ฉ
โ Effective Java(Joshua Bloch) ์์๋ ํธ์ถ์๊ฐ ํฉ๋ฆฌ์ ์ผ๋ก ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ์ธ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ํจ (Use checked exceptions for conditions from which the caller can reasonably be expected to recover)
โ ํ์ธ ์์ธ(Checked Exception)์ ๋จ์ ๊ณผ Unchecked Exception์ผ๋ก์ ํธ๋ค๋ง ๋ฐฉ๋ฒ(wrapping)์ ๋ํ ์ ๋ฆฌ ๋ธ๋ก๊ทธ: https://phauer.com/2015/checked-exceptions-are-evil/
์๊ฐ 3์ค ์์ฝ
- ์๋ฏธ์๋ ์์ธ๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํ๋ผ.
- (Java์์) ๊ฐ๊ธ์ ๋นํ์ธ ์์ธ๋ฅผ ์ฌ์ฉ(Wrapping)ํ๋ผ. (Java๋ง ์ธํจ์ดโฆ)
- ์์ธ๋ ๋จ์ ๊ธฐ๋ก์ด ์๋๋ผ, ์์กด์ฑ์ ์ค์ด๋ฉด์ โ๋ฐ์ํ ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ์ก์๋ผ์งโ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.