[JAVA] 자바 정복기 - 예외 클래스와 예외 처리

개발log·2024년 4월 4일

NEW 자바 정복기

목록 보기
19/27
post-thumbnail

예외(Exception)

  • 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩ㅇ로 인해 발생하는 프로그램 오류
  • 예외 처리 프로그램 통해 정상 실행상태 유지 가능
  • 예외 발생 가능성이 높은 코드를 컴파일할 때 컴파일러는 예외 처리 유무를 확인

에러

  • 에러: 컴퓨터 하드웨어 관련 고장으로 응용프로그램 실행 오류가 발생하는 것

일반 예외

  • 컴파일러 체크 예외
  • 자바 소스 컴파일 과정에서 해당 예외 처리 코드 있는지 검사하게 됨
  • 예외의 상속 관계

실행 예외

  • 컴파일러 non 체크 예외
  • 실행 시 예측할 수 없이 갑자기 발생하기에 컴파일 과정에서 예외처리코드 검사하지 않음
  • 실행 예외는 개발자의 경험에 의해서 예외 처리 코드 작성해야 함

NullPointerException

  • 가장 빈번하게 발생하는 실행 예외
  • 객체 참조가 없는 상태의 참조 변수로 객체 접근 연산자 도트를 사용할 경우 발생

ArrayIndexOutOfBoundsException

  • 배열에서 인덱스 범위를 초과할 경우

NumberFormatException

  • 문자열을 숫자로 변환하는 경우

ClassCastException

  • 상위 및 하위 클래스 그리고 구현 클래스와 인터페이스 간 타입 변환 가능
  • 위 관계가 아닌 경우 ClassCastException 발생
Animal animal = new Dog();
Cat cat = (Cat) animal; //대입된 객체가 아닌 다른 클래스 타입으로 변환
// → ClassCastException

정리

  • 예외: 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류. 예외 발생 시 프로그램이 곧바로 종료되나 예외 처리 통해 정상 실행상태를 유지할 수 있음
  • 예외 클래스: 자바에서는 예외를 클래스로 관리함. 프로그램 실행 중 예외가 발생하면 해당 예외 클래스로 객체를 생성하고 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해줌
  • 일반 예외: 컴파일러 체크 예외 프로그램 실행 시 예외 발생 가능성 높기 때문에 자바 소스 컴파일 과정에서 해당 예외 처리 코드 있는지 검사함
  • 실행 예외: 컴파일러 넌 체크 예외. 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일 과정에서 예외 처리 코드 존재 여부를 검사하지 않음

예외 처리

예외 처리 코드

  • 자바 컴파일러는 일반 예외를 발생시키는 코드를 발견할 경우 예외 처리 코드를 강제로 요구
  • 실행 예외는 컴파일러가 체크하지 않으므로 개발자가 경험으로 예외 처리 코드 작성

try-catch-finally 블록

  • 생성자 및 메소드 내부에서 작성되어 일반예외와 실행예외가 발생할 경우 예외 처리 가능하게 함

다중 catch

  • 발생하는 예외별로 예외 처리 코드를 다르게 하는 다중 catch 블록을 가질 수 있음

예외 떠넘기기

throws 키워드

  • 메소드에서 처리하지 않은 예외를 호출한 곳으로 넘기는 역할
  • 메소드를 호출한 곳에서 다양한 방식으로 처리할 수 있도록 함
  • throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분하여 나열
리턴타입 메소드이름(매개변수,...) throws 예외클래스1, 예외클래스2, ... {
}
리턴타입 메소드이름(매개변수,...) throws Exception {
}


정리

  • 예외 처리: 예외가 발생할 경우 프로그램의 갑작스러운 종료 막고 정상 실행 상태를 유지할 수 있도록 처리하는 것
  • try-catch-finally 블록: 생성자 내부와 메소드 내부에서 작성되는 예외 처리 코드
  • 다중 catch 블록: 예외 별로 예외 처리 방식을 다르게 할 경우 여러 개의 catch 블록을 가질 수 있다.
  • throws 키워드: 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
profile
나의 개발 저장소

0개의 댓글