
[Java]์์ธ์ฒ๋ฆฌ (1) - ํ๋ก๊ทธ๋จ ์ค๋ฅ, ์์ธ ํด๋์ค์ ๊ณ์ธต๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ ์ค๋ฅ ์ปดํ์ผ ์๋ฌ(compile-time error) : ์ปดํ์ผ ํ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ฐํ์ ์๋ฌ(runtime error) : ์คํ ํ ๋ ๋ฐ์ํ๋ ์๋ฌ ๋ ผ๋ฆฌ์ ์๋ฌ(logical error) : ์์ฑ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ์ปดํ์ผ ์๋ฌ๋ ja
pids.tistory.com

try-catch๋ฌธ

try-catch๋ฌธ์ ๋ฌธ๋ฒ์ ์ ์ฝ๋์ ๊ฐ๋ค.
try๊ตฌ๋ฌธ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , catch๊ตฌ๋ฌธ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์๋ฅผ ๋ค์ด, try๊ตฌ๋ฌธ์์ ์ผํ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด, catch1์์ ๋์ด ๋ถ์กฑํ ๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌ,
catch2์์ ๋ฌผ๊ฑด์ด ๋ถ์กฑํ ๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌ, catch3์์ ๊ฐ๊ฒ๊ฐ ๋ฌธ ๋ซ์์ ๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ด์ฉ์ ์์ฑํ๋ฉด ๋๋ค.
์ฃผ์ํ ์ ์ผ๋ก๋ if๋ฌธ๊ณผ ๋ฌ๋ฆฌ, try๋ธ๋ญ์ด๋ catch๋ธ๋ญ ๋ด์ ํฌํจ๋ ๋ฌธ์ฅ์ด ํ๋๋ฟ์ด์ด๋ ๊ดํธ{}๋ฅผ ์๋ตํ ์ ์๋ค.


์ ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด catch๋ฌธ์ System.out.println(4).๋ ์ถ๋ ฅ์ด ๋์ง ์๋๋ค.
try๋ฌธ์์ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.

์ ์์ ์ฝ๋์์ 0/0์์ ์์ธ๊ฐ ๋ฐ์ํ๋ค. 0์ผ๋ก ๋๋๊ธฐ๋ ๊ธ์ง๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ฒ ArithmeticException์ด ๋ฐ์ํ๊ณ catch๋ฌธ์ผ๋ก ์ด๋ํด์ 3์ ์ถ๋ ฅํ๋ค.
์ด๋ ๊ฒ try๋ฌธ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด, ์์ธ๊ฐ ๋ฐ์ํ๋ ์๊ฐ ๋จ์ try๋ฌธ์ ํ์ธํ์ง ์๊ณ , catch๋ฌธ์ผ๋ก ๋ฐ๋ก ์ด๋ํ๋ค.
printStackTrace()์ getMessage()
printStackTrace() : ์์ธ๋ฐ์ ๋น์์ ํธ์ถ ์คํ(Call Stack)์ ์์๋ ๋ฉ์๋์ ์ ๋ณด์
์์ธ ๋ฉ์์ง๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
getMessage() : ๋ฐ์ํ ์์ธํด๋์ค์ ์ธ์คํด์ค์ ์ ์ฅ๋ ๋ฉ์์ง๋ฅผ ์ป์ ์ ์๋ค.
๋จผ์ ์ ๋ฉ์๋๋ฅผ ์๊ธฐ์ํด์๋ ์์ธ ๋ฐ์๋ ์์ ์ ๋ํด์ ์์์ผ ํ๋ค.

