오류의 종류
오류 | 구문오류 | 치명적이지 않은 오류 |
논리오류 | 치명적인 오류(실행은 되나 원하는 값이 나오지 않는것) | |
예외 | 누군가만, 어떤 컴퓨터만, 어떤 상황에서만 예외 적으로 발생하는 오류 |
예외처리한다는 것이란?
- 프로그램에서 데이터를 보낼 때 그것을 처리하는 애를 API라고 보자.
- 그럼 API가 프로그램에서 필요한 부분을 처리하기 위해 처리하는 과정에서 자신이 처리 할 수 없는 데이터나 문제가 생기면 어떻게 된다는 것일까?
- API가 혼자서 처리할 수 있으면 좋겠지만 그것은 불가능하여 다시 프로그램에게 보고를 하기 위한 방식으로 처리 한다는 것이 예외처리이다.
- API가 프로그램에게 오류를 보내는 것을 공을 던진다하고 표현한다.
- 프로그램에서는 try catch 문을 이용하여 처리한다.
예외처리 흐름
- 먼저 클래스에서 흐름을 읽기 위한 코드를 작성하였다.
- 위의 코드를 보면 메서드 자체를 static 메모리에 올려서 수를 받는 대로 계산을 할 수 있는 프로그램을 작성했는데, 거기서1000이상이 되는 수를 메서드가 받았을 때, 메서드는 천을_넘는_예외라고 공을 main에게 던졌다.
- 그럼 메인은 catch구문에서 그러한 예외를 참조변수 e 로 변환하여 천을_넘는_예외 class에 있는 문자를 보여준다. 아래의 그림을 보고 정리를 해보자
다중 예외처리
- Calculation class에는 현재 2개의 예외처리 공을 던지게 해두었다.
- 첫 번째는 천이 넘는수, 두 번째는 음수가 되는 수
- 아래 코드를 보면 천이_넘는_예외는 catch 구문으로 잡아서 특화된 처리라고 메세지를 보낸다
- 그러면 나머지 하나는 어디로 가는 것인가?
- 그것은 예외처리 최고조상 Exception으로 가게 된다. (음수는 자동적으로 음수 처리 메세지를 보여준다)
- finally는 예외가 발생했을 때 무조건 거쳐가는 톨게이트라고 생각하면 쉽다.
- 최종적으로 예외가 발생하면 catch문에 있는 메세지 출력 >> finally에 있는 메세지 출력으로 마무리된다.
public class Program {
public static void main(String[] args) {
// Calculator cal = new Calculator();
int result = 0;
try {
result = Calculator.add(3, 4);
System.out.printf("add : %d \n", result);
result = Calculator.sub(3, 4);
} catch (천을_넘는_예외 e) {
System.out.println("특화된 처리");
} catch (Exception e) {
System.out.println("음수 처리");
} finally {
System.out.println("입력값에 오류가 있습니다.");
}
System.out.printf("sub : %d \n", result);
result = Calculator.mul(3, 4);
System.out.printf("mul : %d \n", result);
result = Calculator.div(3, 4);
System.out.printf("div : %d \n", result);
}
}
Checked, Unchecked 예외
- 예외처리를 할 필요 없는 것을 unchecked예외라고 한다.
- 강제하려고 하는 부분이 있다면 checked, 강조하지 않아도 된다고 보면 unchecked를 이용하면 된다.
- checked >> uncecked로 변경하는 방법은 exception class에 가서 Runtime을 추가하면 된다.
'Language > Java' 카테고리의 다른 글
Chapter 14. 스트림(stream) (0) | 2022.11.30 |
---|---|
Chaper 14. 람다식 (0) | 2022.11.30 |
컬렉션(Collection)과 제네릭(Generic) (2) (0) | 2022.11.28 |
컬렉션(Collection)과 제네릭(Generic) (1) (0) | 2022.11.28 |
Chapter6. 객체지향 프로그래밍 I (0) | 2022.11.22 |