์์ธ(Exception)
์๋ฐ์์ ์์ธ(Exception)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ํ ์ ์๋ ์์์น ๋ชปํ ์ํฉ ๋๋ ์ค๋ฅ๋ฅผ ๋ํ๋ ๋๋ค.
์ด๋ฌํ ์์ธ๋ ํ๋ก๊ทธ๋จ ์คํ ๋์ค ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
Throwable
์ต์์ ์์ธ , ์์ธ(Exception)์ ์๋ฌ(Error)๋ฅผ ๋ชจ๋ ํฌํจํ๋ ํด๋์ค์ ๋๋ค.
์๋ฌ(Error)
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด๋ ์ฌ๊ฐํ ์์คํ ์ค๋ฅ์ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์์คํ ์์ธ์ด๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ์ด ์์ธ๋ฅผ ์ก์ผ๋ ค๊ณ ํด์๋ ์๋๋ค.
์์ธ(Exception)
์์ธ๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ข ๋ฅ๋ก ๋๋๋ฉฐ, ๊ฐ๊ฐ checked ์์ธ์ unchecked ์์ธ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
Checked ์์ธ๋ RuntimeException ํด๋์ค๋ฅผ ์์ํ์ง ์๋ ์์ธ์ ๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ฏ๋ก, ํด๋น ์์ธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ํ์ ์ธ Checked ์์ธ๋ก๋ IOException, ClassNotFoundException ๋ฑ์ด ์์ต๋๋ค.
Unchecked ์์ธ๋ RuntimeException ํด๋์ค๋ฅผ ์์ํ๋ ์์ธ์ ๋๋ค.
Checked ์์ธ์ ๋ฌ๋ฆฌ ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ผ๋ฏ๋ก, ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ํ์ ์ธ Unchecked ์์ธ๋ก๋ NullPointerException, ArrayIndexOutOfBoundsException ๋ฑ์ด ์์ต๋๋ค.
์์ธ ๊ธฐ๋ณธ ๊ท์น
์์ธ๋ ํญํ ๋๋ฆฌ๊ธฐ์ ๊ฐ๋ค.
์ก์์ ์ฒ๋ฆฌํ๊ฑฐ๋, ์ฒ๋ฆฌํ ์ ์์ผ๋ฉด ๋ฐ์ผ๋ก ๋์ ธ์ผํ๋ค.
Exception ์ catch ๋ก ์ก์
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
'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 |