2025-07-30

오늘 배운 것

Exception

Checked Exception vs Unchecked Exception

  • Checked Exception -> 예외
    • 예외에 대한 코드가 없으면 컴파일 에러
    • try~catch~finally 혹은 throws 필수!
    • 예 : IOException
  • Unchecked Exception -> 에러
    • 컴파일 시에는 문제 없다가 런타임 시 발생하는 에러
    • 디버깅을 통해 해결
    • 예 : ArithmethicException (0으로 나누기)

Throwable

  • 주요 메서드
    • String getMessage() : 발생된 예외에 대한 구체적인 메세지 반환
    • Throwable getCause() : 예외의 원인이 되는 Throwable 객체 또는 null 반환
    • void printStackTrace() : 예외가 발생된 메서드가 호출되기까지의 메서드 호출 스택을 출력 -> 디버깅의 수단으로 주로 사용

다중 exception handling

  • 하나의 try 블록에서 여러 개의 catch 블록 추가 가능
  • 작성 순서 유의 사항
    • 상위 타입의 예외를 먼저 선언하면 뒤의 하위 타입의 예외는 무시됨
    • 항상 작은 범위에서 큰 범위순으로 정의 필요!
  • 고려사항
    • 예외 처리는 가장 구체적으로 진행
    • 심각하지 않은 예외는 굳이 세분화 하는 것보단 |를 활용하여 한번에 처리하는 것도 좋음

finally

  • 에러가 발생하거나 발생하지 않더라도 반드시 실행되는 블록
  • try 블록 이후에 해당 코드를 입력해도 되지만 하나의 일련의 과정을 의미하기 위해 사용
  • try 문에 return 문이 있어도 리턴되기전 finally 구문 실행되고 리턴됨
    • 예외 : System.exit(0)는 finally에 도달하지 않고 바로 종료됨

try-with-resources

  • close 할 대상을 try()괄호 안에 타입과 변수로 선언하여 자동 close됨
  • 하지만 해당 객체는 try 블록에서 다시 할당 될 수 없음 -> final 변수로 간주됨
    • 만약 catch 나 finally에서 해당 객체를 사용할 필요가 있다면 괄호 안에 선언하면 안됨
  • 반드시 하나이상의 catch 또는 finally가 필요

throws

  • throws 키워드로 처리를 호출한 객체로 위임하는 것
  • 이를 통해 사전에 예외가 발생할 수 있음을 사용하는 객체에서 알 수 있게 함
  • 주의 사항
    • 매서드 재정의 시 조상 클래스 메서드가 던지는 예외보다 부모(더큰) 예외를 던질 수 없다
      • 즉 하위 계층에서 발생한 예외는 상위 계층에 맞는 예외로 바꿔서 던져야 한다 -> Exception Chaining

사용자 정의 예외

  • Exception 또는 RuntimeException 클래스를 상속 받아 작성
  • 장점
    • 객체의 활용으로 필요한 추가 정보나 기능 활용이 가능함
    • 코드의 재사용 : 동일한 상황에서 예외 객체 재사용 가능
    • throws 메커니즘의 이용 : 중간 호출 단계에서 리턴이 불필요하고 상위 호출에게 위임할 수 있다

내일 할일

  • 해커톤 기획서 완료하기
  • 알고리즘 모의역량, 삼성 기출 문제 풀기
  • B형 대비 계획 세우기

참고 자료

results matching ""

    No results matching ""