fun readNumber(reader: BufferedReader): Int? { // 체크 예외인 IOException이지만 명시하지 않음.
try{
val line = reader.readLine()
return Integer.parseInt(line)
} catch (e: NumberFormatException){
return null
} finally{
reader.close()
}
}
fun main(){
val reader = BufferReader(StringReader("239"))
println(readNumber(reader))
}
239
위의 코드에서 NumberFormatException은 체크 예외가 아니다. 따라서 자바 컴파일러는 NumberFormatException를 잡아내게 강제하지 않는다. 그에 따라 실제 실행 시점에 NumberFormatException이 발생하는 모습을 자주 볼수 있다. 하지만 입력 값이 잘못되는 경우는 흔히 있는 일이므로 그런 문제가 발생한 경우 부드럽게 다음 단계로 넘어가도록 프로그램을 설계해야 한다는 점에서 이는 불행한 일이다.
BufferedReader.close는 IOException을 던질 수 있는데, 그 예외는 체크 예외이므로 자바에서 반드시 처리해야 한다. 하지만 실제 스트림을 닫다가 실패하는 경우, 스트림을 사용하는 클라이언트 프로그램이 취할 수 있는 의미 동작은 없다. 그러므로 이 IOException을 잡아내는 코드는 불필요하다.
안녕하세요~ 대훈님:)
벨로그에서 처음 뵙겠습니다.
좋은 글 잘 읽었습니다!