자바에서는 Error와 Exception을 구분한다.
오류(Error)는 숙명과도 같은 것이다. 애초에 문법이 잘못되어서 컴파일부터 오류가 발생할 수도 있고, 우리가 만든 자바 애플리케이션이 동작하는 환경에서 무언가 문제가 생겨서 발생할 수도 있다. 예를 들어 메모리가 부족하다든지, 운영체제가 문제가 생겨 프로그램이 정지됐다든지 등의 경우가 있다.
예외(Exception)는 우리가 짠 코드가 우리가 의도한 것과는 다른 상황에 직면했을 때를 지칭하는 것이다. 가령, 파일을 읽으려 했는데 파일이 없다거나, 예상하지 못한 값을 사용자가 입력했을 때 등이 있다.
개발자는 어떤 기능을 하는 코드를 의도를 가지고 만들게 되는데, 모든 사람이 그 의도에 맞춰서 행동하는 것은 불가능하기 때문에 그 예외 케이스에 대해 처리하는 코드를 작성해주어야 한다.
바로 이 예상하지 못했던 예외적인 상황을 처리하는 테크닉이 예외(Exception)이다.
public class ExceptionApp2 {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2/0); // Run-Time Exception ArithmeticException
System.out.println(3);
}
}
가령 위 코드와 같이, 2를 0으로 나누려 하면 문제가 발생한다. ArithmeticException이 뜨는 것이다. 이렇게 예외적인 상황이 발생되면 거기서 프로그램이 멈추면서 어떤 Exception이 발생했는지 우리에게 알려준다. 그러면 끝의 3은 출력(실행)될 기회를 잃어버리게 된다. 이것이 바로 예외적 상황이 발생했을 때 자바가 동작하는 기본적인 모습이다.
만약에 예상하지 못했던 예외가 발생했는데, 그때의 그 예외에 대한 에러만 출력해주고 나머지 실행을 계속한다면 그것은 굉장히 심각한 문제가 될 수 있다. 어떤 문제가 있을 때, 그 문제로 인해서 시스템이 뻗어버리면 그 문제가 마지막 상태이기 때문에 우리가 해결해야 할 대상이 정확해진다. 그런데 그냥 어영부영 계속 실행이 되면 나중에 정말 심각한 문제가 생기고, 그런 문제는 해결하기도 어려워지는 경우가 다반사이다.
그래서 예외가 발생했을 때 프로그램이 뻗는 것이 우리의 의도였다면, 그것은 잘못된 것이 아니다.
[참고자료]
https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
Lesson: Exceptions (The Java™ Tutorials > Essential Java Classes)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated
docs.oracle.com
https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html
What Is an Exception? (The Java™ Tutorials > Essential Java Classes > Exceptions)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated
docs.oracle.com
'Language > Java' 카테고리의 다른 글
예외의 우선순위 (0) | 2022.11.26 |
---|---|
예외 처리 (Exception Handling) (0) | 2022.11.26 |
다형성 (Polymorphism) (0) | 2022.11.20 |
인터페이스 (Interface) (0) | 2022.11.20 |
상속과 생성자 (0) | 2022.11.14 |