Posts Java Exception
Post
Cancel

Java Exception

Java Exception


๐Ÿ’ฟ ๋ชฉ์ฐจ

  • ์ž๋ฐ”์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• (try, catch, throw, throws, finally)
  • ์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ๊ณ„์ธต ๊ตฌ์กฐ
  • Exception๊ณผ Error์˜ ์ฐจ์ด๋Š”?
  • RuntimeException๊ณผ RE๊ฐ€ ์•„๋‹Œ ๊ฒƒ์˜ ์ฐจ์ด๋Š”?
  • ์ปค์Šคํ…€ํ•œ ์˜ˆ์™ธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์˜ˆ์™ธ(Exception)์™€ ์—๋Ÿฌ(Error)

  • ๋ฐœ์ƒ์‹œ์ 
    • ์ปดํŒŒ์ผ ์—๋Ÿฌ
    • ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ
  • ๋ฐœ์ƒ ์›์ธ
    • ๋…ผ๋ฆฌ์  ์—๋Ÿฌ
    • ์‹œ์Šคํ…œ ์—๋Ÿฌ

์—๋Ÿฌ: ํ•˜๋“œ์›จ์–ด์˜ ์˜ค์ž‘๋™์œผ๋กœ ์‹คํ–‰ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ

  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ, ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜
  • ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ˆ˜์Šต๋  ์ˆ˜ ์žˆ๋Š” ๋น„๊ต์  ๋œ ์‹ฌ๊ฐ
  • ์ฆ‰ ์—๋Ÿฌ๋Š” JVM ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์–ด๋ ค์›€

์˜ˆ์™ธ: ์‚ฌ์šฉ์ž์˜ ์ž˜๋ชป๋œ ์กฐ์ž‘ ํ˜น์€ ๊ฐœ๋ฐœ์ž์˜ ์ž˜๋ชป๋œ ์ฝ”๋”ฉ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜

  • ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ”๋กœ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ์—์„œ๋Š” ์—๋Ÿฌ์™€ ๋™์ผ
    • ์˜ˆ์™ธ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ •์ƒ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ฟ ์—๋Ÿฌ์˜ ์ข…๋ฅ˜

๋ชจ๋“  ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” java.lang.Exception์„ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

image

  • ์ผ๋ฐ˜ ์˜ˆ์™ธ(์ปดํŒŒ์ผ๋Ÿฌ ์—๋Ÿฌ): ์ž๋ฐ” ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ธด ์—๋Ÿฌ
  • ์‹คํ–‰ ์˜ˆ์™ธ(๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ): ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ธด ์—๋Ÿฌ

๐Ÿ’ฟ ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜

  • ์ฒดํฌ ์˜ˆ์™ธ: 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๋ฌธ์ด ์žˆ๋”๋ผ๋„ ์‹คํ–‰๋จ

๐Ÿ’ฟ ์˜ˆ์™ธ ๊ณ„์ธต ๊ตฌ์กฐ

image

  • 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 ๋ฌธ์œผ๋กœ ์ผ๋‹จ ์˜ˆ์™ธ๋ฅผ ์žก์€ ํ›„์— ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋‹ค์‹œ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํšŒํ”ผํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•จ

์˜ˆ์™ธ ์ „ํ™˜

์˜ˆ์™ธ ํšŒํ”ผ์™€ ๋น„์Šทํ•˜๊ฒŒ ์˜ˆ์™ธ๋ฅผ ๋ณต๊ตฌํ•ด์„œ ์ •์ƒ์ ์ธ ์ƒํƒœ๋กœ๋Š” ๋งŒ๋“ค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋ฅผ ๋ฉ”์„œ๋“œ ๋ฐ–์œผ๋กœ ๋‹จ์ง€๋Š” ๊ฒƒ

  • ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ ์ ˆํ•œ ์˜ˆ์™ธ๋กœ ์ „ํ™˜ํ•ด์„œ ๋˜์ง„๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Œ
  • ๋ณดํ†ต ์ „ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ์— ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๋‹ด์•„์„œ ์ค‘์ฒฉ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Œ
  • ๋ชฉ์ 
    • ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋˜์ง€๋Š” ๊ฒƒ์ด ๊ทธ ์˜ˆ์™ธ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•ด์ฃผ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ
    • ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํฌ์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ
      • ์ฃผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜๋Š” ์ฒดํฌ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์„ ๋•Œ ์–ธ์ฒดํฌ ์˜ˆ์™ธ์ธ ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ
This post is licensed under CC BY 4.0 by the author.

Spring Security

Spring-Web