๐จ๐ปโ๐ป ์ดํํฐ๋ธ ์๋ฐ - ์์ธ
10์ฅ - ์์ธ
๐ก ์์ธ๋ ์ง์ง ์์ธ ์ํฉ์๋ง ์ฌ์ฉํ๋ผ
โ์์ธ๋ฅผ ์ ์์ ์ธ ์ ์ด ํ๋ฆ์์ ์ฌ์ฉํด์๋ ์ ๋๋ค.โ
1. ์์ธ๋ฅผ ์๋ชป ์ฌ์ฉํ ์
// ์์ธ๋ฅผ ์์ ํ ์๋ชป ์ฌ์ฉํ ์
try {
int i = 0;
while(true)
range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
- ์์ ์์๋ ์์ฃผ ๋์ฐํ ์ฝ๋์. ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ค๊ฐ ๋ฐฐ์ด์ ๋์ ๋๋ฌํด
ArrayIndexOutOfBoundsException
์ด ๋ฐ์ํ๋ฉด ๋์ ๋ด๋ ๊ฒ.
- ์ด ์ฝ๋๋ ์๋ชป๋ ์ถ๋ก ์ ๊ทผ๊ฑฐ๋ก ์ฑ๋ฅ์ ๋์ฌ๋ณด๋ ค ํ ์ฌ๋ก์.
- JVM์ ๋ฐฐ์ด์ ์ ๊ทผํ ๋๋ง๋ค ๊ฒฝ๊ณ๋ฅผ ๋์ง ์๋์ง ๊ฒ์ฌํ๋๋ฐ, ์ผ๋ฐ์ ์ธ ๋ฐ๋ณต๋ฌธ๋ ๋ฐฐ์ด ๊ฒฝ๊ณ์ ๋๋ฌํ๋ฉด ์ข
๋ฃํ๋ค. โ ๋ฐ๋ผ์ ์ด ๊ฒ์ฌ๋ฅผ ๋ฐ๋ณต๋ฌธ์๋ ๋ช
์ํ๋ฉด ๊ฐ์ ์ผ์ด ์ค๋ณต๋๋ฏ๋ก ํ๋๋ฅผ ์๋ตํ ๊ฒ
- ์ด ์ถ๋ก ์ ์ธ ๊ฐ์ง ๋ฉด์์ ์๋ชป๋ ์ถ๋ก ์.
- ์์ธ๋ ์์ธ ์ํฉ์ ์ธ ์ฉ๋๋ก ์ค๊ณ ๋์์ผ๋ฏ๋ก JVM ๊ตฌํ์ ์
์ฅ์์๋ ๋ช
ํํ ๊ฒ์ฌ๋งํผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ผ ํ ๋๊ธฐ๊ฐ ์ฝํจ. (์ต์ ํ์ ๋ณ๋ก ์ ๊ฒฝ ์ฐ์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ํผ)
- ์ฝ๋๋ฅผ
try-catch
๋ธ๋ก ์์ ๋ฃ์ผ๋ฉด JVM์ด ์ ์ฉํ ์ ์๋ ์ต์ ํ๊ฐ ์ ํ๋จ.
- ๋ฐฐ์ด์ ์ํํ๋ ํ์ค ๊ด์ฉ๊ตฌ๋ ์์ ๊ฑฑ์ ํ ์ค๋ณต ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์์. JVM์ด ์์์ ์ต์ ํํด ์์ ์ค.
โ์์ธ๋ฅผ ์ ์์ ์ธ ์ ์ด ํ๋ฆ์์ ์ฌ์ฉํด์๋ ์ ๋๋ค.โ
// ์์ธ๋ฅผ ์์ ํ ์๋ชป ์ฌ์ฉํ ์
try {
int i = 0;
while(true)
range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
ArrayIndexOutOfBoundsException
์ด ๋ฐ์ํ๋ฉด ๋์ ๋ด๋ ๊ฒ.- JVM์ ๋ฐฐ์ด์ ์ ๊ทผํ ๋๋ง๋ค ๊ฒฝ๊ณ๋ฅผ ๋์ง ์๋์ง ๊ฒ์ฌํ๋๋ฐ, ์ผ๋ฐ์ ์ธ ๋ฐ๋ณต๋ฌธ๋ ๋ฐฐ์ด ๊ฒฝ๊ณ์ ๋๋ฌํ๋ฉด ์ข ๋ฃํ๋ค. โ ๋ฐ๋ผ์ ์ด ๊ฒ์ฌ๋ฅผ ๋ฐ๋ณต๋ฌธ์๋ ๋ช ์ํ๋ฉด ๊ฐ์ ์ผ์ด ์ค๋ณต๋๋ฏ๋ก ํ๋๋ฅผ ์๋ตํ ๊ฒ
- ์ด ์ถ๋ก ์ ์ธ ๊ฐ์ง ๋ฉด์์ ์๋ชป๋ ์ถ๋ก ์.
- ์์ธ๋ ์์ธ ์ํฉ์ ์ธ ์ฉ๋๋ก ์ค๊ณ ๋์์ผ๋ฏ๋ก JVM ๊ตฌํ์ ์ ์ฅ์์๋ ๋ช ํํ ๊ฒ์ฌ๋งํผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ผ ํ ๋๊ธฐ๊ฐ ์ฝํจ. (์ต์ ํ์ ๋ณ๋ก ์ ๊ฒฝ ์ฐ์ง ์์์ ๊ฐ๋ฅ์ฑ์ด ํผ)
- ์ฝ๋๋ฅผ
try-catch
๋ธ๋ก ์์ ๋ฃ์ผ๋ฉด JVM์ด ์ ์ฉํ ์ ์๋ ์ต์ ํ๊ฐ ์ ํ๋จ. - ๋ฐฐ์ด์ ์ํํ๋ ํ์ค ๊ด์ฉ๊ตฌ๋ ์์ ๊ฑฑ์ ํ ์ค๋ณต ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์์. JVM์ด ์์์ ์ต์ ํํด ์์ ์ค.
โ ๊ตํ : ์์ธ๋ (๊ทธ ์ด๋ฆ์ด ๋งํด์ฃผ๋ฏ) ์ค์ง ์์ธ ์ํฉ์์๋ง ์จ์ผ ํ๋ค. ์ ๋๋ก ์ผ์์ ์ธ ์ ์ด ํ๋ฆ์ฉ์ผ๋ก ์ฐ์ฌ์ ์ ๋๋ค.
โ ์ ์ค๊ณ๋ API๋ผ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ์ธ ์ ์ด ํ๋ฆ์์ ์์ธ๋ฅผ ์ฌ์ฉํ ์ผ์ด ์๊ฒ ํด์ผ ํ๋ค.
2. ์ํ ๊ฒ์ฌ ๋ฉ์๋, ์ต์ ๋, ํน์ ๊ฐ ์ ํ ์ง์นจ
- ์ํ ์์กด์ ๋ฉ์๋ ex)
Iterator
์ธํฐํ์ด์ค์next
๋ฉ์๋ - ์ํ ๊ฒ์ฌ ๋ฉ์๋ ex)
Iterator
์ธํฐํ์ด์ค์hasNext
๋ฉ์๋
- ์ธ๋ถ ๋๊ธฐํ ์์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํ ์ ์๊ฑฐ๋ ์ธ๋ถ ์์ธ์ผ๋ก ์ํ๊ฐ ๋ณํ ์ ์๋ค๋ฉด ์ต์ ๋์ด๋ ํน์ ๊ฐ์ ์ฌ์ฉํ๋ค. โ ์ํ ๊ฒ์ฌ ๋ฉ์๋์ ์ํ ์์กด์ ๋ฉ์๋ ํธ์ถ ์ฌ์ด์ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณํ ์ ์๊ธฐ ๋๋ฌธ
- ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์์ ์ํ ๊ฒ์ฌ ๋ฉ์๋๊ฐ ์ํ ์์กด์ ๋ฉ์๋์ ์์ ์ผ๋ถ๋ฅผ ์ค๋ณต ์ํํ๋ค๋ฉด ์ต์ ๋์ด๋ ํน์ ๊ฐ์ ์ ํํ๋ค.
- ๋ค๋ฅธ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ํ ๊ฒ์ฌ ๋ฉ์๋ ๋ฐฉ์์ด ์กฐ๊ธ ๋ ๋ซ๋ค๊ณ ํ ์ ์๋ค. ๊ฐ๋ ์ฑ์ด ์ด์ง ๋ ์ข๊ณ , ์๋ชป ์ฌ์ฉํ์ ๋ ๋ฐ๊ฒฌํ๊ธฐ๊ฐ ์ฝ๋ค. ์ํ ๊ฒ์ฌ ๋ฉ์๋ ํธ์ถ์ ๊น๋นก ์์๋ค๋ฉด ์ํ ์์กด์ ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋์ ธ ๋ฒ๊ทธ๋ฅผ ํ์คํ ๋๋ฌ๋ผ ๊ฒ์. โ ๋ฐ๋ฉด ํน์ ๊ฐ์ ๊ฒ์ฌํ์ง ์๊ณ ์ง๋์ณ๋ ๋ฐ๊ฒฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค(์ต์ ๋์ ํด๋นํ์ง ์๋ ๋ฌธ์ ).
๐ก ๋ณต๊ตฌํ ์ ์๋ ์ํฉ์๋ ๊ฒ์ฌ ์์ธ๋ฅผ, ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ์๋ ๋ฐํ์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
โ๋ณต๊ตฌํ ์ ์๋ ์ํฉ โ ๊ฒ์ฌ ์์ธ / ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ ๋๋ ํ์คํ์ง ์์ ๋ โ ๋น๊ฒ์ฌ ์์ธโ
1. ๊ฒ์ฌ ์์ธ
- ์ผ๋ฐ์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ ์กฐ๊ฑด์ผ ๋ ๋ฐ์
- ์ฌ์ฉ ์ง์นจ : ํธ์ถํ๋ ์ชฝ์์ ๋ณต๊ตฌํ๋ฆฌ๋ผ ์ฌ๊ฒจ์ง๋ ์ํฉ์ด๋ผ๋ฉด ๊ฒ์ฌ ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
- ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ฉด ํธ์ถ์๊ฐ ๊ทธ ์์ธ๋ฅผ
catch
๋ก ์ก์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ ๋ฐ๊นฅ์ผ๋ก ์ ํํ๋๋ก ๊ฐ์ ํ๊ฒ ๋จ.
โ ๋ฉ์๋ ์ ์ธ์ ํฌํจ๋ ๊ฒ์ฌ ์์ธ ๊ฐ๊ฐ์ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ์ ๋ ๋ฐ์ํ ์ ์๋ ์ ๋ ฅํ ๊ฒฐ๊ณผ์์ API์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ. (API ์ฌ์ฉ์์๊ฒ ๊ทธ ์ํฉ์์ ํ๋ณตํด๋ด๋ผ๊ณ ์๊ตฌ)
2. ๋น๊ฒ์ฌ ์์ธ
- ๋น๊ฒ์ฌ ์์ธ๋ ๋ ๊ฐ์ง๋ก, ๊ฐ๊ฐ ๋ฐํ์ ์์ธ์ ์๋ฌ๋ค. ์ด ๋์ ํ๋ก๊ทธ๋จ์์ ์ก์ ํ์๊ฐ ์๊ฑฐ๋ ํต์์ ์ผ๋ก ์ก์ง ๋ง์์ผ ํจ.
- ํ๋ก๊ทธ๋จ์์ ๋น๊ฒ์ฌ ์์ธ๋ ์๋ฌ๋ฅผ ๋์ก๋ค๋ ๊ฒ์ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ๋ ์คํํด๋ด์ผ ๋๋ณด๋ค๋ ์ค์ด ๋ง๋ค๋ ๋ป.
- ์ด๋ฐ
throwable
์ ์ก์ง ์์ ์ค๋ ๋๋ ์ ์ ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ด๋ฑ์ผ๋ฉฐ ์ค๋จ๋จ. - ์ฌ์ฉ ์ง์นจ
- ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ๋๋ ๋ฐํ์ ์์ธ๋ฅผ ์ฌ์ฉํ์
- ๋ฐํ์ ์์ธ์ ๋๋ถ๋ถ์ ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ์ ๋ ๋ฐ์. ex)
ArrayIndexOutOfBoundsException
- ๋ฐํ์ ์์ธ์ ๋๋ถ๋ถ์ ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ์ ๋ ๋ฐ์. ex)
- ์๋ฌ๋ ๋ณดํต JVM์ด ์์ ๋ถ์กฑ, ๋ถ๋ณ์ ๊นจ์ง ๋ฑ ๋์ด์ ์ํ์ ๊ณ์ํ ์ ์๋ ์ํฉ์ ๋ํ๋ผ ๋ ์ฌ์ฉ
- ๋น๊ฒ์ฌ
throwable
์ ๋ชจ๋RuntimeException
์ ํ์ ํด๋์ค์ฌ์ผ ํจ. (Error
๋ ์์ํ์ง ๋ง์์ผ ํ ๋ฟ ์๋๋ผ,throw
๋ฌธ์ผ๋ก ์ง์ ๋์ง๋ ์ผ๋ ์์ด์ผ ํจ.)
- ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ๋๋ ๋ฐํ์ ์์ธ๋ฅผ ์ฌ์ฉํ์
๐ก ํ์ ์๋ ๊ฒ์ฌ ์์ธ ์ฌ์ฉ์ ํผํ๋ผ
โ์ต์ ๋๋ง์ผ๋ก๋ ์ํฉ์ ์ฒ๋ฆฌํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ ๋๋ง ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง์โ
1. ๊ฒ์ฌ ์์ธ์ ์ฌ์ฉ
- ์ด๋ค ๋ฉ์๋๊ฐ ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง ์ ์๋ค๊ณ ์ ์ธ๋๋ค๋ฉด, ์ด๋ฅผ ํธ์ถํ๋ ์ฝ๋์์๋
catch
๋ธ๋ก์ ๋์ด ๊ทธ ์์ธ๋ฅผ ๋ถ์ก์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋ ๋ฐ๊นฅ์ผ๋ก ๋์ ธ ๋ฌธ์ ๋ฅผ ์ ํํด์ผ ํจ. โ ์ด๋ ์ชฝ์ด๋ API ์ฌ์ฉ์์๊ฒ ๋ถ๋ด์ ์ค. - ๊ฒ์ฌ ์์ธ๊ฐ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ง์ฐ๋ ๋ถ๋ด์ ๋ฉ์๋๊ฐ ๋จ ํ๋์ ๊ฒ์ฌ ์์ธ๋ง ๋์ง ๋๊ฐ ํนํ ํผ.
- ๊ฒ์ฌ ์์ธ๊ฐ ๋จ ํ๋๋ฟ์ด๋ผ๋ฉด ์ค์ง ๊ทธ ์์ธ ๋๋ฌธ์ API ์ฌ์ฉ์๋
try
๋ธ๋ก์ ์ถ๊ฐํด์ผ ํ๊ณ ์คํธ๋ฆผ์์ ์ง์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋จ.
- ๊ฒ์ฌ ์์ธ๊ฐ ๋จ ํ๋๋ฟ์ด๋ผ๋ฉด ์ค์ง ๊ทธ ์์ธ ๋๋ฌธ์ API ์ฌ์ฉ์๋
โ ๊ฒ์ฌ ์์ธ๋ฅผ ์ ๋์ง๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๊ณ ๋ฏผํด๋ณผ ๊ฐ์น๊ฐ ์๋ค.
2. ๊ฒ์ฌ ์์ธ์ ๋์ฒด์ฌ
- ์ ์ ํ ๊ฒฐ๊ณผ ํ์
์ ๋ด์ ์ต์
๋์ ๋ฐํ
- ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋์ ๋จ์ํ ๋น ์ต์ ๋์ ๋ฐํ.
- ์ด ๋ฐฉ์์ ๋จ์ ์ ์์ธ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์๋ ค์ฃผ๋ ๋ถ๊ฐ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค๋ ๊ฒ.
- ๋ฉ์๋๋ฅผ 2๊ฐ๋ก ์ชผ๊ฐ ๋น๊ฒ์ฌ ์์ธ๋ก ๋ฐ๊พธ๊ธฐ
// ๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋ฉ์๋ - ๋ฆฌํฉํฐ๋ง ์
try {
obj.action(args);
} catch(TheCheckedException e) {
... // ์์ธ ์ํฉ์ ๋์ฒํ๋ค.
}
// ์ํ ๊ฒ์ฌ ๋ฉ์๋์ ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๋ ๋ฉ์๋ - ๋ฆฌํฉํฐ๋ง ํ
if(obj.actionPermitted(args)) {
obj.action(args);
} else {
... // ์์ธ ์ํฉ์ ๋์ฒํ๋ค.
}
๐ก ํ์ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ
โํ์ค ์์ธ๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด API๊ฐ ๋ค๋ฅธ ์ฌ๋์ด ์ตํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์์งโ
1. ๋ํ์ ์ธ ํ์ค ์์ธ
์์ธ | ์ฃผ์ ์ฐ์ |
---|---|
IllegalArgumentException | ํ์ฉํ์ง ์๋ ๊ฐ์ด ์ธ์๋ก ๊ฑด๋ค์ก์ ๋(null์ ๋ฐ๋ก NullPointerException์ผ๋ก ์ฒ๋ฆฌ) |
IllegalStateException | ๊ฐ์ฒด๊ฐ ๋ฉ์๋๋ฅผ ์ํํ๊ธฐ์ ์ ์ ํ์ง ์์ ์ํ์ผ ๋ |
NullPointerException | null์ ํ์ฉํ์ง ์๋ ๋ฉ์๋์ null์ ๊ฑด๋ธ์ ๋ |
IndexOutOfBoundsException | ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋์ด์ฐ์ ๋ |
ConcurrentModificationException | ํ์ฉํ์ง ์๋ ๋์ ์์ ์ด ๋ฐ๊ฒฌ๋์ ๋ |
UnsupportedOperationException | ํธ์ถํ ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์์ ๋ |
- ์ํฉ์ ๋ถํฉํ๋ค๋ฉด ํญ์ ํ์ค ์์ธ๋ฅผ ์ฌ์ฌ์ฉํ์
โป Exception
, RuntimeException
, Throwable
, Error
๋ ์ง์ ์ฌ์ฌ์ฉํ์ง ๋ง์
2. IllegalArgumentException vs IllegalStateException
-
์์ ํ๋ก ์ ๋ฆฌํ โ์ฃผ์ ์ฐ์โ์ด ์ํธ ๋ฐฐํ์ ์ด์ง ์์ ํ์, ์ข ์ข ์ฌ์ฌ์ฉํ ์์ธ๋ฅผ ์ ํํ๊ธฐ๊ฐ ์ด๋ ค์ธ ๋๋ ์์
-
ex) ์นด๋ ๋ฑ์ ํํํ๋ ๊ฐ์ฒด๊ฐ ์๊ณ , ์ธ์๋ก ๊ฑด๋จ ์๋งํผ์ ์นด๋๋ฅผ ๋ฝ์ ๋๋ ์ฃผ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค๊ณ ํด๋ณด์. ์ด๋ ๋ฑ์ ๋จ์ ์๋ ์นด๋ ์๋ณด๋ค ํฐ ๊ฐ์ ๊ฑด๋ค๋ฉด ์ด๋ค ์์ธ๋ฅผ ๋์ ธ์ผ ํ ๊น?
- ์ธ์์ ๊ฐ์ด ๋๋ฌด ํฌ๋ค๊ณ ๋ณธ๋ค๋ฉด
IllegalArgumentException
, ๋ฑ์ ๋จ์ ์นด๋ ์๊ฐ ๋๋ฌด ์ ๋ค๊ณ ๋ณด๋ฉดIllegalStateException
๋ฅผ ์ ํํ ๊ฒ์.
- ์ธ์์ ๊ฐ์ด ๋๋ฌด ํฌ๋ค๊ณ ๋ณธ๋ค๋ฉด
-
์์ ์ํฉ์์ ์ผ๋ฐ์ ์ธ ๊ท์น์ ์๋์ ๊ฐ๋ค.
- ์ธ์ ๊ฐ์ด ๋ฌด์์ด์๋ ์ด์ฐจํผ ์คํจํ์๊ฑฐ๋ผ๋ฉด
IllegalStateException
, ๊ทธ๋ ์ง ์์ผ๋ฉดIllegalArgumentException
์ ๋์ง์.
- ์ธ์ ๊ฐ์ด ๋ฌด์์ด์๋ ์ด์ฐจํผ ์คํจํ์๊ฑฐ๋ผ๋ฉด
๐ก ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ฅผ ๋์ง์
โ์๋ ๊ณ์ธต์ ์์ธ๋ฅผ ์๋ฐฉํ๊ฑฐ๋ ์ค์ค๋ก ์ฒ๋ฆฌํ ์ ์๊ณ ,
๊ทธ ์์ธ๋ฅผ ์์ ๊ณ์ธต์ ๊ทธ๋๋ก ๋ ธ์ถํ๊ธฐ ๊ณค๋ํ๋ค๋ฉด ์์ธ ๋ฒ์ญ์ ์ฌ์ฉํ๋ผโ
1. ์์ธ ๋ฒ์ญ
- ์์ธ ๋ฒ์ญ(excepton translation) : ์์ ๊ณ์ธต์์ ์ ์์ค ์์ธ๋ฅผ ์ก์ ์์ ์ ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ก ๋ฐ๊ฟ ๋์ง๋ ๊ฒ
try {
... // ์ ์์ค ์ถ์ํ๋ฅผ ์ด์ฉํ๋ค.
} catch(LowerLevelException e) {
// ์ถ์ํ ์์ค์ ๋ง๊ฒ ๋ฒ์ญํ๋ค.
throw new HigherLevelException(...);
}
2. ์์ธ ์ฐ์
- ์์ธ ์ฐ์(exception chaining) : ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ(cause)์ธ ์ ์์ค ์์ธ๋ฅผ ๊ณ ์์ค ์์ธ์ ์ค์ด ๋ณด๋ด๋ ๋ฐฉ์.
try {
... // ์ ์์ค ์ถ์ํ๋ฅผ ์ด์ฉํ๋ค.
} catch(LowerLevelException cause) {
// ์ ์์ค ์์ธ๋ฅผ ๊ณ ์์ค ์์ธ์ ์ค์ด ๋ณด๋ธ๋ค.
throw new HigherLevelException(cause);
}
// ์์ธ ์ฐ์์ฉ ์์ฑ์
class HigherLevelException extends Exception {
HigherLevelException(Throwable cause) {
super(cause);
}
}
- ๊ณ ์์ค ์์ธ์ ์์ฑ์๋ (์์ธ ์ฐ์์ฉ์ผ๋ก ์ค๊ณ๋) ์์ ํด๋์ค์ ์์ฑ์์ ์ด โ์์ธโ์ ๊ฑด๋ค์ฃผ์ด, ์ต์ข
์ ์ผ๋ก
Throwable(Throwable)
์์ฑ์๊น์ง ๊ฑด๋ค์ง๊ฒ ํ๋ค.
3. ๊ถ์ฅ
โ ๋ฌดํฑ๋๊ณ ์์ธ๋ฅผ ์ ํํ๋ ๊ฒ๋ณด๋ค์ผ ์์ธ ๋ฒ์ญ์ด ์ฐ์ํ ๋ฐฉ๋ฒ์ด์ง๋ง, ๊ทธ๋ ๋ค๊ณ ๋จ์ฉํด์๋ ๊ณค๋ํจ.
- ๊ฐ๋ฅํ๋ค๋ฉด ์ ์์ค ๋ฉ์๋๊ฐ ๋ฐ๋์ ์ฑ๊ณตํ๋๋ก ํ์ฌ ์๋ ๊ณ์ธต์์๋ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ต์
- ๋๋ก ์์ ๊ณ์ธต์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์๋ ๊ณ์ธต ๋ฉ์๋๋ก ๊ฑด๋ค๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ด ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์์
- ์๋ ๊ณ์ธต์์ ์์ธ๋ฅผ ํผํ ์ ์๋ค๋ฉด, ์์ ๊ณ์ธต์์ ๊ทธ ์์ธ๋ฅผ ์กฐ์ฉํ ์ฒ๋ฆฌํ์ฌ ๋ฌธ์ ๋ฅผ API ํธ์ถ์์๊น์ง ์ ํํ์ง ์๋ ๋ฐฉ๋ฒ.
- ์ด ๊ฒฝ์ฐ ๋ฐ์ํ ์์ธ๋
java.util.logging
๊ฐ์ ์ ์ ํ ๋ก๊น ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ธฐ๋กํด๋๋ฉด ์ข์.
- ์ด ๊ฒฝ์ฐ ๋ฐ์ํ ์์ธ๋
๐ก ๋ฉ์๋๊ฐ ๋์ง๋ ๋ชจ๋ ์์ธ๋ฅผ ๋ฌธ์ํํ๋ผ
โ๋ฐ์ ๊ฐ๋ฅํ ์์ธ๋ฅผ ๋ฌธ์๋ก ๋จ๊ธฐ์ง ์์ผ๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ๊ทธ ํด๋์ค๋
์ธํฐํ์ด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์ฌ์ง์ด ๋ถ๊ฐ๋ฅํ ์๋ ์๋ค.โ
- ๊ฒ์ฌ ์์ธ๋ ํญ์ ๋ฐ๋ก๋ฐ๋ก ์ ์ธํ๊ณ , ๊ฐ ์์ธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ์๋ฐ๋
์
@throw
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ๋ฌธ์ํํ์ public
๋ฉ์๋๋ผ๋ฉด ํ์ํ ์ ์ ์กฐ๊ฑด์ ๋ฌธ์ํํด์ผ ํ๋ฉฐ, ๊ทธ ์๋จ์ผ๋ก ๊ฐ์ฅ ์ข์ ๊ฒ์ด ๋ฐ๋ก ๋น๊ฒ์ฌ ์์ธ๋ค์ ๋ฌธ์ํํ๋ ๊ฒ์.- ๋ฉ์๋๊ฐ ๋์ง ์ ์๋ ์์ธ๋ฅผ ๊ฐ๊ฐ
@throw
ํ๊ทธ๋ก ๋ฌธ์ํํ๋, ๋น๊ฒ์ฌ ์์ธ๋ ๋ฉ์๋ ์ ์ธ์throws
๋ชฉ๋ก์ ๋ฃ์ง ๋ง์.- ๊ฒ์ฌ ์์ธ : ๋ฉ์๋ ์ ์ธ์
thorws
์ ์ ๋ฑ์ฅ O && ๋ฉ์๋ ์ฃผ์์@throw
ํ๊ทธ์ ๋ช ์ O - ๋น๊ฒ์ฌ ์์ธ : ๋ฉ์๋ ์ ์ธ์
thorws
์ ์ ๋ฑ์ฅ X && ๋ฉ์๋ ์ฃผ์์@throw
ํ๊ทธ์ ๋ช ์ O - ์ด ์กฐ๊ฑด์ ๋ง์กฑํ์ฌ ์์ฑํ๋ฉด ์๋ฐ๋ ์ ํธ๋ฆฌํฐ๊ฐ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํด์ค.
- ๊ฒ์ฌ ์์ธ : ๋ฉ์๋ ์ ์ธ์
- ํ ํด๋์ค์ ์ ์๋ ๋ง์ ๋ฉ์๋๊ฐ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ ์์ธ๋ฅผ ๋์ง๋ค๋ฉด ๊ทธ ์์ธ๋ฅผ (๊ฐ๊ฐ์ ๋ฉ์๋๊ฐ ์๋) ํด๋์ค ์ค๋ช
์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์์.
- ex) โ์ด ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๋ ์ธ์๋ก
null
์ด ๋์ด์ค๋ฉดNullPointerException
์ ๋์ง๋ค.โ
- ex) โ์ด ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๋ ์ธ์๋ก
๐ก ์์ธ์ ์์ธ ๋ฉ์์ง์ ์คํจ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ด์ผ๋ผ
โ์ฌํ ๋ถ์์ ์ํด ์คํจ ์๊ฐ์ ์ํฉ์ ์ ํํ ํฌ์ฐฉํด ์์ธ์ ์์ธ ๋ฉ์์ง์ ๋ด์์ผ ํจโ
- ์์ธ๋ฅผ ์ก์ง ๋ชปํด ํ๋ก๊ทธ๋จ์ด ์คํจํ๋ฉด ์๋ฐ ์์คํ
์ ๊ทธ ์์ธ์ ์คํ ์ถ์ (stack trace) ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์ถ๋ ฅํจ.
- ์คํ ์ถ์ ์ ์์ธ ๊ฐ์ฒด์
toString
๋ฉ์๋๋ฅผ ํธ์ถํด ์ป๋ ๋ฌธ์์ด๋ก, ๋ณดํต์ ์์ธ์ ํด๋์ค ์ด๋ฆ ๋ค์ ์์ธ ๋ฉ์์ง๊ฐ ๋ถ๋ ํํ.
- ์คํ ์ถ์ ์ ์์ธ ๊ฐ์ฒด์
- ์คํจ ์๊ฐ์ ํฌ์ฐฉํ๋ ค๋ฉด ๋ฐ์ํ ์์ธ์ ๊ด์ฌ๋ ๋ชจ๋ ๋งค๊ฐ๋ณ์์ ํ๋์ ๊ฐ์ ์คํจ ๋ฉ์์ง์ ๋ด์์ผ ํจ.
- ex)
IndexOutOfBoundsException
์ ์์ธ ๋ฉ์์ง๋ ๋ฒ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ด์์ผ ํจ. - but, ์์ธ ๋ฉ์์ง์ ๋น๋ฐ๋ฒํธ๋ ์ํธ ํค ๊ฐ์ ์ ๋ณด๊น์ง ๋ด์์๋ ์ ๋จ.
- ex)
- ์์ธ์ ์์ธ ๋ฉ์์ง์ ์ต์ข
์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํผ๋ํด์๋ ์ ๋จ.
- ์ต์ข ์ฌ์ฉ์์๊ฒ๋ ์น์ ํ ๋ฉ์์ง๋ก ์์ฑ, ์์ธ ๋ฉ์ธ์ง๋ ์ฃผ ์๋น์ธต์ด ํ๋ก๊ทธ๋๋จธ์์ ๊ณ ๋ คํ์ฌ ์์ฑ.
- ์์ธ๋ ์คํจ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ์ ์ ํ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์.
๐ก ๊ฐ๋ฅํ ํ ์คํจ ์์์ ์ผ๋ก ๋ง๋ค๋ผ
โ๋ฉ์๋ ๋ช ์ธ์ ๊ธฐ์ ํ ์์ธ๋ผ๋ฉด ์คํน ์์ธ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๊ฐ์ฒด์ ์ํ๋
๋ฉ์๋ ํธ์ถ ์ ๊ณผ ๋๊ฐ์ด ์ ์ง๋ผ์ผ ํ๋ค๋ ๊ฒ์ด ๊ธฐ๋ณธ ๊ท์นโ
1. ์คํจ ์์์ ์ด๋?
- ์คํจ ์์์ (failure-atomic) : ํธ์ถ๋ ๋ฉ์๋๊ฐ ์คํจํ๋๋ผ๋ ํด๋น ๊ฐ์ฒด๋ ๋ฉ์๋ ํธ์ถ ์ ์ํ๋ฅผ ์ ์งํด์ผ ํจ.
- ์คํจ ์์์ ์ด๋ผ๋ฉด ์์ ๋์ค ์์ธ๊ฐ ๋ฐ์ํด๋ ๊ทธ ๊ฐ์ฒด๋ ์ฌ์ ํ ์ ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ํ์.
- ์คํจ ์์์ ์ผ๋ก ๋ง๋ค ์ ์๋ค๋ฉด ์คํจ ์์ ๊ฐ์ฒด ์ํ๋ฅผ API ์ค๋ช ์ ๋ช ์ํด์ผ ํจ.
2. ์คํจ ์์์ ์ ์ป๋ ๋ฐฉ๋ฒ
- ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณ
- ๋ถ๋ณ ๊ฐ์ฒด๋ ํ์์ ์ผ๋ก ์คํจ ์์์ ์.
- ๋ฉ์๋๊ฐ ์คํจํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง์ง๋ ์์ ์ ์์ผ๋ ๊ธฐ์กด ๊ฐ์ฒด๊ฐ ๋ถ์์ ํ ์ํ์ ๋น ์ง๋ ์ผ์ ๊ฒฐ์ฝ ์์. โ ๋ถ๋ณ ๊ฐ์ฒด์ ์ํ๋ ์์ฑ ์์ ์ ๊ณ ์ ๋์ด ์ ๋ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ
- ์์
์ํ์ ์์ ๋งค๊ฐ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ฌ
- ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ ์ ์ ์ฌ์ ์์ธ์ ๊ฐ๋ฅ์ฑ์ ๋๋ถ๋ถ ๊ฑธ๋ฌ๋ผ ์ ์๋ ๋ฐฉ๋ฒ
- ๋น์ทํ ์ทจ์ง๋ก ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ชจ๋ ์ฝ๋๋ฅผ, ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฐ๊พธ๋ ์ฝ๋๋ณด๋ค ์์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ๋ ์์
- ๊ฐ์ฒด์ ์์ ๋ณต์ฌ๋ณธ์์ ์์
์ ์ํํ ๋ค์, ์์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด ์๋ ๊ฐ์ฒด์ ๊ต์ฒด
- ๋ฐ์ดํฐ๋ฅผ ์์ ์๋ฃ๊ตฌ์กฐ์ ์ ์ฅํด ์์ ํ๋ ๊ฒ ๋ ๋น ๋ฅผ ๋ ์ ์ฉํ๊ธฐ ์ข์ ๋ฐฉ์.
- ์์
๋์ค ๋ฐ์ํ๋ ์คํจ๋ฅผ ๊ฐ๋ก์ฑ๋ ๋ณต๊ตฌ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์
์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ
- ์ฃผ๋ก (๋์คํฌ ๊ธฐ๋ฐ์) ๋ด๊ตฌ์ฑ(durability)์ ๋ณด์ฅํด์ผ ํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ฐ์.
๐ก ์์ธ๋ฅผ ๋ฌด์ํ์ง ๋ง๋ผ
โ
catch
๋ธ๋ก์ ๋น์๋์ง ๋ง์โ
- ์์ธ๋ ๋ฌธ์ ์ํฉ์ ์ ๋์ฒํ๊ธฐ ์ํด ์กด์ฌํ๋๋ฐ,
catch
๋ธ๋ก์ ๋น์๋๋ฉด ์์ธ๊ฐ ์กด์ฌํ ์ด์ ๊ฐ ์์ด์ง.- ๋น์ ํ์๋ฉด ํ์ฌ๊ฒฝ๋ณด๋ฅผ ๋ฌด์ํ๋ ์์ค์ ๋์ด ์์ ๊บผ๋ฒ๋ ค, ๋ค๋ฅธ ๋๊ตฌ๋ ํ์ฌ๊ฐ ๋ฐ์ํ์์ ์์ง ๋ชปํ๊ฒ ํ๋ ๊ฒ๊ณผ ๊ฐ์.
- ์์ธ๋ฅผ ๋ฌด์ํ๊ธฐ๋ก ํ๋ค๋ฉด
catch
๋ธ๋ก ์์ ๊ทธ๋ ๊ฒ ๊ฒฐ์ ํ ์ด์ ๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ธฐ๊ณ ์์ธ ๋ณ์์ ์ด๋ฆ๋ignored
๋ก ๋ฐ๊ฟ๋๋๋ก ํ์. - ์์ธกํ ์ ์๋ ์์ธ ์ํฉ์ด๋ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ , ๋น
catch
๋ธ๋ก์ผ๋ก ๋ชป ๋ณธ ์ฒ ์ง๋์น๋ฉด ๊ทธ ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๋ฅผ ๋ด์ฌํ ์ฑ ๋์ํ๊ฒ ๋จ.
โ ๋ฌด์ํ์ง ์๊ณ ๋ฐ๊นฅ์ผ๋ก ์ ํ๋๊ฒ๋ง ๋๋ฌ๋ ์ต์ํ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ๋จ๊ธด ์ฑ ํ๋ก๊ทธ๋จ์ด ์ ์ํ ์ค๋จ๋๊ฒ๋ ํ ์ ์๋ค
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐จ๐ปโ๐ป ์ดํํฐ๋ธ ์๋ฐ - ์์ธ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@cekim/์ดํํฐ๋ธ-์๋ฐ-์์ธ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค