Whiteship's Note


Checked Exception VS Unchecked Exception

Java : 2006.12.01 22:24


ConcurrentModificationException 을 처음 본 것은 영회 형이 Agile Java 블러그에 올려두신 글을 통해서 입니다. 그 글의 요지를 파악하지 못하고 계속 섯부른 질문을 계속 하는 저의 모습이 부끄럽게 느껴집니다.

Checked Exception과 Unchecked Exception의 차이

Check Exception을 발생하는 메소드를 사용 할 경우에는 반드시 메소드 헤드 부분에 throws XXXException 이라고 명시를 해서 이 메소드를 호출하는 다른 메소드에게 Exception 처리에 대한 책임을 넘겨주거나 try-catch로 잡아야 합니다.

Unchecked Exception을 발생시킬 수 있는 메소드를 사용할 경우에는 경우에는 아무것도 안해도 됩니다. 따라서 코드처리가 훨~씬 간편합니다. 하지만 Unchecked Exception이 발동하면 프로그램이 바로 에러를 내면서 멈춰버립니다. 또 하지만 Unchecked Exception도 try-catch로 잡거나 throws 를 사용해서 다른 메소드에게 넘겨버릴 수도 있습니다.

둘 중에 어떤 것이 좋을까요? 저도 잘 모르겠습니다.

일단 IO관련된 Java API를 사용하게 되면 try-catch를 정신없이 써야만 하는데 막상 catch 블럭 안에서 하는 일은 Exceptoin이 발생했다고 찍어 주는 정도의 일을 합니다. 어떤 txt파일로 부터 데이타를 읽어오는 경우에 발생 시킬 수 있는 FileNotFoundException의 경우에 Checked Exception입니다. 따라서 Try-Catch 해야겠죠. 그래서 막상 try-catch로 묶어서 catch 블럭에서 무엇을 해야되나 고민을 해봐도.. 마땅히 떠오르는 일은 스택 트레이스 찍어 주기 뿐입니다. 이렇게 해두면 만약에 정말 파일을 못찾아서 이 블럭으로 온 경우에 스택 트레이스를 찍은 담에 할일을 계속 합니다. 이게 과연 제대로 프로그램이 돌아가는 걸까요. 그 파일이 이 프로그램에서 완전 핵심이라면 어떻하죠? 프로그램이 아예 멈춰도 당연한 상황이라면 Catch 했다고 안심해도 되는 걸까요?

좀 더 조사와 고민을 해봐야겠습니다.

'Java' 카테고리의 다른 글

Reflection  (0) 2006.12.19
... 가변인수(varargs)  (2) 2006.12.11
for each 구문 사용법  (0) 2006.12.11
JUnit Reloaded  (0) 2006.12.07
I/O Stream 구성  (0) 2006.12.07
Checked Exception VS Unchecked Exception  (0) 2006.12.01
냄새 나는 Switch 코드와 다형성  (3) 2006.11.30
Map 인터페이스 살펴보기  (0) 2006.11.29
Abstract Test  (6) 2006.11.28
상속을 이용한 다형성 vs 인터페이스를 이용한 다형성  (0) 2006.11.24
Throwable 계층구조  (0) 2006.11.21
top


Throwable 계층구조

Java : 2006.11.21 14:56


먼저 최상위에 있는 Throwable 클래스와 그 아래 1 단계 까지만 보겠습니다.

Error 클래스 계층 구조 입니다.

맨 위에 있는 박스 안에 있는 클래스들이 Error 클래스를 상속받은 1단계의 클래스들이고 아래의 박스는 VirtualMachineError의 하위 클래스들 입니다. OutOfMemoryError과 StacjOverflowError가 여기 있었군요.

Exception 클래스를 상속 받은 클래스들은 다음과 같습니다. 차마 그릴 수가 없더군요.

more..


지금 까지 살펴본 클래스 들은 상속 구조로 둘로 나누어 봤지만 다른 기준으로도 둘로 나눌 수 있습니다.
"Check Exception이냐 Unchecked Exception 이냐"입니다. 이렇게 나눠보는 이유는 컴파일 타임 때 프로그램이 Checked Exception을 다루는 코드가 들어있는지 확인하게 되기 때문입니다. Checked Exception이 발생할 수 있는 생성자나 메소드는 꼭 그걸 다루는 코드가 있어야만 컴파일을 통과하게 되는거죠. 따라서 이렇게 나눠보는것이 오히려 더 유용할 수도 있습니다.

지금까지 보았던 모든 Throwable의 하위 클래스 중에서 Unchecked Exception(확인되지 않은 예외)은 RuntimeException을 상속받은 Exception들과 Error의 하위 클래스들 입니다.

그럼 이제 Excpetion들 중에서 RuntimeException의 하위 크래스들만 보면 모든 Throwable 타입의 클래스들을 둘로 나눌수 있는 두 가지 기준을 살펴볼 수 있을 것입니다.

more..


역시 이것도 엄청나게 많습니다.


top