๐Ÿ›‘ ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ํŠน์ง• (Exception)

 

1. Error

java.lang.Error ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ์‹œ์Šคํ…œ์— ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
์ฃผ๋กœ ์ž๋ฐ” VM์—์„œ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ ๋Œ€์‘ํ•  ์ˆ˜ ์—†๋‹ค. e.g. OutOfMemoryError, ThreadDeath

2. Exception

java.lang.Exception ํด๋ž˜์Šค์™€ ๊ทธ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์˜ˆ์™ธ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
Exception Class๋Š” ๋‹ค์‹œ ์ฒดํฌ ์˜ˆ์™ธ์™€ ์–ธ์ฒดํฌ ์˜ˆ์™ธ๋กœ ๋‚˜๋‰œ๋‹ค.

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

Exception ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด๋ฉด์„œ RuntimeException์„ ์ƒ์†ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์ด๋‹ค.
์ฒดํฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ(try~catch, throws)๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

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

Exception ํด๋ž˜์Šค์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด๋ฉด์„œ RuntimeException์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ด๋‹ค.
์ž๋ฐ”๋Š” RuntimeException๊ณผ ๊ทธ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๐Ÿ’ŽํŠน๋ณ„ํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•œ๋‹ค.
์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ช…์‹œ์ ์ธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. e.g. NullPointException, IllegalArgumentException

3. ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

3.1 ์˜ˆ์™ธ ๋ณต๊ตฌ

int maxAttempts = MAXIMUM_ATTEMPTS;
while(maxAttemptsโ€”- > 0) {
    try {
        // ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ ์ฝ”๋“œโ€ฆ
        return;
    } catch(Exception e) {
        // ๋กœ๊ทธ ์ถœ๋ ฅ ๋ฐ ์ •ํ•ด์ง„ ์‹œ๊ฐ„๋งŒํผ ๋Œ€๊ธฐ
    } finally {
        // ๋ฆฌ์†Œ์Šค ๋ฐ˜๋‚ฉ ๋ฐ ์ •๋ฆฌ
    }
}

3.2 ์˜ˆ์™ธ ํšŒํ”ผ

  1. ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ๋˜์ง€๊ธฐ๐Ÿคพ
    public void add() throw SQLException {
     // JDBC API
    }
    
  2. ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ๋˜์ง€๊ธฐ๐Ÿคพโ€โ™€๏ธ
    public void add() throw SQLException {
     try {
         // JDBC API
     } catch(SQLException e) {
         // ๋กœ๊ทธ ์ถœ๋ ฅ
         throw e;
     }
    }
    

3.3 ์˜ˆ์™ธ ์ „ํ™˜

  1. ์˜ˆ์™ธ ์ „ํ™˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ
    public void add(User user) throws DuplicateUserIdException, SQLException {
     try {
     // JDBC๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ DB์— ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง
     } catch(SQLException e) {
         if(e.getErrorCode == MysqlErrorNumbers.ER_DUP_ENTRY)
             throw DuplicateUserIdException();
         else
             throw e;
     }
    }
    
    • ์ค‘์ฒฉ ์˜ˆ์™ธ1
       catch(Exception e) {
        // โ€ฆ
        throw DuplicateUserIdException(e);
      
    • ์ค‘์ฒฉ ์˜ˆ์™ธ2
       catch(Exception e) {
        // โ€ฆ
        throw DuplicateUserIdException().initCause(e);