finally와 단언
예외 때문에 건너뛴 줄에 '파일 닫기'가 있었다면?
화면을 누르면 다음 장으로 넘어갑니다
finally 절
어느 길로 가도 finally를 지납니다
자바는 try 구조의 맨 끝에 finally 절을 둘 수 있습니다. try 구조에서 무슨 일이 일어나든 반드시 실행할 코드를 여기에 적습니다. 3편에서 본 마무리입니다.
자바 예시 코드입니다. write, close는 파일에 쓰기, 파일 닫기를 하는 메서드라고 가정했습니다.
세 경우
받아 줄 처리기가 없어도 실행됩니다
예외가 없으면 try 블록 다음에, 예외를 처리했으면 처리기 다음에 finally 절이 실행됩니다. 맞는 처리기가 없어 예외가 부른 쪽으로 전파될 때도, 전파되기 전에 finally 절부터 실행됩니다.
예외가 아니어도
return으로 나가도 실행됩니다
finally 절은 예외 처리가 아닌 데에도 씁니다. 반복문 안에서 return 문으로 메서드를 빠져나가더라도 finally 절은 실행됩니다.
자바 예시 코드입니다. return은 메서드를 끝내고 부른 쪽으로 돌아가는 문장입니다. 100은 예시 값입니다.
단언
참이어야 할 조건을 적어 둡니다
자바의 assert 문에는 단언(assertion), 곧 그 줄에서 참이어야 하는 조건을 적습니다. 거짓이면 AssertionError라는 예외가 던져집니다. 프로그램을 고치거나 다시 컴파일하지 않고, 실행할 때 끌 수 있습니다.
예시 코드입니다. assert 조건 : 식; 형태도 있고, 파이썬에도 assert 문이 있습니다. 컴파일은 실행 전에 소스를 번역하는 일입니다.
평가
C++보다 나아진 점
이 강의가 따르는 교재는 자바의 예외 처리를 C++보다 낫다고 평가합니다. 예외의 타입이 더 합리적이고, finally 절이 더해졌습니다. C++의 throw 절은 적지 않으면 무엇이든 던질 수 있어 알려 주는 것이 거의 없지만, 자바의 throws 절은 쓸모가 있습니다.
다음 편