1. 예외(Exception)
- 프로그램 실행 중 예상하지 못한 상황이 발생하는 것
- 예외를 의도적으로 발생할 수 있음(throw 키워드 사용)
- 예외처리 하지 않으면 프로그램이 중단되므로 try-catch를 통해 예외처리를 해야함
2. RuntimeException(UncheckedException)
- 컴파일러가 예외 처리를 강제하지 않음
- 컴파일 오류가 발생하지 않고 처리되지 않은 예외를 시작지점 까지 전파하여 처리 되지 않을 시 프로그램을 종료함
- RuntimeException 을 상속받는 모든 예외를 UncheckedException 이라고 함
public class ExceptionPractice {
public void callUncheckedException() {
if (true) {
System.out.println("언체크 예외 발생");
throw new RuntimeException();
}
}
}
public class Main {
public static void main(String[] args) {
ExceptionPractice exceptionPractice = new ExceptionPractice();
exceptionPractice.callUncheckedException();
System.out.println("이 줄은 실행되지 않습니다.");
}
}
public class Main {
public static void main(String[] args) {
ExceptionPractice exceptionPractice = new ExceptionPractice();
try {
exceptionPractice.callUncheckedException();
} catch (RuntimeException e) {
System.out.println("언체크 예외 처리");
} catch (Exception e) {
System.out.println("체크 예외 처리");
}
System.out.println("프로그램 종료");
}
}
3. CheckedException
- 컴파일러가 예외 처리를 강제하는 예외(컴파일 오류가 발생함)
- 반드시 try-catch로 예외처리 하거나 throw 키워드를 사용해야 함
public class ExceptionPractice {
public void callCheckedException() {
try {
if (true) {
System.out.println("체크예외 발생");
throw new Exception();
}
} catch (Exception e) {
System.out.println("예외 처리");
}
}
}
public class Main {
public static void main(String[] args) {
ExceptionPractice exceptionPractice = new ExceptionPractice();
exceptionPractice.callCheckedException();
}
}
- throws 를 통해 예외를 호출한 곳으로 예외처리를 전가 할 수 있다.
public class ExceptionPractice {
public void callCheckedException() throws Exception {
if (true) {
System.out.println("체크예외 발생");
throw new Exception();
}
}
}
public class Main {
public static void main(String[] args) {
ExceptionPractice exceptionPractice = new ExceptionPractice();
try {
exceptionPractice.callCheckedException();
} catch (Exception e) {
System.out.println("예외처리");
}
}
}
4. 마무리
- 예외 처리는 필수
- CheckedException은 컴파일러를 통해 알 수 있다.
- UncheckedException은 개발자가 예측 가능하고 방지할 수 있는 경우 사용한다.(모든 예외 상황을 강제로 처리 할 경우 코드가 불필요하게 많아 질 수 있어 생산성이 떨어진다.)