본문 바로가기
Coding/Etc

예외처리의 중요성

by Hide­ 2015. 11. 10.
반응형

장시간 구동되는 프로그램의 경우 예외처리를 무조건 해주자.

몇일전부터 자꾸 프로그램이 죽는 현상이 발생했는데

디버깅해보니 해당부분에서만 예외처리를 안해줬었다.

크러시날경우 .mdmp 파일을 무조건 분석해보자.

그렇다고 모든 코드를 try~catch 문에 넣진 말자. (속도 저하, 아래 참고)


[참고]

try-catch와 if는 서로 동일한 용도로 사용할 수 있는게 아니다.

try-catch의 경우 개발자가 예상치 못한 프로그램 흐름이  발생할 경우, 사용해야하며 개발자가 예상할 수 있는 것은 if로 처리하는 것이 바른 프로그래밍 테크닉

단순히 변수가 null인지 확인을 하는데 try-catch를 사용하지 말고 if를 사용하는 것이 옳다.

try-catch는 파일 시스템 full과 같은 비정상적인 프로그램 흐름에 대응하는데 사용해야함


이유

1. Java 6 이하 버전에서는 try-catch 내부에 있는 로직을 JIT 컴파일러가 자동으로 최적화하지 않는다.

2. try-catch 블록을 사용하는 것이 if문을 사용하는것보다 오버헤드가 더 크다.

- try 문법 만으로는 런타임시에 오버헤드가 발생하지는 않지만, 만약 예외가 발생했을 경우 catch구문에서 특정 작업을 수행해야하므로 이때 오버헤드가 발생한다.


자바 JIT 컴파일러 -> 자바 소스코드를 바이트코드로 바꾸는 컴파일러와는 다른 것임, JVM에서 바이트코드를 CPU의 native instruction set(머신 코드)으로 바꾸는 역할 + 최적화를 수행

자바 바이트코드를 단순히 JVM에서 JIT 컴파일러 없이 동작시키면 해당 CPU에 맞는 instruction code를 바로 사용하는게 아니기 때문에 속도가 느리다. -> 이 점을 보완하기 위해서 사용

Just in Time이라는 것은 필요할때 바이트코드를 머신코드로 바꾸어서 사용한다는 것... 일단 머신코드로 바꾸고 나면 해당 로직의 속도는 빨라진다.

- 출처 : http://datar.tistory.com/93