6.1 ์์ธ์ ๊ธฐ๋ณธ
6.1.1 ์์ธ์ ์ธ ๊ฐ์ง ์ข ๋ฅ
1) ๊ฒ์ฌ ์์ธ (Exception)
์ฃผ๋ก ํ๋ก๊ทธ๋จ ์์ฑ ์์ ์์ํ ์ ์๋ ๋น์ ์ ์ํ๋ฅผ ํต์งํ๊ธฐ ์ํด ์ฌ์ฉ.
์๋ฅผ ๋ค์ด ํ์ ์ ์ถ๋ ฅ์ด ์คํจํ ๊ฒฝ์ฐ IOException์ด ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ์์ํ๊ณ ๋ฏธ๋ฆฌ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง catchํ๊ฑฐ๋ throwํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
ํ์ง๋ง ๋ชจ๋ ์์ธ๋ฅผ ํฌ์ฐฉํ๊ฒ ๋๋ค๋ฉด ์ ์ํด์ผํ๋ ์์ธ ์ํฉ์ด ๋ง์์ง๊ณ ๋ณต์กํด์ง๋ฏ๋ก '์คํ ์ ์์ธ'๋ก ์ฒ๋ฆฌํ๋๋ก ๋ง๋ค์๋ค.
2) ์คํ ์ ์์ธ (RuntimeException)
์ฃผ๋ก ํ๋ก๊ทธ๋จ ์์ฑ ์์ ์์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ํต์งํ๊ธฐ ์ํด ์ฌ์ฉ.
'๊ฒ์ฌ ์์ธ'์๋ ๋ฌ๋ฆฌ ํ๋ก๊ทธ๋จ์์ ํฌ์ฐฉํ์ง ์์๋ ๋ฐ๋ก '์ปดํ์ผ ์ค๋ฅ'๋ ๋ฐ์ํ์ง ์๋๋ค.
์๋ฅผ ๋ค์ด '๋ฌธ์'๋ฅผ '์ซ์'๋ก ๋ณํํ๋ Integer.parseInt์ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์๊ฐ ๋ค์ด์จ๋คํด๋ ์ปดํ์ผ ์ค๋ฅ๋ ๋ฐ์ํ์ง ์๋๋ค.
์ด๋ `์คํ ์ ์ค๋ฅ`๋ก ๊ตฌ๋ถํ์ฌ ์คํ ์ค์ ํฌ์ฐฉํ ์ ์๋ ์์ธ์ ํด๋นํ๋ค.
ex) java.lang.NumberFormatException, java.lang.ArithmeticException
3) ์ค๋ฅ (Error)
์์ธ์๋ ๋ฌ๋ฆฌ ์์คํ ์ ๋์์ ๊ณ์ํ ์ ์๋ "์น๋ช ์ ์ค๋ฅ"๋ฅผ ๋ํ๋ธ๋ค. ๊ฑฐ์ ๋๋ถ๋ถ์ "์น๋ช ์ ์ค๋ฅ"๋ ํ๋ก๊ทธ๋จ์์ ํฌ์ฐฉํ๋ ๊ฒ์ด ์๋๋ค.. ๋์ค์ ์ค๋ช ..
6.1.2 ์์ธ๋ฅผ ๋ํ๋ด๋ ์ธ ๊ฐ์ง ํด๋์ค
1) java.lang.Exception ํด๋์ค
๊ฒ์ฌ ์์ธ๋ฅผ ๋ํ๋ด๋ ํด๋์ค. ์ด ํด๋์ค๋ฅผ ๊ณ์นํ ์์ธ(Exception์ ๊ณ์นํ RuntimeException๋ง ์ ์ธ)๋ ํ๋ก๊ทธ๋จ ์์์ ํฌ์ฐฉํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ฐ์ํ๋ ๋ฉ์๋ ์๊ทธ๋์ฒ(์ ์ธ์ ๋ด์ฉ)์ throws ์ ์ ๊ธฐ์ ํด์ผ๋ง ํ๋ค. ์๋ฅผ ๋ค์ด fileํธ์ถ ์ IOException์ ๋ช ์ํ๊ฑฐ๋ sql์ฌ์ฉ ์ SQLException์ ๋ฐ์์ํค๋ ๊ฒ์ด ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ์ด ์๋๋ฏ๋ก ์ข ๋ '๊ฒฌ๊ณ ํ ํ๋ก๊ทธ๋จ'์ ๋ง๋ค ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
2) java.lang.RuntimeException ํด๋์ค
์คํ ์ ์์ธ๋ฅผ ๋ํ๋ด๋ ํด๋์ค ํ๋ก๊ทธ๋จ ์์์ ๋ฐ๋์ ํฌ์ฐฉํ ํ์๋ throws๋ฅผ ๊ธฐ์ ํ ํ์๋ ์๋ค.
๋ฐ์ํ ์์ธ๋ ์๋์ ์ผ๋ก ํธ์ถ์์ ์ ํ๋๋ค. (์์๋ก.. ์์๋ก..)
๊ทธ๋ ๋ค๋ฉด ์ด๋์์๋ "์คํ ์ ์์ธ"๋ฅผ ํฌ์ฐฉํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
๋ต์ 'ํด๋น ์ค๋ ๋๊ฐ ์ข ๋ฃํด๋ฒ๋ฆฐ๋ค' ์ด๋ค. Java VM์ ์์ธ๊ฐ ๋๋ฌํ๋ฉด ํด๋น ์ค๋ ๋๋ฅผ ์ข ๋ฃ์ํจ๋ค.
ํด๋น ์ค๋ ๋๊ฐ ๋ฉ์ธ ์ค๋ ๋๋ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด๊ฐ ์ข ๋ฃ๋๋ค.
3) java.lang.Error ํด๋์ค
'์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํฌ์ฐฉํด์๋ ์ ๋๋ ์ค๋ํ ๋ฌธ์ '๋ฅผ ๋ํ๋ด๋ ํด๋์ค์ด๋ค.
Error๋ RuntimeException์ฒ๋ผ ๋ฐ๋ก catch๋ throws ๋ฅผ ๊ธฐ์ ํ ํ์๊ฐ ์๋ค. ํ์ง๋ง RuntimeException์ฒ๋ผ ํฌ์ฐฉํด์ผ ๋ ๋์์ด ์๋๋ค..
Error๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ๊ทธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๊ฐํ ๋น์ ์ ์ํ์ด๋ฏ๋ก ์ ์ํ๊ฒ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ์์ผ์ผ ํ๋ ์ํฉ์ด๋ค.
ex) java.lang.OutOfMemeroyError (๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ) -> ์ ์ ์ข ๋ฃ ํ์.
6.1.3 ์์ธ ์ฒ๋ฆฌ ์ธ ๊ฐ์ง ๊ตฌ๋ฌธ ์ ๋๋ก ์ฌ์ฉํ๊ธฐ
1) try~ catch~ finallly
try์๋ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฝ๋๋ฅผ catch๋ ์์ธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ finally๋ ์์ธ์ ๊ด๊ณ์์ด ํญ์ ์ฒ๋ฆฌํด์ผ๋ง ํ๋ ์ฝ๋๋ฅผ ๋ช ์ํ๋ค.
ํญ์ ์ฒ๋ฆฌํด์ผํ๋ ๊ฒ์๋ '์์์ ๋ฐ๋ฉ'์ด ์๋ค.
2) try~with~resources
1)์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉด finally ๋ถ๋ถ์์๋ try catch ๋ถ๋ถ์ด ์๊ฒจ ์ค๋ณต์ด ์๊ธฐ๊ณ ๊ท์ฐฎ๋ค. ์๋ฐ 7๋ถํฐ๋ try~with~resources ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ณ ์๋ค.
try(...์์...) ๊ดํธ์์ ์๋ ์์๋ค์ try~catch๋ฌธ์ด ๋๋ ํ ์๋์ผ๋ก closeํด์ค๋ค. ๋ง์ฝ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ close์์ ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ทธ ์ธ๋ถ๋ก ์์ธ๊ฐ throw๋๋ค.
try (InputStream is = new FileInputStream(fromFile);
OutputStream os = new FileOutputStream(toFile)) {
is.read(contents);
os.write(contents);
} catch (IOException ex) {
// ์์ธ ํฌ์ฐฉ ์ ์ฒ๋ฆฌ
}
3) ๋ค์ค ์บ์น
try์์๋ ํ ์ข ๋ฅ์ ์์ธ๋ง ๋ฐ์ํ์ง ์๋๋ค. try ๋ธ๋ก์์์ ์ฌ๋ฌ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ๊ฐ๊ฐ์ ์ํฉ์ ๋ง๊ฒ ์ฒ๋ฆฌํด์ค์ผ๋ง ํ๋ค.
try{
Class<?> clazz = Class.forName("Main");
clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
์ ์ฒ๋ผ ํ๋ฉด ์์ธ๋ง๋ค catch๋ฌธ๊ณผ ์ฒ๋ฆฌ๋ฅผ ์์ฑํด์ค์ผํ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ด ๋ฒ์กํด์ง๋ค.
์๋ฐ 7์์ ๋์ ๋ "๋ค์ค ์บ์น"๋ฅผ ์ด์ฉํ๋ฉด ์ข ๋ ํธํ๊ฒ ๊ธฐ์ ํ ์ ์๋ค.
try{
Class<?> clazz = Class.forName("Main");
clazz.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๊ท์ฐฎ๋ค๊ณ Exception์ผ๋ก ์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ ์์๋ก ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ณตํฌ์ throws Exception ๊ฐ์ผ ํ์์ ๋ฐ์์ํจ๋ค.
6.2 ์์ธ ์ฒ๋ฆฌ์์ ํผ๋์ ๋น ์ง์ง ์๊ธฐ ์ํ ํฌ์ธํธ
6.2.1 ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฆฌํดํ์ง ์๊ธฐ
์๋ฐ์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ธ์ด์์ ์ ๊ณตํ๋ฏ๋ก ๋น์ ์์ ์ธ ์ํฉ ์ ์์ธ๋ฅผ ๋ ๋ ค์ผํ๊ณ ์์์ฒ๋ผ ์ ์์ ์ผ๋ก ์ํ๋์๋ค๋ฉด ๋ฐํ๊ฐ์ ์ ๊ณตํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ์ถํ ์ชฝ์์ ๋ถํ์ํ if๋ฌธ์ ์์ฑํ์ง ์์๋ ๋๋ค.
6.2.2 ์์ธ๋ฅผ ์ ๊ฑฐํ์ง ์๊ธฐ
์์ธ๊ฐ ๋ฐ์ํด์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ธ๋ฅผ catch๋ง ํ๋ฉด ์๋๋ค.
๊ทธ๋ฌ๋ฉด ์๋ฌด๊ฒ๋ ์ํํ๊ณ ์ถ์ง ์์ ๋ ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ด ๋๋ ์ ์ด๋ ์ด๋ค ์์ธ๊ฐ ๋ฐ์ํ๋์ง๋ ์๋ ค์ค์ผ๋ง ํ๋ค.
1) ๋ก๊ทธ ์ถ๋ ฅ์ ์์ง ์๊ธฐ
catch (NumberFormatException ex) {
log.warn("์ซ์๊ฐ ์๋๋๋ค. " + ex);
}
์์ ๊ฐ์ด ์ด๋ ๋ถ๋ถ์์ ์์ธ๊ฐ ๋ฐ์ํ๋์ง ์ ์ ์๋๋ก ํํํ์.
2) ์ฒ๋ฆฌ๋ฅผ ๊ณ์ํ ์ง ํ๋จํ๊ธฐ
์ฒ๋ฆฌ๋ฅผ ๊ทธ๋ง๋๊ณ ์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ถ๋ค๋ฉด return์ด๋ throw๋ฅผ ํ๊ณ ์ฒ๋ฆฌ๋ฅผ ๊ณ์ํ๊ณ ์ถ๋ค๋ฉด ์ดํ์ ์ํ์ ํ์ํ ๊ฐ์ด ์๋ค๋ฉด default๊ฐ์ ๋ฃ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ค.
6.2.3 ๊ณตํฌ์ throws Exception ๊ฐ์ผ
๋ณต์์ ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์์ธ์ ์ ์ธ์ด๋ ํฌ์ฐฉ์ด ๊ท์ฐฎ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ์๊ทธ๋์ฒ์ throws Exception์ด๋ผ๊ณ ๊ธฐ์ ํ๋ ์ฌ๋์ด ์๋ค..
์ด๋ ๋์ค์ ๋น๊ทน์ ๋ณ๋๋ค.
1) ํธ์ถํ๋ ๊ณณ์์ Exception์ ํฌ์ฐฉํด์ผํ๋ค.
Exception์ ๋ฉ์๋์์ ๋์ง๋ฉด ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ ํธ์ถ์์ ์ด๋ค ์์ธ๊ฐ ๋ฐ์ํ๋ ์ง ์์ง ๋ชปํ๋ ์ํ์์ Exception์ ํฌ์ฐฉํด์ ์ฒ๋ฆฌํด์ผํ๋ค.. ์ด๋ค ์์ธ์ธ์ง ์ ์ ์์ผ๋ฏ๋ก ์์ธ ์ฒ๋ฆฌ์ ์ด๋ ค์์ด ์๊ธฐ๊ฒ ๋๋ค.
(ํธ์ถ์์์ ์์ธ๋ฅผ ํน์ ํ ์ ์๋ ๋ฌธ์ ๋ฐ์)
2) ๋์ค์ IOException ๋ฑ ๊ตฌ์ฒด์ ์ธ ์์ธ๊ฐ ๋ฐ์ํด๋ Exception์ด ๋๋ฒ๋ฆฐ๋ค...
ํ์ฌ ์งํ์ค์ธ ๋ฉ์๋์์ IOException์ด๋ ClassNotFound๋ฑ ๋ค์ํ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์ด๋ ์ด๋ฅผ ํน์ ํ์ง ๋ชปํ๊ณ 'ํธ์ถ์'์์๋ Exception์ด๋ผ๋ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํด์ผํ๋ค.. (ํธ์ถ์์์ ์์ธ๋ฅผ ํน์ ํ์ง ๋ชปํจ)
3) RuntimeException์ด ๋ฐ์ํด๋ Exception์ฒ๋ผ ์ฒ๋ฆฌํ๋ค...
Exception๊ณผ RuntimeException์ ๊ฒ์ฌ์์ธ์ ์คํ ์ค ์์ธ์ด๋ฏ๋ก ๋ถ๋ช ํ ๋ค๋ฅด๋ค. ํ์ง๋ง RuntimeException ๋ฐ์ ์์๋ Exception์ผ๋ก ๋์ ธ๋ฒ๋ฆฌ๋ฉด Exception ์ฒ๋ฆฌ๋ก ์ธ์ํด ์ ์ ํ ์กฐ์น๋ฅผ ํ ์ ์๊ฒ ๋๋ค..
6.2.4 ์ด๋ ๊ณ์ธต์์ ์์ธ๋ฅผ ํฌ์ฐฉํด์ ์ฒ๋ฆฌํด์ผ ํ๋๊ฐ?
* ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฅ์
* ์ฒ๋ฆฌ์ ํ๋ฆ์ ํ๋จํ๋ ์ฅ์
๋ณดํต ๋ง๋จ์์๋ ์์ธ๋ฅผ ๋์ง๊ณ ๊ทธ ์์ธ๋ฅผ ๋ฐ์ ์ ์ฒด์ ์ธ ํ๋ฆ์ ํ๋จํ ์ ์๋ ์์ ํด๋์ค์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
6.2.5 ๋ ์์ ์ธ ์์ธ ์์ฑํ๊ธฐ
๋ณ๋ค๋ฅธ ์ด์ ๊ฐ ์๋ค๋ฉด ์๋ฐ ํ์ค API์์ ์ ๊ณตํ๋ ์์ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์.
ํ์ง๋ง ์์ธ๋ฅผ ๊ฐ๋ณ์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋ ํต์ผํด์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ๋ ๋ ์์ ์ธ ์์ธ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ์.
Exception์ด๋ RuntimeException์ ์ ์ ํ ์์๋ฐ์ ํ์ํ ํ๋(id or message ๋ฑ)์ ์ ์ํ์ฌ ์ฌ์ฉํ์.
6.2.6 ์์ธ์ ํธ๋ ๋
1. ๊ฒ์ฌ์์ธ๋ณด๋ค ์คํ ์ ์์ธ๋ฅผ ์ฌ์ฉ
-> ์์ธ ์ฒ๋ฆฌ ์์ฒด๋ฅผ ๊ฐ๋จํ๊ฒ ์ผ์ผ์ด ๊ฐ๋ณ ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ์ง ์์๋ ๋จ.
2. ๋๋ค์ ์์์ ๋ฐ์ํ ์์ธ ์ทจ๊ธ
๋๋ค์์์ throw๋ฅผ ํ๋ฉด ๋๋ค ๋ฐ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
3. Optional ํด๋์ค ๋์ ์ ์ํ ์ฅ์
์๋ฐ์ ๊ณ ์ง์ ์ธ ๋ฌธ์ ์ธ NullPointerException์ ์ข ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด Optional ํด๋์ค๊ฐ ๋์ ๋์๋ค.
Mapํด๋์ค์ get์ฌ์ฉ ์ ํค๊ฐ ์๋ค๋ฉด null์ ๋ฐํํ๊ฒ ๋๊ณ ์ด๋ฅผ ์ฒดํฌํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด NullPointerException์ด ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ null์ฒดํฌ๋ ํ์์ ์ด์๋ค.
Optional์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ์ ๊ฐ์ ๊ฐ์ง ์๋ ๊ฒฝ์ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
'๐์ฝ์ ์ฑ ์ ๋ฆฌ > ์๋ฐ ๋ง์คํฐ๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ ๋ง์คํฐ๋ถ] 12์ฅ : ๋์์ธํจํด ์ฆ๊ธฐ๊ธฐ - ๊ตฌ์กฐ (0) | 2021.10.02 |
---|---|
[์๋ฐ ๋ง์คํฐ๋ถ] 12์ฅ ๋์์ธํจํด ์ฆ๊ธฐ๊ธฐ - ์์ฑ (0) | 2021.09.22 |
[์๋ฐ ๋ง์คํฐ๋ถ] 10์ฅ ๊ฐ์ฒด์งํฅ ์ฆ๊ธฐ๊ธฐ (0) | 2021.09.15 |
[์๋ฐ ๋ง์คํฐ๋ถ] 9์ฅ ๋ ์ง ์ฒ๋ฆฌ ๊ณต๋ตํ๊ธฐ (0) | 2021.09.14 |
[์๋ฐ ๋ง์คํฐ๋ถ] 1์ฅ๋ถํฐ 5์ฅ.. ๋๋ค์๊ณผ Stream API๊น์ง. (0) | 2021.09.12 |