Java Exception
๐ฟ ๋ชฉ์ฐจ
- ์๋ฐ์์ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ (try, catch, throw, throws, finally)
- ์๋ฐ๊ฐ ์ ๊ณตํ๋ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ
- Exception๊ณผ Error์ ์ฐจ์ด๋?
- RuntimeException๊ณผ RE๊ฐ ์๋ ๊ฒ์ ์ฐจ์ด๋?
- ์ปค์คํ ํ ์์ธ ๋ง๋๋ ๋ฐฉ๋ฒ
์์ธ(Exception)์ ์๋ฌ(Error)
- ๋ฐ์์์
- ์ปดํ์ผ ์๋ฌ
- ๋ฐํ์ ์๋ฌ
- ๋ฐ์ ์์ธ
- ๋ ผ๋ฆฌ์ ์๋ฌ
- ์์คํ ์๋ฌ
์๋ฌ: ํ๋์จ์ด์ ์ค์๋์ผ๋ก ์คํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ์คํ ์ค๋ฒํ๋ก์ฐ ๋ฑ๊ณผ ๊ฐ์ด ๋ฐ์ํ๋ฉด ๋ณต๊ตฌํ ์ ์๋ ์ค๋ฅ
- ๋ฐ์ํ๋๋ผ๋ ์์ต๋ ์ ์๋ ๋น๊ต์ ๋ ์ฌ๊ฐ
- ์ฆ ์๋ฌ๋ JVM ์คํ์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ด๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ๋์ฒํ๊ธฐ ์ด๋ ค์
์์ธ: ์ฌ์ฉ์์ ์๋ชป๋ ์กฐ์ ํน์ ๊ฐ๋ฐ์์ ์๋ชป๋ ์ฝ๋ฉ์ผ๋ก ๋ฐ์ํ๋ ํ๋ก๊ทธ๋จ ์ค๋ฅ
- ์์ธ๋ ๋ฐ์๋๋ฉด ํ๋ก๊ทธ๋จ์ ๋ฐ๋ก ์ข
๋ฃ๋๋ค๋ ์ ์์๋ ์๋ฌ์ ๋์ผ
- ์์ธ๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ์ง ์๊ณ ์ ์ ์คํ ์ํ๋ฅผ ์ ์งํ ์ ์์
๐ฟ ์๋ฌ์ ์ข ๋ฅ
๋ชจ๋ ์์ธ ํด๋์ค๋ java.lang.Exception์ ์์ ๋ฐ๋๋ค.
- ์ผ๋ฐ ์์ธ(์ปดํ์ผ๋ฌ ์๋ฌ): ์๋ฐ ์์ค๋ฅผ ์ปดํ์ผ ํ๋ ๊ณผ์ ์์ ์๊ธด ์๋ฌ
- ์คํ ์์ธ(๋ฐํ์ ์๋ฌ): ํด๋์ค ํ์ผ์ ์คํ์ํค๋ ๊ณผ์ ์์ ์๊ธด ์๋ฌ
๐ฟ ์์ธ์ ์ข ๋ฅ
- ์ฒดํฌ ์์ธ: RuntimeException์ ์์ํ์ง ์์ ์์ธ
- ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ฝ๋๋ฅผ ํจ๊ป ์์ฑํด์ผ ํจ
- IOException, SQLException ๋ฑ๋ฑ
- ์ธ์ฒดํฌ ์์ธ: RuntimeException์ ์์ํ ์์ธ
- ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ๊ฐ์ ํ์ง ์์
- ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ๋ ผ๋ฆฌ ์ค๋ฅ๊ฐ ์์ ๋ ๋ฐ์ํ๋๋ก ์๋๋ ๊ฒ
์์ธ ์ฒ๋ฆฌ
try-catch
1
2
3
4
5
6
7
8
9
try {
// ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋
} catch (Exception1 e1) { // Exception์ ์์๋ฐ๋ ์ฐธ์กฐ ๋ณ์
// Exception1์ด ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฝ๋
} catch (Exception2 e2) {
// Exception2๊ฐ ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฝ๋
} catch (ExceptionN eN) {
// ExceptionN์ด ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฝ๋
}
- ๋ฐ์ํ ์์ธ์ ์ผ์นํ๋ ๋จ ํ๊ฐ์ catch ๋ธ๋ญ๋ง ์คํ
- catch ๋ธ๋ญ ์์ ์ฐธ์กฐ ๋ณ์์ ์ด๋ฆ์ด ์ค๋ณต๋๋ ์๋๋ค.
throw
๊ณ ์๋ก ์์ธ๋ฅผ ๋ฐ์์ํค๋ ํค์๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ExceptionDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("์์ด๋๋ฅผ ์
๋ ฅํ์ธ์");
String userName = scanner.nextLine();
try {
if (userName.equals("๋ฐ๋ณด")) {
throw new IllegalArgumentException("๋ถ์ ์ ํ ์ด๋ฆ์
๋๋ค.");
}
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
1
2
3
void method() throws Exception1, Exception2, ... ExceptionN {
// ๋ฉ์๋ ๋ด์ฉ
}
finally
1
2
3
4
5
6
7
try {
// ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฌธ์ฅ์ ๋ฃ๋๋ค.
} catch {
// ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฌธ์ฅ์ ๋ฃ๋๋ค.
} finally {
// ์์ธ ๋ฐ์ ์ฌ๋ถ์ ์๊ด์์ด ํญ์ ์คํ๋์ด์ผ ํ ๋ฌธ์ฅ์ ๋ฃ๋๋ค.
}
- finally ๋ธ๋ก ๋ด์ ๋ฌธ์ฅ์ try, catch ๋ธ๋ก์ return๋ฌธ์ด ์๋๋ผ๋ ์คํ๋จ
๐ฟ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ
- Checked Exception: ์ปดํ์ผ ์์ ์์ ํ์ธ ํ ์ ์๋ ์์ธ
- ๋ฐ๋์ ์ฒ๋ฆฌ ํน์ ๋ฉ์๋ ์ ์ธ๋ถ์ ์์ธ ์ ์ธ์ ํด์ฃผ์ด์ผ ํ๋ค.
- UnChkeced Exception: ์๊ทธ๋ฐ ์์ธ
- RuntimeException๊ณผ ๊ทธ ํ์ ํด๋์ค, Error
์ฌ์ฉ์ ์ ์ Exception
Exception ํด๋์ค๋ฅผ ์์
1
2
3
4
5
class SpaceException extends Exception {
public SpaceException(String message) {
super(message); // ์กฐ์ ํด๋์ค์ธ Exception์ ์์ฑ์ ํธ์ถ
}
}
๐ฟ ์์ธ์ฒ๋ฆฌ
์์ธ ๋ณต๊ตฌ
์์ธ์ํฉ์ ํ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ ์ ์ ์ํ๋ก ๋๋ ค๋๋ ๊ฒ
- IOException์ด ๋ฐ์ํ๋ค๋ฉด, ์ฌ์ฉ์์๊ฒ ์ํฉ์ ์๋ ค์ฃผ๊ณ ๋ค๋ฅธ ํ์ผ์ ์ด์ฉํ๋๋ก ์๋ดํด์ ์์ธ์ํฉ ํด๊ฒฐ ๊ฐ๋ฅ(์ฒซ๋ฒ์งธ ํ์ผ์ ์๋๋๋ก ํด๋๊ณ )
- ์๊ฒฉ DB ์๋ฒ์ ์ ์ํ๋ค ์คํจํ์ ๊ฒฝ์ฐ MAX_RETRY ๋งํผ ์ฌ์๋ ํ๋ ๊ฒ(์คํจ ์ ๋ฆฌ์์ค ๋ฐ๋ฉ, ์ ๋ฆฌ ์์ ์ ํด์ผ ํ๋ค.)
์์ธ์ฒ๋ฆฌ ํํผ
์์ธ์ฒ๋ฆฌ๋ฅผ ์์ ์ด ๋ด๋นํ์ง ์๊ณ ์์ ์ ํธ์ถํ ์ชฝ์ผ๋ก ๋์ ธ๋ฒ๋ฆฌ๋ ๊ฒ
- throw ๋ฌธ์ผ๋ก ์ ์ธํด์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์์ ๋์ ธ์ง๊ฒ ํ๊ฑฐ๋
- catch ๋ฌธ์ผ๋ก ์ผ๋จ ์์ธ๋ฅผ ์ก์ ํ์ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ๋ค์ ์์ธ๋ฅผ ๋์ง๋ ๊ฒ
- ์์ธ ์ฒ๋ฆฌ๋ฅผ ํํผํ๋ ค๋ฉด ๋ฐ๋์ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋์ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ผ ํจ
์์ธ ์ ํ
์์ธ ํํผ์ ๋น์ทํ๊ฒ ์์ธ๋ฅผ ๋ณต๊ตฌํด์ ์ ์์ ์ธ ์ํ๋ก๋ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์์ธ๋ฅผ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋จ์ง๋ ๊ฒ
- ๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ๋๊ธฐ๋ ๊ฒ์ด ์๋ ์ ์ ํ ์์ธ๋ก ์ ํํด์ ๋์ง๋ค๋ ํน์ง์ด ์์
- ๋ณดํต ์ ํํ๋ ์์ธ์ ๋ฐ์ํ ์์ธ๋ฅผ ๋ด์์ ์ค์ฒฉ ์์ธ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์
- ๋ชฉ์
- ๋ด๋ถ์์ ๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ๋์ง๋ ๊ฒ์ด ๊ทธ ์์ธ์ํฉ์ ๋ํ ์ ์ ํ ์๋ฏธ๋ฅผ ๋ถ์ฌํด์ฃผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
- ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๊ณ ๋จ์ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํฌ์ฅํ๊ธฐ ์ํด์
- ์ฃผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ์ฒดํฌ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ ๋ ์ธ์ฒดํฌ ์์ธ์ธ ๋ฐํ์ ์์ธ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