1. 에러(Error)와 예외(Exception)
# 자바 언어를 사용하여 개발한 프로그램에서 발생할 수 있는 오류는 그 종류에 따라서 크게 에러(Error)와 예외(Exception)로 구분된다.
1) 에러(Error): 프로그램이 더 이상 동작할 수 없는 심각한 오류
2) 예외(Exception): 프로그램 실행 도중 오류가 발생했지만 동작을 계속 수행할 수 있는 오류
3) 에러가 발생하면 대개 JVM 프로세스 자체가 죽어버려 심각한 상황을 맞이할 수 있다.
그와 반대로 예외는 프로그램 실행 중에 오류가 발생했지만 치명적이지는 않기 때문에 잘못된 결과가 나오거나 결과값을 반환하지 못하는 정도뿐이다.
하지만 예외가 누적된다면 이도 프로세스가 죽는 상황을 맞이할 수 있다.
4) 에러에 대해서는 프로그램에서 처리(handling)하지 않고, 예외에 대해서만 처리하며 이를 예외 처리(Exception Handling)라고 부르게 되는 것이다.
2. Throwable 클래스
1) 계층도
- 오류와 관련된 모든 에러와 예외 클래스들은 java.lang 패키지에 속해 있다.
- 오류 관련 클래스들은 기본적으로 Object 클래스를 상속 받는다.
- 모든 예외 클래스의 부모 클래스는 Throwable 클래스이다.
- Throwable 클래스를 상속받은 클래스만이 try-catch-finally 구문을 사용하여 예외 처리를 실행할 수 있다.
- Throwable 클래스를 상속 받는 클래스는 오직 Exception과 Error 클래스 뿐이다.
* 다수의 클래스들이 Exception 클래스를 상속받는 구조
2) Throwable = Throw(던지다) + able(할 수 있는)
- Throwable 클래스를 상속받은 자식 클래스들만이 JVM에게 예외 객체로 던져질 수 있으며 예외 처리될 수 있다.
- Throwable 클래스를 상속받은 클래스만이 throw 구문에서 사용 가능하다.
- 오류 객체를 만들기만 해서는 예외 처리를 할 수 없고, JVM으로 던질 수 있어야 오류 추적 및 오류 감지를 통하여 try-catch 구문을 사용할 수 있기 때문이다.
5) throws Exception
(1) throws 키워드가 붙는 클래스에는 Exception에 대한 예외처리를 반드시 해야한다.
# 예외 처리를 하지 않은 경우
6) FileReader 클래스의 예외 처리 의무화
(1) FileReader 클래스에 대한 예외처리는 반드시 해야한다.
* ctrl + shift + z, 예외처리 또는 Surround with try/catch 선택
(2) FileReader 클래스의 메소드까지도 예외처리를 의무화 해야 한다.
3. 스택(Stack)
# 배열과 같은 자료의 집합을 의미하며, 예외 처리 및 예외 추적에 필요한 자료구조 알고리즘이다.
1) LIFO(Last In First Out): 가장 마지막에 들어온 것(입력)이 가장 먼저 나가는(출력) 형태
* Pop: 스택에서 자료를 빼는 과정
* Push: 자료를 넣는 과정
* Top: 자료들 중 가장 위에 존재하는 객체
2) 스택 메모리 영역에서는 메모리를 관리하기 위해서 스택 알고리즘을 사용한다.
- JVM 스택 메모리 영역은 '메소드의 호출과 반환값' 에 정보를 저장하는 역할을 한다.
- 스택 프레임에는 매개변수, 지역 변수 그리고 반환값 등의 메소드 정보가 저장된다.
- 메소드가 정상적으로 실행 완료되면 JVM의 스택 메모리 영역에서 삭제된다.
4. Exception 클래스
- Exception 클래스는 부모 클래스인 Throwable 클래스와 Object 클래스로부터 상속받은 메소드와 속성 외에는 따로 선언되어 있는 것이 없다.
- 예외 처리에서 주로 많이 사용되는 예외 클래스들은 Exception 클래스의 자식 클래스들이다.
- 예외 관련된 클래스들은 대부분 자신 클래스에 새로운 메소드(자신에게 새로운 클래스)를 선언하는 것보다
상속받은 메소드를 그대로 사용하거나 오버라이딩해서 사용하는 것이 일반적이다.
1) Exception 자식 클래스 1: RuntimeException
- RuntimeException은 JVM에서 연산 혹은 논리 작업을 할 때 발생할 수 있는 예외를 의미한다.
* Unchecked Exception: try-catch 구문으로 예외 처리를 하지 않아도 자동으로 예외 처리
* Checked Exception: RuntimeException과 그 자식 클래스들을 제외한 에외 클래스들은 반드시 try-catch 구문으로 처리해야한다.
2) Exception 자식 클래스 2: IOException
- IOException은 Input/Output 관련 작업을 처리할 때 발생하는 예외 상황
- 파일을 생성하고 어떤 데이터를 쓰거나(Output) 읽을 때(Input) 발생한다.
- IOException은 주로 JVM 외부의 원인에 의해서 발생한다.
- 미디어(Media)에 데이터를 읽거나 쓸 때 발생하는 예외 상황
3) Exception 자식 클래스 3: 그 외의 예외 클래스들
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day05 | Up-Casting, Down-Casting, 다형성(Polymorphism) (0) | 2018.01.17 |
---|---|
JAVA2_day05 | 패키지(Package), Object (0) | 2018.01.17 |
JAVA2_day04 | 예외처리 (Exception Handling) (0) | 2018.01.16 |
JAVA2_day03 | 상속 연습문제 (Pen) (0) | 2018.01.12 |
JAVA2_day03 | 인터페이스 (Interface) (0) | 2018.01.12 |