컬렉션_예외처리

김예인·2023년 5월 6일

백엔드 공부일지

목록 보기
16/43
post-thumbnail

📒 예외처리란? (Exception Handling)

예기치 않게 발생하는 에러에 대응할 수 있는 코드 작성 과정

에러의 원인은 수없이 다양하지만, 자바에서는 발생 시점에 따라

  1. 컴파일 에러 (Compile Time Error)
  2. 런타임 에러 (Run Time Error)

| 컴파일 에러

  • 문법적인 문제를 가리키는 신택스(syntax) 오류로부터 발생하는 신택스 에러(Systax Errors)
  • 주로 세미콜론 생략, 오탈자, 잘못된 자료형, 잘못된 포맷 등
  • 자바 컴파일러에 의해 발견

| 런타임 에러

  • 개발자가 컴퓨터가 수행 불가한 특정 작업을 요청하여 프로그램이 실행될 때 발생
  • 자바 가상 머신(JVM)에 의해 발견

📒 예외 클래스의 상속 계층도


📒 try - catch문

try {
	// 예외가 발생할 가능성이 있는 코드를 삽입
}
catch (예외타입의 참조변수 e) { // 예외타입의 참조변수를 선언해야함
	// 해당 예외가 매개변수로 들어왔을 경우 수행해야할 로직이 작성된 블럭
}
catch (ExceptionType1 e1) {
	// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
	// ExceptionType2 유형의 예외 발생 시 실행할 코드
}
finally {
	// finally 블록은 옵셔널
    // 예외 발생 여부와 상관없이 항상 실행
}

| 흐름

  1. 코드 수행
    • try 블럭내 예외가 발생
      - 일치하는 catch 블록이 O : 블록 내 코드 수행 후 탈출
      - 일치하는 catch 블록이 X : 예외는 처리되지 못하고 종료
    • try 블럭내 예외 발생 X : catch 문 코드 수행없이 탈출

| 예외 정보를 얻는 방법

예외가 발생할 때 생성되는 예외 객체로부터 해당 에러에 대한 정보를 얻는 방법

.getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻음, 오류에 대한 간단한 내용 출력
.toString() : 좀 더 자세한 예외 정보 제공
.printStackTrace() : 예외 발생 당시의 호출 스택(Call stack)에 있던 메소드의 정보와 예외 결과를 프로그램 종료 후 화면에 출력

💻 예시

try {printName(null)} // 예외 발생
// printName : 임의의 소문자를 대문자로 출력하는 메서드

catch (nullpointerException e) {
	System.out.println(e.getMessage());
    System.out.println(e.toString());
    e.printStackTrace();
}
finally {System.out.println("[프로그램 종료]");}
// 출력값

null
java.lang.NullPointerException
[프로그램 종료]
java.lang.NullPointerException
	at RuntimeExceptionTest.printMyName(RuntimeExceptionTest.java:20)
	at RuntimeExceptionTest.main(RuntimeExceptionTest.java:7)

📒 예외 전가

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


| throws 키워드

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

💻 예시

public static void main(String[] args) {
        try {
            doSomething(); // 최종 호출한 main 메서드에 예외 전가
        } catch (Exception e) {
            System.out.println("예외 처리 중: " + e.getMessage());
        }
    }

    static void doSomething() throws Exception {
        doSomethingElse(); // 호출한 이곳에 예외 전가
    }

    static void doSomethingElse() throws Exception {
        throw new Exception("예외 발생"); // 고의 예외 발생
    }

}
  • Exception 클래스는 모든 예외 클래스의 상위 클래스라, 그 하위 클래스 타입의 예외 클래스들이 모두 포함

| throw 키워드

  • throw 키워드로 의도적 예외 발생 가능
    💻 예시
    Exception intendedException = new Exception("고의 예외 생성");
     throw intendedExeption;
profile
백엔드 개발자 김예인입니다.

0개의 댓글