Java/Java 개념

18. 예외처리

ljheayeee 2022. 10. 5. 13:10

예외처리

  • 프로그램 오류
  • 예외클래스 계층 구조
  • 예외처리
  • 예외처리 방법
  • Exception과 오버라이딩
  • 사용자 정의 예외

프로그램 오류
  • 프로그램 수행시 치명적 상황이 발생하여 비정상 종료 상황이 발생한 것, 프로그램 에러라고도 함
  • 오류의 종류:
    • 컴파일 에러: 프로그램의 실행을 막는 소스 상의 문법 에러, 소스 구문을 수정하여 해결
    • 런타임 에러: 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등 주로 if문 사용으로 인한 에러 처리
    • 시스템 에러: 컴퓨터 오작동으로 인한 에러
  • 오류 해결 방법
    • 소스 수정으로 해결 가능한 에러를 예외(Exception)라고 한다
    • 예외 상황 구문을 처리 하는 방법인 예외처리를 통해 해결

 

예외 클래스 계층 구조
  • Exception과 에러 클래스  모두 Object 클래스의 자손이며 모든 예외의 조상은 Exception 클래스
  • 반드시 예외 처리해야하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨

 

 

예외처리(Exception)
  • Unchecked Exception으로 주로 프로그래머의 부주의로 인한 오류인 경우가 많음
  • 예외처리 보다는 코드를 수정해야 하는 경우가 많음

 

  • RuntimeException 후손 클래스
ArithmeticException - 0으로 나누는 경우 발생
- if문으로 나누는 수가 0인지 검사
NullPointerException - Null인 참조 변수로 객체 맴버 참조 시도시 발생
- 객체 사용 전에 참조 변수가 null인지 확인
NegativeArraySizeException - 배열 크기를 음수로 지정한 경우 발생
- 배열 크기를 0보다 크게 지정해야 함
ArrayIndexOutOfBoundsException - 배열의 index범위를 넘어서 참조하는 경우
- 배열명.length를 사용하여 배열의 범위 확인
ClassCastException - Cast연산자 사용 시 타입 오류
- instanceof 연산자로 객체타입 확인 후 cast 연산

 

  • Exception 확인하기
    • Java API Documnet에서 해당 클래스에 대한 생성자나 메소드를 검색하면
    • 그 메소드가 어떤 Exception을 발생시킬 가능성이 있는지 확인 가능
    • 해당 메소드를 사용하려면 반드시 뒤에 명시된 예외 클래스를 처리해야 함

 

예외처리 방법
  • Exception 처리를 호출한 메소드에게 위임
    • 메소드 선언 시 Throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임
    • 계속 위임 하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료

 

  • Exception이 발생한 곳에서 직접 처리
    • try~catch문을 이용하여 예외처리
try - exception 발생할 가능성이 있는 코드를 안에 기술
catch - try 구문에서 exception 발생 시 해당하는 exception에 대한 처리 기술
- 여러 개의 exception처리가 가능하지만 exception간의 상속 관계를 고려해야 함
finally - exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술
- 중간에 return문을 만나도 finally 구문은 실행되지만 System.exit(); 를 만나면 무조건 종료
- 주로 java.io 나 java.sql 패키지의 메소드 처리 시 이용

 

  • throws로 예외 던지기
  • try~catch로 예외 잡기
  • try~with~resource

 

Exception과 오버라이딩
  • 오버라이딩 시 Throws 하는 exception의 개수와 상관없이 처리 범위가 좁아야 함

 

사용자 정의 예외
  • exception 클래스를 상속받아 예외 클래스를 작성하는 것으로
  • exception 발생하는 곳에서 throw new 예외클래스명()으로 발생
    •