์์ธ๋ Java(๋๋ ๊ธฐํ) ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ์คํ ํ๋ฆ์ด ์ค๋จ๋๋ ๊ฒ์
๋๋ค. ์ด ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค ์๋ฐ, 0์ผ๋ก ๋๋๊ธฐ, ์ด๊ธฐํ ๋ฌธ์ , ๋ถ๋ฒ ๋ช
๋ น ์คํ ๋๋ ๊ธฐํ ์น๋ช
์ ์ธ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํ ์ ์์ต๋๋ค. Java๋ ์์น ์๋ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ง๋ง ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ Java ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ Java
์์ ์์ธ ์ฒ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋
ผ์ํ์ง ์์ ๊ฒ์
๋๋ค . ๋๋ ๋
์๊ฐ ์ด๋ฏธ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ, ํ์ธ๋ ์์ธ , ํ์ธ๋์ง ์์ ์์ธ ๋ฐ
๋ฐํ์ ์์ธ
์ ์ต์ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค . ์ฌ๊ธฐ์๋ ํผํด์ผ ํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ค์์ ๋ํด ๋
ผ์ํ๊ฒ ์ต๋๋ค.
์์ธ์ ์ดํด๊ด๊ณ์
์คํ ์ค๋ ๋๊ฐ ์ค๋จ๋ ๋๋ง๋ค ์ด์ ๋ํ ์ ๋ณด๊ฐ ํ๋ก๊ทธ๋จ ์คํ์์๊ฒ ๋ฐํ๋์ด์ผ ํฉ๋๋ค. ์ด ์ค๋ ๋๋ ํ๋ฉด, ์ผ๊ด ์์
๋๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ํธ๋ฆฌ๊ฑฐ๋ ํน์ ํ์์ ๋ฉ์์ง๋ฅผ ์ ์กํ๊ธฐ ์ํด ํ๋ฆ์์ ์ผ์ข
์ ์๋ฐ์ด ๋ฐ์ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ํ๋ฉด ๊ธฐ๋ฐ ํธ๋ฆฌ๊ฑฐ๋ ๊ธฐ์ ์ ์ธ ๋ฌธ์ ๊ฐ ์์์ ๋ถ๋๋ฝ๊ฒ ์๋ ค์ค ์ ์์ผ๋ฉฐ ๋์๊ณผ ์กฐ์ธ์ ์ํด ์ง์ํ์ ๋ฌธ์ํด์ผ ํฉ๋๋ค. ์ผ๊ด ์ฒ๋ฆฌ ๋๋ ๋
๋ฆฝํ Java ํ๋ก๊ทธ๋จ์์๋ ์ค๋ฅ ๋ณด๊ณ ์๊ฐ ์ต์ข
์ฌ์ฉ์๊ฐ ์์ ํ ์ดํดํ ์ ์๋ ์ผ์ข
์ ๋ก๊ทธ ํ์์ผ๋ก ๋ํ๋ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์
๊ฐ๋ค์ ๊ทธ๋ค์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ฉ์์ง๋ฅผ ๋ฐ์์ผ ํฉ๋๋ค. ์ฌ์ฉ์์ ๋ง์ ์์ ์๋ ๋๋ ค์ด NullPointerException์ ๋งค์ฐ ์ง์ฆ์ค๋ฝ์ต๋๋ค. ์ด๋ฌํ ์ค๋ฅ๋ ํ๋ก๊ทธ๋จ์ ์๋ชป ์ฌ์ฉํ์ฌ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง ์์ ์ด ํ์ํ ๋ฌธ์ ์ธ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๋ ๋ฒ์งธ ์ค์ํ ์ดํด๊ด๊ณ์๋ ์์ธ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์ฌ๋์
๋๋ค. ์ด ์ฌ๋์ ์์ธ๊ฐ ๋ฐ์ํ ๋ ํ๋ก๊ทธ๋จ์ ์ค์ ์คํ์ ๊ด์ฐฐํ ์ ์์ต๋๋ค. ์ด๋ ๋ ๊ฐ์ง์ ์์กดํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ฌธ์ ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ ๋ณด์ด๊ณ ๋ ๋ฒ์งธ๋ ์์ธ๊ฐ ๋ฐ์ํ ๋ ์์ฑ๋ ์ผ์ข
์ ๋ก๊ทธ์
๋๋ค. ๋ํ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ ์ฌ๋์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ฌ๋์ด ์๋๋ฏ๋ก ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์๋ ๋ถ์์ ์ํ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์์ ๋๋ฒ๊ฑฐ ๊ฐ์ ์ ์ผํ ํต์ ๋ฐฉ๋ฒ์ ๋ก๊ทธ์
๋๋ค. ๋ํ ๋๋ก๋ ๋ณด์์์ ์ด์ ๋ก ๋ก๊ทธ ๋ก๊ทธ์ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ํ๋ก๊ทธ๋จ ์คํ์ ๋ํ ์ค์ ์ธ๋ถ ์ ๋ณด๊ฐ ๋ชจ๋ ํฌํจ๋์ง ์์ ์๋ ์์ต๋๋ค. ์์ธ ์ฒ๋ฆฌ์์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ค ์ค ์ผ๋ถ๋ ๊ฝค ์ด๋ฆฌ์์ด ๋ณด์ด์ง๋ง ์ฌ๋๋ค์ด ์์ต๋๋ค. ์ด๋ฌํ ์ค๋ฅ๊ฐ ๋ฌธ์ ๋ก ์ด์ด์ง ๋๊น์ง ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์๋ ์ฌ๋.
๋น ์์ธ ๋ธ๋ก
์ด๋ ์์ธ ์ฒ๋ฆฌ์์ ๊ฐ์ฅ ์์น ์๋ ์ค๋ฅ ์ค ํ๋์
๋๋ค. ์ด ๊ฒฝ์ฐ ์์ธ๋ ๋จ์ํ ๋ฌด์๋ฉ๋๋ค. ์๋ฃจ์
์๋ ์์ธ๋ฅผ ๋จ๊ธฐ๊ธฐ ์ํ ์ฃผ์ ์ค๋ง ํฌํจ๋์ด ์์ต๋๋ค.
try{ }catch(SQLException sqe){ // do nothing }
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ข
๋ฃ๋ ๋ ๋ง์ง๋ง ๋ธ๋ก๊ณผ ๊ฐ์ ์ผ๋ถ ๋๋ฌธ ๊ฒฝ์ฐ์๋ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฌด์ํ ์ ์์ต๋๋ค.
try{ }catch(SQLException sqe){ ... ... }finally{ try{ conn.close(); }catch(Exception e){ //leave it. } }
์์ธ ๋ฉ์์ง์ ์๋ชป๋ ์ผ๋ฐํ
์ด ์ ์ ์ฃผ๊ด์ ์
๋๋ค. ์์ธ๋ฅผ ํฌ์ฐฉํ ํ ์น๊ทผํ ๋ฉ์์ง ํ์์ผ๋ก ์ต์ข
์ฌ์ฉ์์๊ฒ ๋ณด๊ณ ํ ์ ์์ต๋๋ค. ์๋ณธ ๋ฉ์์ง๊ฐ ํ๋์ ์ผ๋ฐ ๋ฉ์์ง๋ก ๋ณํ๋๋ฉด ์๋ณธ ๋ฉ์์ง์ ์ธ๋ถ ์ ๋ณด๊ฐ ์์ค๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ฉ์์ง๋ ์ต์ข
์ฌ์ฉ์์๊ฒ ์ ์ ํ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ผ ์ง์ ํ์ ๋ฌธ์ํ ๋ ์ฌ์ฉ์๋ ์ ์ ํ ๋ก๊ทธ์ ๋ก๊ทธ์ธํ์ฌ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
try{ File file = new File(""); file.getCanonicalPath(); }catch(IOException ioe){ throw new Exception("File Processing Failed",ioe); }
๋ค์ค ๊ณ์ธต ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ฐ ๊ณ์ธต์ ์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ ์๋ก์ด ์ ํ์ ์์ธ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋๋ก๋ ํน์ ์ ํ์ ์์ธ๋ฅผ ์บ์คํ
ํ๋ ๊ฒ์ด ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. - ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต -> DataAccessException ์์ฑ - ๋น์ฆ๋์ค ๊ตฌํ ๊ณ์ธต -> BusinessException ์์ฑ - ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค ๊ณ์ธต -> ApplicationServiceException ์์ฑ ๋ชจ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์ธ ๊ฒ ๊ฐ์ง ์์ต๋๊น? ์ฌ๊ธฐ์๋ ๋ ๋ค ๋์ผํ ์ ๋ณด๋ฅผ ๋ํ๋ผ ์ ์์ผ๋ฏ๋ก ApplicationServiceException๊ณผ BusinessException ์ค์์ ์ ํํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ์์ธ ๋ณํ ์ค ํ๋๋ ๋ถํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
StackTrace ํด๋์ค ์ญ์
์์ธ๋ฅผ ์๋ก์ด ํน์ ์ ํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์์ ์คํ ์ถ์ ์ด ์ฌ๋ผ์ ธ ์์ธ์ ์ค์ ์์ธ์ ์ถ์ ํ๋ ๊ฒ์ด ์
๋ชฝ์ด ๋ ์ ์์ต๋๋ค. ์๋ ์ฝ๋์์๋ ์๋ ์์ธ๋ก๋ถํฐ ์ด๋ค ์ ๋ณด๋ ๋ฐ์ง ์๊ณ ์ ์์ธ๊ฐ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณผ ์ ์์ต๋๋ค.
try{ File file = new File(""); file.getCanonicalPath(); }catch(IOException ioe){ throw new MyException("Problem in data reading."); }
์์ธ ์ฌ์ ๋ฎ์ด์ฐ๊ธฐ
๊ฐ ์์ธ ๋ฉ์์ง์๋ ์์ธ ์ด์ ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋จ, ์๋ก์ด ์์ธ๊ฐ ์์ฑ๋๋ฉด ์ด์ ์์ธ์ ๋ํ ์ ๋ณด๊ฐ ์๊ตฌ์ ์ผ๋ก ์ญ์ ๋ ์ ์์ต๋๋ค. ์ด๋ ์๋ก์ด ์์ธ๊ฐ ๋ฐ์ํ์ฌ StackTrace๊ฐ ์ ๊ฑฐ๋ ์ ์๋ ์์ ์์ ์ ์ฌํฉ๋๋ค.
ํน์ ์์ธ๋ฅผ ๊ฒ์ํ์ง ์์
๋๋๋ก ๊ฐ๋ฐ์๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๋ ์์ ํ๊ฒ ํ๋ ์ดํ๊ณ ์ถ์ดํฉ๋๋ค. ๋๋ก๋ ์ด๊ฒ์ด ์ฌ์ด ์ผ์
๋๋ค. ๊ทธ๋ฌ๋ ํน์ ์์ธ ๋์ java.lang.Exception์ ํฌ์ฐฉํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค.
try{ File file = new File(""); file.getCanonicalPath(); }catch(Exception exe){ throw new MyException("Problem in data reading."); }
๋ถํ์ํ ์บ์น ์ค ๋์ง๊ธฐ
์์ธ๋ฅผ ๋ค๋ฅธ ์ ํ์ผ๋ก ๋ณํํ๋ ค๋ ๊ฒฝ์ฐ ๋๋ ์ต์ข
์ฌ์ฉ์๋ ๋ถ์๊ฐ์๊ฒ ๋ณด๋ด๋ ์์ธ ๋ฉ์์ง์ ์ผ๋ถ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒฝ์ฐ ์์ธ๋ฅผ ํฌ์ฐฉํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด, ์ก๋ ๋์ ๋ฉ์๋ ์๊ทธ๋์ฒ(throw ์ฌ์ฉ)์์ ๋ ๋ฉ๋ฆฌ ๋ฒ๋ฆฌ์ญ์์ค.
๋ฐํ์ ์์ธ ์ก๊ธฐ
RuntimeException์ ํฌ์ฐฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋์ ํน์ ์์ธ๋ฅผ ํฌ์ฐฉํ์ฌ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ์ธ๋์ง ์์ ์์ธ ์ฐพ๊ธฐ
ํ์ธ๋์ง ์์ ์์ธ๋ฅผ ํฌ์ฐฉํ ์ง ์ฌ๋ถ๋ ๋
ผ๋์ ์ฌ์ง๊ฐ ์๋ ์ฃผ์ ์
๋๋ค. NullPointerException ๋ฐ ArrayIndexOutOfBound๋ ํ์ธ๋์ง ์์ ์์ธ์ ๊ฐ์ฅ ์ข์ ์์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์ธ๋ฅผ ํฌ์ฐฉํ๋ ๋์ ์ด๋ฌํ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด NullPointerException์ ๋ฐฉ์งํ๊ณ , ๋ชจ๋ ๋ณ์๊ฐ ์ด๊ธฐํ๋์๋์ง ํ์ธํ๊ณ , ArrayIndexOutOfBound ์์ธ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ฌ๋ฐ๋ฅธ ๊ธธ์ด์ ๋ฐฐ์ด์ ์ ์ํ๋ ๋ฑ์ ์์
์ ์ํํฉ๋๋ค.
์์ธ ๋ก๊น
๊ณผ ๊ด๋ จ๋ ๋ฌธ์
์ก์ง๋ ๋ ๋ฒ์งธ ๊ด์ฌ ์๋ ์ฌ๋, ์ฆ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ ์ฌ๋์๊ฒ ๋์์ด ๋ ๊ฒ์
๋๋ค. ๋๋ก๋ ๊ฐ๋ฐ์๊ฐ ๋ก๊ทธ ํ์ผ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์์ค์์ ๋ก๊ทธ๊ฐ ์์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ก๊ทธ์๋ ์์ธ๊ฐ ๋ฐ์ํ ์์ค์ ์์ธ๊ฐ ๊ธฐ๋ก๋์ด์ผ ํฉ๋๋ค. ํ๋ก๊ทธ๋จ ์คํ์ ์ค์งํ๊ฑฐ๋ ๊ณ์ํ๋ผ๋ ์ ์๊ณผ ํจ๊ป ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๊ณ ๋ก๊ทธ์ ์์ธ๋ฅผ ์๋ฌด์ ์ผ๋ก ๊ธฐ๋กํ๋ ๊ฒ์ด ์ต์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํ๋ฆ ์ ์ด ์์ธ
์์ธ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ํ๋ฆ์ ๋ฐฉํดํ๋ ๊ฒ์
๋๋ค. ์ฆ, ์ด ํ๋ฆ์ ์ค๋จํ๊ณ ์ต์ข
์ฌ์ฉ์์๊ฒ ์ด์ ๋ํด ์๋ ค์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๋์ฒด ์ค๋ ๋์ธ ๋ฉ์๋ ํธ์ถ์ ์ถ๊ฐํ๋ฉด ์์ฒญ๋ ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
try{ myObject.getValue(); }catch(NullPointerException npe){ alternateMethod(); }
java.lang.Exception์ ์ ๋น์ฟผํฐ์ค ์ฌ์ฉ
๋ชจ๋ ์์ธ์ ๋ํด ๋ชจ๋ ๊ณณ์์ java.lang.Exception์ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ๋์ , ์ ํ๋ฆฌ์ผ์ด์
๋ณ ์์ธ๋ ๊ฐ์ฅ ์ ์ ํ ํ์ค Java ์์ธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
์๋ณธ ๊ธฐ์ฌ: ์์ธ ์ฒ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ์ค์ ๋ฒ์ญ ๋ฐ ์์ฑ: Ve4niY
GO TO FULL VERSION