JAVA를 잡아라!...

JAVA_14_예외 처리 본문

JAVA/JAVA_멘토씨리즈

JAVA_14_예외 처리

onivv 2024. 1. 13. 10:17

#1 예외 처리

▶ 에러(error)

  • 해결할 수 없는 시스템에 에러가 발생해 프로그램이 종료된 경우
  • 시스템에 비정상적인 상황이 생겼을 때 발생
  • 개발자가 예측하거나 처리할 수 없는 영역
  • < 종류 >
    • OutOfMemoryError : 프로그램 실행 중 메모리 부족
    • IOError : 입출력 에러
    • StackOverFlowError : 가용 메모리 부족 현상, 재귀 호출 문제 시 발생

▶ 예외(exception)

  • 프로그램 사용 중 발생한 오류를 개발자가 처리해 메시지가 출력된 경우
  • 프로그램 구동 중에 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고 정상 동작할 수 있도록 처리하는 과정
구분 체크 예외 비체크 예외
처리 여부 문법적으로 예외 처리를 강제함
반드시 처리 해야 함
문법적으로 강제하지 않음
개발자의 판단에 의해 처리
확인 시점 컴파일 단계 실행 단계
예외 클래스 Runtime Exception을 제외한 모든 예외
IOException
SQLException
Runtime Exception의 자식 클래스 모두 포함
NullPointerException
IndexOutOfBoundException
ClassNotFoundException

 

#2 예외 클래스

▶ NullPointerException

  • 객체를 선언하면 인스턴스는 객체의 주소를 가지게 되고, 그것을 통해 객체에 접근해 값을 가져옴
  • 객체는 정의되었는데 실제 메모리에 생성되지 않았을 경우 예외가 발생

▶ NumberFormatException

  • 잘못된 문자열을 숫자로 형 변환할 때 발생
  • ex) 숫자형태의 문자열은 정수 타입으로 변환oo, 문자가 포함되거나 실수 형태의 문자열은 변환xx

▶ ArrayIndexOutofBoundsException

  • 배열에서 index 범위를 초과해 사용할 때 발생

 

#3 예외 처리 문법

▶ 예외 처리 과정

  • 예외가 발생하면 시스템(JVM)에서 분석하여 예외 클래스 중 알맞은 것을 발생시키고 발생 지점으로 감
  • 이를 처리하지 않으면 프로그램은 비정상 종료됨
  • 그래서 넘어온 예외를 처리해 프로그램을 비정상 종료되지 않고, 구동할 수 있도록 해야함

try-catch 구문

try {
	// 예외가 발생할 가능성이 있는 코드
} catch(예외 클래스명 e) {
	// 예외 처리 코드
}
  • 코드 진행   →   오류!       JVM 예외 객체 발생       catch 확인
  • try {...} 안에 예외가 발생할 가능성이 있는 코드 작성
  • catch메서드는 시스템으로부터 넘어오는 예외 클래스를 받아서 처리
  •  Exception
    • 모든 예외 클래스의 최상위 객체이기 때문에 catch에서 사용하면 모든 예외 처리 가능
    • 단, 다중 catch문 사용시, 상위 예외 클래스를 처리하는 코드는 catch문 맨 마지막에 작성
  • 다중 catch : 예외별로 예외 처리 코드를 다르게 하여 다양한 예외 처리 가능
try {
	// 예외가 발생할 가능성이 있는 코드1
	// 예외가 발생할 가능성이 있는 코드2
} catch(예외 클래스1 e) {
} catch(예외 클래스2 e) {
}

 

finally

  • 예외 처리를 할 때, 예외와 상관없이 반드시 처리해야 하는 로직을 작성
  • 보통 외부 연동이나 예외가 발생해도 정상 종료되어야 할 구문들에서 사용

 

#4 예외 던지기

▶ throws 키워드

  • 메서드에서 발생하는 예외를 직접 처리하지 않고 호출된 곳에서 처리하도록 할 수 있음
  • 메서드 뒤에 throws예외 클래스를 붙여서 처리
  •  

'JAVA > JAVA_멘토씨리즈' 카테고리의 다른 글

JAVA_16_컬렉션 프레임워크  (0) 2024.01.14
JAVA_15_기본 API 클래스  (0) 2024.01.14
JAVA_13_내부 클래스  (0) 2024.01.07
JAVA_12_추상 클래스 & 인터페이스  (0) 2024.01.07
JAVA_11_다형성 & 타입 변환  (0) 2024.01.07