[JAVA] 예외처리

2025. 10. 13. 17:19·JAVA

Error와 Exception

: Java에서는 컴파일 오류, 런타임 오류 두 종류가 있고, 컴파일 오류는 미리 잡아내기 쉽지만 런타임 오류는 해결하기 까다로움

런타임 오류는 Error와 Exception 이 있음

 

Exception, Error의 계층구조

 

  • Throwable
    • getMessage(), printStackTrace()와 같은 메서드가 구현되어 있음
    • Exception, Error에 대한 Message를 기록
    • Chain 된 예외들의 정보를 기록
  • Error
    • 코드로 복구되지 않는 오류
      • 개발자가 직접 Error를 catch하면 안되며 해결할 수 없음
        Ex) OOM(OutOfMemory Error) - 실행중 메모리 부족
  • Exception
    • 개발자가 직접 처리할 수 있는 오류
      ex) NPE(NullPointerException), IllegalArgumentException
    • Compile Exception
      • Checked Exception이며, 컴파일러가 확인함
    • Runtime Exception
      • Unchecked Exception이며, 컴파일 후 실행단계(Runtime)에서 발생하는 Exception
  • Exception 상속관계
    • 상속 개념은 Exception에도 적용됨
    • catch를 통해 예외를 잡으면 하위 Exception들도 모두 catch 함
    • Throwable Class를 Exception catch 하면 안된다. Error Class도 모두 catch되기 때문
    • 즉, Exception 하위 클래스만 예외 처리를 하면 됨

예외 처리를 하는 법

  • try - catch, finally, throws, throw

catch

  • 예외가 발생하면 처리한다
  • Exception 상속관계에 의해, 하위 Exception이 모두 catch 된다.
    • 따라서 Exception을 catch 하는건 지양해야 한다
      • 어떤 Exception이 발생했는지 모르기 때문
      • 모든 Exception이 해당 catch로 처리되기 때문

 

 finally

  • 예외발생 여부를 떠나서 최종적으로 실행될 코드
try {
	// 예외가 발생할 코드
} catch (Exception) {
  // 예외 발생하면 처리하는 코드
} finally {

	// 예외를 발생하던, 안하던 최종적으로 실행될 코드 
	
}

 

throw

  • 예외를 발생시키는 코드
  • 예외 또한 객체이기 때문에 new 키워드를 사용하여 사용할 수 있다
// 1.
throw new RuntimeException();

// 2.
try {
  // 실행할 코드
} catch (Exception e) {
	throw new TestCheckedException("내가 만든 메세지");
}

 

throws

  • 예외가 발생하면 던진다
  • Exception 상속관계에 의해, 하위 Exception이 모두 throw 된다.
  • Java의 main 메서드를 넘어서 throw 하게되면 로그를 출력하며 종료된다.
    • 즉, 그 이전에 꼭 catch 해서 처리해야 한다.

Checked Exception, Unchecked Exception

Checked Exception

  • Exception class를 상속받으면 checked Exception이 된다.
  • Compiler가 체크한다
  • Checked Exception은 발생한 예외를 개발자가 명시적으로 처리해야 한다
    • catch 혹은 throws로 처리한다
    • throws 했다면 이후에 꼭 catch 해야한다.
    • 만약, 처리하지 않으면 Compile 오류가 발생한다.

    • 예외는 개발자가 미리 알고 대처가 가능한 예외가 좋으나, checked 예외는 꼭 처리(catch, throws)가 필요하기 때문에 번거로운 부분이 있음

Uncheked Exception

  • RuntimeException과 하위 Exception
  • 말그대로 Compiler가 체크하지 않는다
  • Unchecked Exception은 발생한 예외를 개발자가 명시적으로 처리하지 않아도 된다.
  • throws를 생략할 수 있다. Checked Exception은 꼭 처리해야됨
    • throws를 명시하여도 Compile 시 checked 되진 않는다
    • 다른 개발자가 인지할 수 있도록 명시하는 것도 좋은 방법. 기본은 생략
      • 코드 컨벤션 중 하나
    • 개발자가 실수로 예외 처리를 까먹을 수 있음. Compiler가 check 하지 않기 때문

 

정리

  • CheckedException
    • "Exception"을 상속받은 Exception
    • 컴파일러가 체크한다
    • throws, catch를 생략할 수 없다
    • 반드시 예외 처리를 해야함
  • UncheckdedException
    • "RuntimeException"을 상속받은 Exception
    • 컴파일러가 체ㅡ하지 않는다
    • throws, catch 를 생략할 수 있다
    • 예외 처리를 까먹을 수 있다
    • 리스트

 

'JAVA' 카테고리의 다른 글

[JAVA] 다형성 파헤쳐보기  (0) 2025.10.15
[JAVA] 불변객체(Immutable Object)  (0) 2025.10.13
[JAVA Algorithm] 컬렉션 프레임워크  (0) 2025.10.02
[Java Algorithm] 2차원 배열  (0) 2025.10.02
[JAVA Algorithm] 배열 개념 정리  (0) 2025.10.01
'JAVA' 카테고리의 다른 글
  • [JAVA] 다형성 파헤쳐보기
  • [JAVA] 불변객체(Immutable Object)
  • [JAVA Algorithm] 컬렉션 프레임워크
  • [Java Algorithm] 2차원 배열
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    SpringSecurity
    백엔드 기초
    MVC
    thymleaf
    Spriingboot
    Spring
    RestTemplate
    jsp
    JPA
    Stomp
    웹소켓
    String.format
    Github
    WebSocket
    프로세스와 쓰레드
    algorithm
    경합조건과 교착상태
    다형성
    Java 문법기초
    객체지향
    for문
    BEAN
    실시간 데이터 처리
    객체지향프로그래밍
    HTML&CSS
    git
    Til
    백엔드 기초다지기
    네트워크 기초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[JAVA] 예외처리
상단으로

티스토리툴바