자바 예외 처리의 기본
Exception
사용자에 의해 발생하는 실수를 예외 (Exception)라 정의 한다.
예외 처리
사용자가 기대하지 않았던 액션을 취했을 때, 프로그래머가 해결하는 것을 예외 처리라 한다.
예외 상황의 예
예외 상황을 알리기 위한 클래스
try ~ catch
JVM(자바 가상 머신)
은 예외 발생 시
별도의 예외 처리
를 수행
한다.
예외 발생 시
해당 예외 클래스
를 생성
해 예외 발생 지점에 해당 Instnace의 참조 값 전달.
예외 처리가 완료
되면 다음 흐름을 수행
한다.
- 예외 처리를 위한 코드를 별도로 구분하기 위해 디자인된 예외 처리 매커니즘 -> try~catch
- 위에 있는 catch ~ 아래 있는 catch순으로 진행 한다.
try {
} catch(Exception e){
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
Throwable Class
Throwable Class
모든 예외 클래스의
최상위 클래스
: 물론 Throwable도 Object를 상속
한다.
- 모든 예외 Class는 Throwable Class를 상속한다.
Method
- public String getMessage() : 예외의 원인을 담고 있는
문자열을 반환
.
- public void printStackTrace() : 예외가
발생한 위치
와 호출된 Method의 정보를 출력
.
예외의 전달
예외의 전달
- 예외 발생 지점에서 예외를 처리하지 않으면 해당 Method를 호출한 영역으로 예외가 전달된다.
- 위 상황에서는 JVM에게 해당 예외를 전달 해준다.
예외 Class의 종류
ArrayIndexOutOfBoundsException
- 배열의 인덱스 범위를 넘을 시 발생하는 예외.
ClassCassException
- 부모 클래스의 Instance를 자식 Class의 Instance로 참조 하려 할 시 발생하는 예외.
NullPointerException
- 출력하는 데이터가 Null일 시 발생하는 예외.
예외 처리의 나머지 설명
예외 클래스의 구분
Error Class를 상속하는 예외 Class
VirtualMachineError
IOError
- 입출력 관련해서 코드 수준 복구가 불가능한 오류 발생.
예외 상황과 상관없이, 심각한 오류를 의미하는 Class를 의미함
.
Exception Class를 상속하는 예외 Class [진정한 예외 Class라 할 수 있다.]
java.io.IOException
- 입출력 관련 예외 상황을 표현하는 예외 Class
RuntimeException Class를 상속하는 예외 Class
- ArithmeticException
- ClassCastException
- IndexOutOfBoundsException
- NegativeArraySizeException
- NullPointerException
- ArrayStoreException
코드 오류로 발생하는 경우가 대부분, 따라서 위 유형의 예외 발생 시 코드의 수정을 고려해야 한다
.
Exception을 상속하는 예외의 예
Exception을 상속하는 예외 Class는 반드시 예외 처리를 해줘야 한다.
- try~catch
- throws IOException
- public void simpelWrite() throws 예외1, 예외2 {}
프로그래머가 정의하는 예외 클래스
예외 정의
- Exception Class를 extends(상속) 하면 예외 정의 완료.
- super("에러 메시지를 이곳에 입력 하면 됩니다.");
예외 처리 메커니즘을 구동하는 명령어
- throw new ReadAgeException(); // 예외 발생 정의
흐름 정리
- 예외 발생을 시킬 Class는 extends Exception을 통해 정의 된다.
- 후에 throw new Exception Class Name(); 를 선언해 예외 발생.
Finally
Finally
- try 영역으로 들어온 후 예외 발생 여부와 상관 없이 finally 안의 내용은 무조건 실행이 된다.
- try ~ catch영역 이 수행 된 후, 반드시 수행 되어야 하는 구문을 넣어주는 영역이다.
운영체제 입장에서 JVM
JVM
- 운영체제의 관점에서는 JVM 그냥 프로그램의 하나.
- O/S (운영체제)가 일반 프로그램에게 4G의 메모리 공간을 할당 해준다면, JVM에게도 똑같이 할당.
- 하나의 JVM은 하나의 Java Program을 실행 시킨다.
JVM Memory Model
JVM Memory Model [메모리 공간 활용의 효율성을 높이기 위해 영역 세분화]
Method 영역 [프로그램이 종료 될 때까지 저장]
- Method의 바이트 코드, static 변수.
- JVM에 의해 compile된 .class 파일이 올라가는 영역.
- Class 정보를 JVM이 읽는 동시에, static 변수 존재 시 Method 영역에 올린다.
- 한번 할당이 되면 프로그램이 종료될 때까지 메모리 공간에서 내려갈 필요가 없는 데이터를 넣는다.
Stack 영역 [임시 저장]
Heap 영역
- Instance.
- heap영역에 존재하는 Instance는 가비지 컬렉션의 대상이 되어 관리 된다.
- Instance는 또 다른 참조 변수를 통해 참조가 될 수 있기 때문에, heap영역에 저장이 된다.
- 즉 함부로 지우면 안되는 데이터 이기에 heap영역에 따로 관리한다.