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형 대비 계획 세우기
참고 자료