์ด๋ ๊ฒ try๋ฌธ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ ์๊ฐ ArithmeticException ๊ฐ์ฒด๊ฐ ์์ฑ์ด ๋๋ค.
๊ทธ ์์ธ ๊ฐ์ฒด ์์๋ ์์ธ์ ๋ํ ์ ๋ณด์ ์ฌ๋ฌ ๊ฐ์ง ๋ฉ์๋๊ฐ ์๋๋ฐ,
๊ทธ ๋ฉ์๋ ์ค ์ผ๋ถ๊ฐ printStackTrace(), getMessage()์ด๋ค.
์ด๋ฌํ ๋ฉ์๋๋ค๋ก ์์ธ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.


try๋ฌธ์์ ArithmeticException์ด ๋ฐ์ํ๊ณ , catch๋ฌธ์์ ae์ฐธ์กฐ ๋ณ์๋ก printStackTrace() ์ถ๋ ฅํ๋ฉด
์ค๋ฅ์ ๊ดํ ์์ธํ ์ ๋ณด๊ฐ ์ถ๋ ฅ์ด ๋๊ณ , getMessage๋ก ๊ฐ๋จํ ์์ธ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์๋ค.
๋ฉํฐ catch๋ธ๋ญ
๋ฉํฐ catch๋ธ๋ญ์ ๋ด์ฉ์ด ๊ฐ์ catch๋ธ๋ญ์ ํ๋๋ก ํฉ์น ๊ฒ์ด๋ค.(JDK1.7๋ถํฐ)

์ด๋ ๊ฒ ๊ฐ์ ๋ด์ฉ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฉํฐ catch๋ธ๋ญ์ ์ฌ์ฉํด ์ค๋ณต์ ์ ๊ฑฐํ๋ ์ฝ๋์ด๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฉํฐ catch๋ธ๋ญ์๋ ์ฃผ์ํ ์ ์ด ๋ ๊ฐ์ง ์๋ค.

์ฒซ ๋ฒ์งธ๋ก๋ ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค๋ ๋ฉํฐ catch๋ธ๋ญ์ด ์๋๋ค. ์์งํ ์ฌ์ฉํ ์ด์ ๊ฐ ์๋ค.
๋ถ๋ชจ์ ์์ธ ํด๋์ค๋ง ๋ฃ์ด๋๋ ์์ ์์ธ ํด๋์ค๋ ์์์ ๋ถ๋ชจ catch๋ธ๋ญ์ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.

๋ ๋ฒ์งธ๋ก๋ ๋ฉํฐ catch๋ธ๋ญ์ ์ฌ์ฉ๋๋ ์์ธ ํด๋์ค๋ค์ ๊ณตํต๋๋ ๋ฉ์๋๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ง์ฝ ExceptionA ๋ธ๋ญ์๋ง methodA๊ฐ ์๊ณ ExceptionB์๋ methodA๊ฐ ์๋ค๊ณ ๊ฐ์ ์ ํ๋ฉด,
๋ฉํฐ catch๋ธ๋ญ์ ๋ ์ค์ ์ด๋ ์์ธ๊ฐ ์๋ ์ํํ ์ ์์ด์ผ ํ๋ค.
ํ์ง๋ง methodA๋ ExceptionA์๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ ๊ฒ ์ฌ์ฉ๋๋ ์์ธ ํด๋์ค๋ค์ ๊ณตํต๋๋ ๋ฉค๋ฒ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
์ฌ์ฉ์ ํ๊ธฐ ์ํด์๋ if๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค.
if๋ฌธ์ผ๋ก ์ฐธ์กฐ ๋ณ์ e๊ฐ ExceptionA๋ก ํ ๋ณํ์ด ๊ฐ๋ฅํ์ง instanceof์ฐ์ฐ์๋ก ํ์ธ์ ํ๊ณ ,
๋๋ค๋ฉด ํ ๋ณํ์ ํด์ methodA๋ฅผ ์คํํ๊ณ , else๋ธ๋ญ์ ์ฌ์ฉํด ExceptionB์ ์ฝ๋๋ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ๋ ๋๋ฌผ๊ธด ํ์ง๋ง ์ฐธ๊ณ ๋ฅผ ํด๋์.