[์Šคํ”„๋ง DB 1ํŽธ] - 12. ์˜ˆ์™ธ(Exception)์˜ ์ดํ•ด / ์ฒดํฌ,์–ธ์ฒดํฌ ์˜ˆ์™ธ

2023. 3. 29. 17:27ยทSpring/Spring DB

 

์˜ˆ์™ธ(Exception)

 

์ž๋ฐ”์—์„œ ์˜ˆ์™ธ(Exception)๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์˜ˆ์™ธ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐœ์ƒ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์™ธ ๊ณ„์ธต

Throwable

์ตœ์ƒ์œ„ ์˜ˆ์™ธ , ์˜ˆ์™ธ(Exception)์™€ ์—๋Ÿฌ(Error)๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. 

 

 ์—๋Ÿฌ(Error)

 ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์ด๋‚˜ ์‹ฌ๊ฐํ•œ ์‹œ์Šคํ…œ ์˜ค๋ฅ˜์™€ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ์˜ˆ์™ธ์ด๋‹ค.

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋Š” ์ด ์˜ˆ์™ธ๋ฅผ ์žก์œผ๋ ค๊ณ  ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

 

 

์˜ˆ์™ธ(Exception)

์˜ˆ์™ธ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰˜๋ฉฐ, ๊ฐ๊ฐ checked ์˜ˆ์™ธ์™€ unchecked ์˜ˆ์™ธ๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

 

 

Checked ์˜ˆ์™ธ๋Š” RuntimeException ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜๋ฏ€๋กœ, ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ Checked ์˜ˆ์™ธ๋กœ๋Š” IOException, ClassNotFoundException ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Unchecked ์˜ˆ์™ธ๋Š” RuntimeException ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

Checked ์˜ˆ์™ธ์™€ ๋‹ฌ๋ฆฌ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ Unchecked ์˜ˆ์™ธ๋กœ๋Š” NullPointerException, ArrayIndexOutOfBoundsException ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

์˜ˆ์™ธ ๊ธฐ๋ณธ ๊ทœ์น™

 

์˜ˆ์™ธ๋Š” ํญํƒ„ ๋Œ๋ฆฌ๊ธฐ์™€ ๊ฐ™๋‹ค.

 

์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋ฐ–์œผ๋กœ ๋˜์ ธ์•ผํ•œ๋‹ค.

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ catch

 Exception ์„ catch ๋กœ ์žก์Œ 

 

์˜ˆ์™ธ ๋˜์ง throws

 

 Exception ์„ throws ๋กœ ๋˜์ง 

 

 

2๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ทœ์น™

1. ์˜ˆ์™ธ๋Š” ์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋˜์ ธ์•ผ ํ•œ๋‹ค.


2.
์˜ˆ์™ธ๋ฅผ ์žก๊ฑฐ๋‚˜ ๋˜์งˆ ๋•Œ ์ง€์ •ํ•œ ์˜ˆ์™ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์˜ˆ์™ธ์˜ ์ž์‹๋“ค๋„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ Exception ์„ catch ๋กœ ์žก์œผ๋ฉด ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค๋„ ๋ชจ๋‘ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ Exception ์„ throws ๋กœ ๋˜์ง€๋ฉด ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค๋„ ๋ชจ๋‘ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฐธ๊ณ : ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ๋˜์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
์ž๋ฐ” main() ์“ฐ๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด์„œ ์‹œ์Šคํ…œ์ด ์ข…๋ฃŒ๋œ๋‹ค.
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์˜ˆ์™ธ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์ด ์ข…๋ฃŒ๋˜๋ฉด ์•ˆ๋œ๋‹ค.

WAS๊ฐ€ ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์ฃผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ, ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

 

 

์ฒดํฌ ์˜ˆ์™ธ ๊ธฐ๋ณธ ์ดํ•ด

 

Exception ๊ณผ ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋Š” ๋ชจ๋‘ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฒดํฌํ•˜๋Š” ์ฒดํฌ ์˜ˆ์™ธ์ด๋‹ค.

