리꾸므

[JAVA] Exception Handing(feat. try - catch) 본문

발걸음/일지

[JAVA] Exception Handing(feat. try - catch)

리꾸므 2022. 11. 10. 16:59

 

Exception Handing

프로그램의 비정상적인 종료를 방지하고 정상적인 실행 상태를 유지하기 위한 코드

  • 에러는 크게 내부적인 요인과 외부적인 요인으로 구분 가능
  • 에러는 발생 시점에 따라 컴파일 에러와 런타임 에러로 구분

 

 컴파일 에러

  컴파일 할떄 발생하는 에러

  • 세미콜론 생략, 오탈자, 잘못된 자료형, 잘못된 포맷 등 문법적인 문제를 가리키는 신택스 오류로부터 발생

 런타임 에러

  프로그램이 실행될때, 즉 런타임 시에 발생하는 에러

  • 주로 개발자가 컴퓨터가 수행할 수 없는 특정한 작접을 요청할때 발생
  • 프로그램이 실행될때 자바 가상 머신(JVM)에 의해 감지

 에러와 예외

  • 에러 : 한번 발생하면 복구하기 어려운 수준의 심각한 오류를 의미, 대표적으로 메모리 부족과 스택오버플로우 등이 있다.
  • 예외 : 잘못된 사용 또는 코딩으로 인한 상대적으로 미약한 수준의 오류로서 코드 수정 드을 통해 수습이 가능한 오류

 일반 예외 클래스(Exception)

  런타임시 발생하는 'RuntimeException' 클래스와 그 하위클래스를 제외한 모든 'Excetion'클래스와 그 하위 클래스를 말한다.

  • 코드 실행전 예외 처리 코드 여부를 검사한다하여 cheked 예외라고 부르기도 한다.
  • 주로 잘못된 클래스명이나 데이터 형식등 사용자편의 실수로 발생한다.

 실행 예외 클래스(Runtime Exception)

  런타임 시 발생하는 'RuntimeException'클래스와 그 하위클래스를 지칭한다.

  • 컴파일러가 예외 처리 코드 여부를 검사하지 않는다는 의미에서 unchecked 예외라고 하기도 한다.
  • 주로 개발자의 실수에 의해 발생, 자바 문법요소와 관련이 있다.
  • 클래스 간 형변화 오류, 벗어난 배열 범위지정, 값이 null인 참조 변수 사용 등이 있다.

 

try - catch문

try {
    // 예외가 발생할 가능성이 있는 코드를 삽입
} 
catch (ExceptionType1 e1) {
    // ExceptionType1 유형의 예외 발생 시 실행할 코드
} 
catch (ExceptionType2 e2) {
    // ExceptionType2 유형의 예외 발생 시 실행할 코드
} 
finally {
    // finally 블럭은 옵셔널
    // 예외 발생 여부와 상관없이 항상 실행
}
  • 자바에서 예외 처리는 'try-catch'블럭을 통해 구현이 가능하다.
    1. 먼저 'try' 블럭 안에 예외 발생할 가능성이 있는 코드 삽입
    2. 정상 실행시 'catch' 블럭은 실행되지 않고 'finally' 블럭이 실행
  • 'finally' 블럭은 옵션으로 필수적으로 포함되지 않아도 되지만 포함되는 경우 예외 발생 여부 상관없이 항상 실행된다.
  • 'catch'블럭은 예외 발생하는 경우 실행되는 코드, 여러 종류의 예외를 처리 할 수 있다.

 

예외 전가

예외를 호출한 곳으로 다시 예외를 넘기는 방법

반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
	...생략...
}

/

void Example() throws Exception {
}
  • 'throws' 키워드를 사용하여 해당 예외를 발생한 메서드 안에서 처리하지 않고 메서드를 호출한 곳으로 떠넘긴다.
  • 'throw' 키워드를 사용하여 의도적으로 예외를 만들 수 있다.

'발걸음 > 일지' 카테고리의 다른 글

[JAVA] 애너테이션  (0) 2022.11.14
[JAVA]컬렉션 프레임워크  (0) 2022.11.10
[JAVA] Generic  (0) 2022.11.10
[JAVA] Enum(열거형)  (0) 2022.11.10
[JAVA] 객체지향 프로그래밍 심화(feat. 추상화)  (0) 2022.11.08