흔히 효율적이라는 BufferedReader를 이용해 코딩 테스트를 풀다보면,
public void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
int n = Integer.parseInt(br.readLine());
}
아무 생각없이 본능적으로 이렇게 작성하다가 오류가 발생한다.
(더 정확히 얘기하면 br.readLine()을 하는 부분에서)
뭔가 하나가 빠졌다.
IOException은 checked exception이므로 반드시 예외 처리를 해주는 것이 맞다.
두 예외는 개발자들이 만든 app에서 예외가 발생했을 때 (이 말인 즉슨 개발자 선에서 해결할 수 있는 오류라는 것) 사용하며, 두 예외처리의 차이는
runtime exception에 있다.
unchecked는 runtime 예외를 상속하고, checked는 상속하지 않는데, 이는 예외 발생 시 rollback의 유무를 결정한다. 따라서 checked는 예외 발생 시 rollback이 되지 않으므로 명시적으로(try/catch, throws) 예외를 처리해주어야 한다.
(갑자기 든 생각이지만 이 checked exception에 대해서도 정리하면 좋을듯)
아무튼 다시 돌아와서 readLine함수는 한줄씩 읽어 string으로 반환되는 함수로, System.in으로 키보드와 연결된 reader가 이 프로그램에서 인식되지 않을 때 예외를 던진다. 키보드와의 연결을 인식하지 못하는 것은 입력이 없었다는 의미이다.
그러나 단순히 입력을 안했을 때(이때는 null이 아닌 0으로 찍힌다고 한다)의 문제가 아니라 아예 인식이 안될 때 던지는 오류라고 한다!!!
(참고한 링크처럼 나도 함수를 찾아오고 싶은데 아직 안나온다ㅠㅠㅠ 추후에 첨부하겠다!!!)