public class CheckedTest {
    static class MyCheckedException extends Exception {
        public MyCheckedException(String message) {
            super(message);
        }
    }

 

MyCheckedException ๋Š” Exception ์„ ์ƒ์†๋ฐ›์•˜๋‹ค.

 

Exception ์„ ์ƒ์†๋ฐ›์œผ๋ฉด ์ฒดํฌ ์˜ˆ์™ธ๊ฐ€ ๋œ๋‹ค.

 

 

 

throws

์˜ˆ์™ธ๋ฅผ ๋ฐ–์œผ๋กœ ๋˜์ง

 

์˜ˆ์™ธ๋Š” ์žก๊ฑฐ๋‚˜ ๋˜์ ธ์•ผ ํ•œ๋‹ค. 

 

์ฒดํฌ ์˜ˆ์™ธ์˜ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” throws ๋ฅผ ์ง€์ •ํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐ–์œผ๋กœ ๋˜์ง„๋‹ค๋Š” ์„ ์–ธ์„ ํ•„์ˆ˜๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

์ฒดํฌ ์˜ˆ์™ธ๋ฅผ ๋ฐ–์œผ๋กœ ๋˜์ง€์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

static class Repository {
    public void call() throws MyCheckedException {
        throw new MyCheckedException("ex");
    }
}

 

์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์„ " throws MyCheckedException " ์„ ์„ ์–ธ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

throws ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

catch

์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์ฒ˜๋ฆฌ

/**
 * ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ
 */
public void callCatch() {
    try {
        repository.call();
    } catch (MyCheckedException e) {
        //์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋กœ์ง
        log.info("์˜ˆ์™ธ ์ฒ˜๋ฆฌ, message={}", e.getMessage(), e);
    }
}

 

Repository.call() ์—์„œ MycheckedException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ ,

 

๊ทธ ์˜ˆ์™ธ๋ฅผ Service.callCatch() ์—์„œ ์žก๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

Test ์ฝ”๋“œ

 

catch

@Test
void checked_catch() {
    Service service = new Service();
    service.callCatch();
}

 

throws

@Test
void checked_throw() {
    Service service = new Service();
    Assertions.assertThrows(MyCheckedException.class , () -> {
        service.callThrow();
    });
}

 

 

junit5์˜ assertThrows ์‚ฌ์šฉ

 

@Test
void checked_throw() {
    Service service = new Service();
    assertThatThrownBy(() -> service.callThrow())
            .isInstanceOf(MyCheckedException.class);
}

 

assertj์˜ assertThatThrownBy ์‚ฌ์šฉ

 

 

 

์–ธ์ฒดํฌ ์˜ˆ์™ธ ๊ธฐ๋ณธ ์ดํ•ด

 

RuntimeException ๊ณผ ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋Š” ์–ธ์ฒดํฌ ์˜ˆ์™ธ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

 

/**
 * RuntimeException ์„ ์ƒ์†๋ฐ›์€ ์˜ˆ์™ธ๋Š” ์–ธ์ฒดํฌ ์˜ˆ์™ธ๊ฐ€ ๋œ๋‹ค.
 */
static class MyUncheckedException extends RuntimeException {
    public MyUncheckedException(String message) {
        super(message);
    }
}


์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค.

 

์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” throws ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ , ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.

 

 

์ฒดํฌ ์˜ˆ์™ธ

 

์ฒดํฌ ์˜ˆ์™ธ์—์„œ๋Š” throws ๋ฅผ ์ง€์ •ํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐ–์œผ๋กœ ๋˜์ง„๋‹ค๋Š” ์„ ์–ธ์„ ํ•„์ˆ˜๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

์–ธ์ฒดํฌ ์˜ˆ์™ธ

 

์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ์ฒดํฌ ์˜ˆ์™ธ์™€ ๋‹ค๋ฅด๊ฒŒ throws ์˜ˆ์™ธ ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard

 

์Šคํ”„๋ง DB 1ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ•ต์‹ฌ ์›๋ฆฌ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ DB ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ ์˜ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜

www.inflearn.com

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Spring > Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ  (0) 2023.03.30
[์Šคํ”„๋ง DB 1ํŽธ] - 13. ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ(๋Ÿฐํƒ€์ž„) ์˜ˆ์™ธ ํ™œ์šฉ  (0) 2023.03.29
[์Šคํ”„๋ง DB 1ํŽธ] - 11. ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์ž๋™ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก  (0) 2023.03.25
[์Šคํ”„๋ง DB 1ํŽธ] - 10. ํŠธ๋žœ์žญ์…˜ AOP / @Transactional  (0) 2023.03.25
[์Šคํ”„๋ง DB 1ํŽธ] - 9. ํŠธ๋žœ์žญ์…˜ ํ…œํ”Œ๋ฆฟ  (0) 2023.03.25
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง DB 1ํŽธ] - 14. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • [์Šคํ”„๋ง DB 1ํŽธ] - 13. ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ(๋Ÿฐํƒ€์ž„) ์˜ˆ์™ธ ํ™œ์šฉ
  • [์Šคํ”„๋ง DB 1ํŽธ] - 11. ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์ž๋™ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก
  • [์Šคํ”„๋ง DB 1ํŽธ] - 10. ํŠธ๋žœ์žญ์…˜ AOP / @Transactional
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง DB 1ํŽธ] - 12. ์˜ˆ์™ธ(Exception)์˜ ์ดํ•ด / ์ฒดํฌ,์–ธ์ฒดํฌ ์˜ˆ์™ธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”