์๋ฐ๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ํ๋ก๊ทธ๋จ ์คํ ์ค ์์ธ(Exception)๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ต๊ทผ
์์ธ ์ฒ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ๋ ์์ ์ ์ผ๋ก ๊ตฌํํ ์ ์์์ง ๊ณ ๋ฏผํ๋ ์ค, Checked Exception๊ณผ Unchecked Exception์ ์ฐจ์ด๋ฅผ ๋ค์๊ธ ์ ๋ฆฌํด๋ณด๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์๋ฐ์ ์์ธ ์ฒ๋ฆฌ ๊ฐ๋
๊ณผ ํ์ฉ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
์์ธ(Exception)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ํ๋ ์์์น ๋ชปํ ์ค๋ฅ๋ฅผ ์๋ฏธํฉ๋๋ค. ์์ธ๊ฐ ์ ์ ํ ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
์๋ฐ์ ์์ธ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค:
1. Checked Exception (๊ฒ์ฌ ์์ธ) โ ๋ฐ๋์ ์ฒ๋ฆฌํด์ผ ํ๋ ์์ธ
2. Unchecked Exception (๋น๊ฒ์ฌ ์์ธ) โ ์ฒ๋ฆฌํ์ง ์์๋ ์ปดํ์ผ์ด ๊ฐ๋ฅํ ์์ธ
๋ํ, Error
์ Exception
์ ์ฐจ์ด๋ ์์๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Error
๋ ์์คํ
๋ ๋ฒจ์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ฉด Exception
์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฒ๋ฆฌํ์ฌ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ๋์ํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
Checked Exception์ ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ์์ธ์
๋๋ค. ์ฆ, ์์ธ๋ฅผ try-catch
๋ก ๊ฐ์ธ๊ฑฐ๋ throws
๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ์์๊ฒ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋๊ฒจ์ผ ํฉ๋๋ค.
์ฃผ๋ก ์ธ๋ถ ํ๊ฒฝ๊ณผ์ ์ํธ์์ฉ์์ ๋ฐ์ํ๋ฉฐ, ํ์ผ ์ ์ถ๋ ฅ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋คํธ์ํฌ ํต์ ๋ฑ์ ์์ ์์ ๋ณผ ์ ์์ต๋๋ค.
IOException
โ ํ์ผ ์
์ถ๋ ฅ ๊ด๋ จ ์ค๋ฅSQLException
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ์ค ๋ฐ์ํ๋ ์ค๋ฅClassNotFoundException
โ ํด๋์ค ํ์ผ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐIOException
์ฒ๋ฆฌ)import java.io.*;
public class FileReaderExample {
public void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader reader = new BufferedReader(file);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
}
}
throws IOException
์ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํธ์ถํ๋ ๋ฉ์๋๋ก ์์ํ๊ณ ์์ต๋๋ค.
Unchecked Exception์ ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๋ ์์ธ์ ๋๋ค. ๋๋ถ๋ถ ํ๋ก๊ทธ๋๋จธ์ ์ค์๋ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ํ๋ก๊ทธ๋จ ์คํ ์ค(Runtime) ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์ด๋ฌํ ์์ธ๋ค์ ๋๋ถ๋ถ RuntimeException
์ ์์๋ฐ์ผ๋ฉฐ, ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ์ปดํ์ผ์ด ๋์ง๋ง ์คํ ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
NullPointerException
โ null
๊ฐ์ ์ฐธ์กฐํ ๋ ๋ฐ์ArrayIndexOutOfBoundsException
โ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ด๊ณผํ์ฌ ์ ๊ทผํ ๋ ๋ฐ์IllegalArgumentException
โ ์๋ชป๋ ์ธ์๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ ๋ ๋ฐ์NullPointerException
์ฒ๋ฆฌpublic class NullPointerExample {
public void printLength(String str) {
if (str == null) {
throw new NullPointerException("๋ฌธ์์ด์ด null์
๋๋ค!");
}
System.out.println(str.length());
}
}
๋ฌธ์์ด์ด
null
์ผ ๊ฒฝ์ฐNullPointerException
์ด ๋ฐ์ํ๋ฏ๋ก, ์ฌ์ ์ ์ฒดํฌํ์ฌ ์์ธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๊ตฌ๋ถ | Checked Exception | Unchecked Exception |
---|---|---|
ํ์ธ ์์ | ์ปดํ์ผ ์์ | ์คํ ์์ (Runtime) |
์์ธ ์ฒ๋ฆฌ ์ฌ๋ถ | ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌํด์ผ ํจ | ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์ง ์์ |
๋ฐ์ ์์ธ | ํ์ผ I/O, DB ์ฐ๊ฒฐ ๋ฑ ์ธ๋ถ ์์ | ํ๋ก๊ทธ๋๋จธ์ ์ค์, ๋ ผ๋ฆฌ์ ์ค๋ฅ |
๋ํ์ ์ธ ์์ธ | IOException , SQLException | NullPointerException , IndexOutOfBoundsException |
๊ธฐ๋ณธ ์ ๊ณต๋๋ ์์ธ๋ง์ผ๋ก๋ ์๋ฏธ๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฌํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ด ๋ ์ฌ์ฉ์ ์ ์ ์์ธ(Custom Exception)๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
class InvalidAgeException extends Exception {
public InvalidAgeException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public void checkAge(int age) throws InvalidAgeException {
if (age < 18) {
throw new InvalidAgeException("18์ธ ์ด์๋ง ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.");
}
}
}
InvalidAgeException
์ ๋ง๋ค์ด ํน์ ๋ก์ง(์: ์ฐ๋ น ์ ํ)์์ ํ์ฉํ ์ ์์ต๋๋ค.
Exception
์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ง๊ณ , ์๋ฏธ์ ๋ง๋ ์์ธ๋ฅผ ์ฌ์ฉํ์ธ์.try-catch
๋ฅผ ๋จ์ฉํ์ง ๋ง๋ผ โ ๋ถํ์ํ try-catch
๋ธ๋ก์ ๋จ๋ฐํ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.์๋ฐ์ ์์ธ ์ฒ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ์์์ ๋๋ค. Checked Exception๊ณผ Unchecked Exception์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ , ์ํฉ์ ๋ง๊ฒ ์ ์ ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด ๋์ฑ ์์ ์ ์ธ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ด์ ์ฌ๋ฌ๋ถ๋ ํจ์จ์ ์ธ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ์์ ์ ์ธ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด ๋ณด์ธ์! ๐
ํ๊ทธ: Java, Exception Handling, Checked Exception, Unchecked Exception, Custom Exception