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 ์์ธ ํํผ
- ํธ์ถํ ์ชฝ์ผ๋ก ๋์ง๊ธฐ๐คพ
public void add() throw SQLException { // JDBC API }
- ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ํธ์ถํ ์ชฝ์ผ๋ก ๋์ง๊ธฐ๐คพโโ๏ธ
public void add() throw SQLException { try { // JDBC API } catch(SQLException e) { // ๋ก๊ทธ ์ถ๋ ฅ throw e; } }
3.3 ์์ธ ์ ํ
- ์์ธ ์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ฉ์๋
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);
- ์ค์ฒฉ ์์ธ1