์๋ก
์ต๊ทผ์ ์๋ฐ์์ Checked Exception๊ณผ Unchecked Exception์ ์ฐจ์ด๊ฐ ๋ฌด์์ด๋๋ ์ง๋ฌธ์ ๋ฐ์์๋๋ฐ, ์ ํ ๋ชฐ๋์ด์ ์ ๋ฆฌ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค. ๋จผ์ ๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
"RuntimeException์ ์์ํ์ง ์๋ ํด๋์ค๋ Checked Exception, ์์ํ ํด๋์ค๋ Unchecked Exception"
๋ชฉ์ฐจ
- Error์ Exception ์ฐจ์ด
- ์์ธ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋
- ์ RuntimeException์ ์์ํ๋ฉด UnChecked Exception์ผ๊น?
Error์ Exception ์ฐจ์ด
ํ๋ก๊ทธ๋จ์ด ์คํ ์ค ์ด๋ค ์์ธ์ ์ํด์ ์ค์๋์ ํ๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ ์์ธ์ ํ๋ก๊ทธ๋จ ์๋ฌ ๋๋ ์ค๋ฅ๋ผ๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฐ์ ์์ ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด ์ธ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- ์ปดํ์ผ ์๋ฌ: ์ปดํ์ผ ์์ ๋ฐ์ํ๋ ์๋ฌ
- ๋ฐํ์ ์๋ฌ: ์คํ ์์ ๋ฐ์ํ๋ ์๋ฌ
- ๋ ผ๋ฆฌ์ ์๋ฌ: ์คํ์ ๋์ง๋ง, ์๋์ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ
๊ธ์ ๊ทธ๋๋ก ์ปดํ์ผ ์๋ฌ๋ ์ปดํ์ผํ ๋ ๋ฐ์ํ๋ ์๋ฌ์ด๊ณ , ํ๋ก๊ทธ๋จ์ ์คํ ๋์ค์ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ๋ฐํ์ ์๋ฌ๋ผ๊ณ ํฉ๋๋ค. ๋ ผ๋ฆฌ์ ์๋ฌ๋ ์ปดํ์ผ๋ ์๋๊ณ ์คํ๋ ์๋์ง๋ง ๊ฐ๋ฐ์๊ฐ ์๋ํ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ex) ์ฐฝ๊ณ ์ ์ฌ๊ณ ๊ฐ ์์๊ฐ ๋๊ฑฐ๋, ๊ฒ์ ํ๋ก๊ทธ๋จ์์ ๋นํ๊ธฐ๊ฐ ์ด์์ ๋ง์๋ ์ฃฝ์ง ์๋ ๊ฒฝ์ฐ
์ฌ๊ธฐ์ ๋ฐํ์ ์๋ฌ์ ์ง์คํ์๋ฉด ๋๋๋ฐ, ์๋ฐ์์๋ ์คํ ์(runtime) ๋ฐ์ํ ์ ์๋ ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๋ฅผ '์๋ฌ(Error)'์ '์์ธ(Exception)'๋ก ๊ตฌ๋ถํ์ต๋๋ค.
- ์์ธ(Exception): ์ ๋ ฅ ๊ฐ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋, ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ฐธ์กฐ๋ ๊ฐ์ด ์๋ชป๋ ๊ฒฝ์ฐ ๋ฑ ์ ์์ ์ธ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ด๊ธ๋๋ ๊ฒ
- ์๋ฌ(Error): OutOfMemoryError, StackOverflowError์ ๊ฐ์ด ๋ฐ์ํ๋ฉด ๋ณต๊ตฌํ ์ ์๋ ์ฌ๊ฐํ ์ค๋ฅ
์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก๊ทธ๋จ์ ๋น์ ์์ ์ธ ์ข ๋ฃ๋ฅผ ๋ง์ ๊ธธ์ด ์์ง๋ง, ์์ธ๋ ๋ฐ์ํ๋๋ผ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด์ ๋ํ ์ ์ ํ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด ๋์์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ๋น์ ์์ ์ธ ์ข ๋ฃ๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
์์ธ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ
๋ชจ๋ ํด๋์ค์ ์กฐ์์ Object ํด๋์ค์ด๋ฏ๋ก Exception๊ณผ Errorํด๋์ค ์ญ์ Object ํด๋์ค์ ์์๋ค์ ๋๋ค. ๋ชจ๋ ์์ธ์ ์ต๊ณ ์กฐ์์ Exceptionํด๋์ค์ด๋ฉฐ, ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๊ตฌ๋ถ ์ง์ต๋๋ค.
- RuntimeException์ ์์๋ค์ ์ ์ธํ Exception๊ณผ ๊ทธ ์์๋ค
- RuntimeExceptionํด๋์ค์ ๊ทธ ์์๋ค
์ RuntimeException์ ์์ํ๋ฉด UnChecked Exception์ผ๊น?
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ RuntimeException์ ์์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋์ง ๊ถ๊ธํ ๊ฒ์ ๋๋ค. ํ๋ฒ ์ฝ๋ ์์๋ฅผ ๋ค์ด ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
class Exception {
public static void main(String[] args) {
throw new Exception();
}
}
๋จผ์ ์ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์ปดํ์ผํ๋ฉด, java: unreported exception java.lang.Exception; must be caught or declared to be thrown ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ ์ปดํ์ผ์ด ์๋ฃ๋์ง ์์ต๋๋ค. ์์ธ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ ๋ถ๋ถ์ ์์ธ์ฒ๋ฆฌ๊ฐ ๋์ด ์์ง ์๋ค๋ ์๋ฌ์ ๋๋ค.
์ฆ, ์์ ์์ธ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋์์ ์ฒซ๋ฒ์งธ์ ํด๋นํ๋ 'RuntimeException์ ์์๋ค์ ์ ์ธํ Exception๊ณผ ๊ทธ ์์๋ค'์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ์ ์ํด์๋ try-catch๋ฅผ ํตํด์ Exception์ ํธ๋ค๋งํด์ฃผ์ด์ผ ํฉ๋๋ค.
class Exception {
public static void main(String[] args) {
throw new RuntimeException();
}
}
ํ์ง๋ง ์ ์ฝ๋๋ ์ด๋จ๊น์? ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ์ด์ ์ ์ฝ๋์๋ ๋ฌ๋ฆฌ ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผ์ด ์ํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์คํํ๋ฉด, Exception in thread "main" java.lang.RuntimeExceptionat test.Exception.main ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉฐ ๋น์ ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ฉ๋๋ค.
์ ์ฝ๋๊ฐ ๋ช ๋ฐฑํ RuntimeException์ ๋ฐ์ํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ์ฑ๊ณต์ ์ผ๋ก ์ปดํ์ผ๋ ๊ฒ์ ๋๋ค. ์๋ฐ์์๋ RuntimeExceptionํด๋์ค์ ๊ทธ ์์๋ค์ ํด๋นํ๋ ์์ธ๋ ํ๋ก๊ทธ๋๋จธ์ ์ํ ์ค์๋ก ๋ฐ์ํ๋ ๊ฒ๋ค์ด๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Unchecked Excetpion์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
๋๊ธ