[Java] 예외란?

YoungMinKim·2020년 11월 8일
0
post-thumbnail

자바 예외 처리의 기본

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영역에 따로 관리한다.
profile
https://ym1085.github.io

0개의 댓글