JAVA - Exception

석재호·2022년 2월 2일
0

JAVA

목록 보기
11/12
post-thumbnail
  • 에러와 예외

    • 어떤 원인에 의해 오동작 하거나 비정상적 종료되는 경우

    • 심각도에 따른 분류

      • Error
        • 메모리 부족, stack overflow와 같이 일단 발생하면 복구할 수 없는 상황
        • 프로그램의 비 정상적 종료를 막을 수 없음 -> 디버깅 필요
      • Exception
        • 읽으려는 파일이 없거나 네트워크 연결이 안 되는 등 수습될 수 있는 비교적 약한 것들
        • 프로그램 코드에 의해 수습 가능함
    • exception handling(예외 처리)

      • 예외 발생 시 프로그램의 비 정상 종료를 막고 정상적인 실행 상태를 유지하는 것

      • 예외의 감지 및 예외 발생 시 동작할 코드 작성 필요

      • checked exception : 예외에 대한 대처 코드가 없으면 컴파일이 진행되지 않음

      • unchecked exception : 예외에 대한 대처 코드가 없더라도 컴파일은 진행됨

  • exception handling 기법

    • try ~ catch 구문
      	try{
          	// 예외가 발생할 수 있는 코드
          }catch(exception e){
          	// 예외가 발생할 경우의 처리 코드
          }finally{
          	// 언제나 실행되는 코드
          }
    • 다중 catch 문장 작성 순서 유의 사항
      • JVM이 던진 예외는 catch문장을 찾을 때는 다형성이 적용
      • 상위 타입의 예외가 먼저 선언되는 경우 뒤에 등장하는 catch 블록은 동작하지 않음
      • 상속 관계가 없는 경우는 무관
      • 상속 관계에서는 작은 범위(자식)에서 큰 범위(조상)순으로 정의
    • finally는 예외 발생 여부와 상관 없이 언제나 실행
      • 중간에 return을 만나는 경우도 finally 블록을 먼저 수행 후 리턴 실행
  • throws 키워드를 통한 처리 위임

    • method에서 처리해야 할 하나 이상의 예외를 호출한 곳으로 전달(처리 위임)
      • 예외가 없어지는 것이 아니라 단순히 전달
      • 예외를 전달 받은 메서드는 다시 예외 처리의 책임 발생
      • checked exception은 반드시 try~catch 또는 throws 필요
      • runtime exception은 throws 하지 않아도 전달되지만 결국 try~catch 처리
    • 메서드 재정의와 throws
      • 메서드 재정의 시 조상클래스 메서드가 던지는 예외보다 부모예외를 던질 수 없다
  • 사용자 정의 예외

    • API에 정의된 exception이외에 필요에 따라 사용자 정의 예외 클래스 작성
    • 대부분 Exception 또는 RuntimeException 클래스를 상속받아 작성
      • checked exception 활용 : 명시적 예외 처리 또는 throws 필요
        • 코드는 복잡해지지만 처리 누락 등 오류 발생 가능성은 줄어듦
      • runtime exception 활용 : 묵시적 예외 처리 가능
        • 코드가 간결해지지만 예외 처리 누락 가능성 발생
profile
개발자 준비 중

0개의 댓글