Java 문법 종합 4주차

이상인·2023년 5월 30일

오류 및 예외

  • 사용자가 숫자가 아닌 문자를 입력한다거나
    개발한 프로그램이 감당할 수 없는 숫자가 입력된다거나
    프로그램을 돌리는 컴퓨터에 메모리가 부족하는 등

오류 및 예외사항 처리보다 구현에 집중하는 주니어 개발자

  • 반복되면 습관이 된다
  • 실제 데이터를 다루고 프로젝트를 할 때 이러한 처리를 잘 못하면 큰 문제가 생긴다.

오류

  • 일반적으로 회복이 불가능한 문제
  • 시스템레벨, 환경적인 요인으로 발생
  • 코드의 문제일 경우 심각함
  • 에러가 발생한 경우 어떠한 에러로 프로그램이 종료되었는지를 확인하고 대응

예외

  • 일반적으로 회복이 가능한 문제
  • 예외가 발생할 수 있다는 것을 인지하고 대응할 수 있다. (처리 로직을 심는다.)
  • 현실적으로 코드레벨에서 할 수 있는 문제상황에 대한 대응은 '예외처리'에 속한다.

컴파일 에러(예외)

  • .java 파일을 .class 파일로 컴파일할때 발생하는 에러
  • 대부분 문법을 틀려서 발생
  • 문법에 맞게 다시 작성

런타임 에러(예외)

  • 주로 다루게 될 에러
  • 문법적인 오류가 아니다. 컴파일은 잘 되었지만 "프로그램"이 실행도중 맞닥뜨리게 되는 예외

예외처리 관점에서 예외의 종류

  • 확인된 예외 ( Checked Exception )
    1) 컴파일 시점에 확인하는 예외
    2) 반드시 예외 처리를 해줘야 함
    3) 이를 처리하지 않았을 때 발생하는 것이 컴파일 에러

  • 미확인된 예외 ( Un~ )
    1) 런타임 시점에 확인되는 예외
    2) 예외 처리가 반드시 필요하지 않은 예외


예외처리의 흐름

  1. 우리가 예외를 어떻게 정의
  2. 예외가 발생할 수 있음을 알리고
  3. 사용자는 예외가 발생할 수 있음을 알고 예외를 핸들링 하는지

throws

  • 메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어
  • 그냥 Exception과 다르게 여러 종류의 예외사항을 적을 수 있다.

throw

  • 메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어
  • 실제로 던지는 예외 객체 하나와 같이 써야한다.
  • 일반 메서드의 return 키워드처럼 throw 아래의 구문들은 실행되지 않고, throw문과 함께 메서드 종료

위험하다고 표시해놓고 그냥 호출하면 안된다.

  • 예외처리 로직에 따라 해야한다
  • try ~ catch ~ finally 구문

예외 클래스 구조 이해하기

자바의 Throwable Class

  • 시작은 모든 객체의 원형인 Object클래스에서 시작
  • "문제 상황"을 뜻하는 Throwable 클래스가 Object 클래스를 상속한다.
  • Throwable 클래스의 자식으로 오류(Error)와 예외(Exception) 클래스가 있다.
  • 에러 클래스와 예외 클래스는 각각 IOError 클래스, RuntimeException 클래스와 같이 구분하여 처리된다.

Chained Exception, 실제 예외 처리하는 방법
연결된 예외

  • 예외는 다른 예외를 유발할 수 있다.
  • 예외 A가 예외 B를 발생시켰다면, 예외 A는 B의 원인 예외입니다.
  • 원인 예외를 새로운 예외에 등록한 후 다시 새로운 예외를 발생시키는데, 이를 예외 연결이라고 한다.

예외를 연결하는 이유

  • 여러 가지 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위함
  • checked exception을 unchecked exception으로 포장(wrapping)하는데 유용하게 사용되기도 함

원인 예외를 다루기 위한 메서드

initCause()

  • 지정한 예외를 원인 예외로 등록하는 메서드

getCause()

  • 원인 예외를 반환하는 메서드

예외를 처리하는 방법

  1. 복구
  • 기본적인 방식이지만, 현실적으로 복구가 불가능한 상황이 많거나 최소한의 대응만 가능한 경우가 많아 자주 사용되지 않는다.
  1. 처리 회피

  2. 전환


리스트는 인터페이스이다.
public interface List extends Collection {

ArrayList는 구현체이다.

리스트, 큐, 셋 등에서 상속받은 구현체들과의 관계 개념을 알고 사용하자.

0개의 댓글