본문 바로가기

Back/Java

에러를 대처하는 것은 불가능하다. 단지 예외만 다룰 뿐이다.

자바에서는 오류의 종류로 Error, Exception 두 가지를 제안한다.

 

1. Error, 에러

Error는 간단하게, 하드웨어적인 문제가 발생하여 생기는 오류를 뜻한다. 당연히 개발자가 이를 해결할 방법은 없다. 컴퓨터가 불타고 박살나는데 정상적으로 소프트웨어가 돌아가게 하는 개발자가 있다면 이미 개발이라는 영역을 벗어난 초능력임이 확실하니까.

 

2. Exception, 예외

개발자가 작성한 코드가 의도치 않게 작동하여 발생하는 오류를 뜻한다. 이는 개발자가 반드시 고려해야 하는 영역이다.

 

3. 컴파일러

컴파일러가 감지할 수 있는 예외를 Exception 이라고 부르며,

컴파일러가 감지할 수 없는 예외를 Runtime Exception 이라고 부른다.

 

컴파일러가 감지하느냐 마느냐의 기준은 무엇일까?

간단하게, 이미 작성된 코드는 컴파일러가 바이트코드로 변환하면서 감지할 수 있다.

하지만 외부에서 값이 들어오는 경우에는 컴파일러가 이를 감지할 수 없다. 어떤 값이 들어올 지 알고 감지를 하겠는가?

 

그래서 개발자들이 흔히 보는 NullPointerException은 RuntimeException이다.

객체가 당연히 있을 줄 알고 객체를 호출했는데, 객체가 생성되지 않은 경우 NULL이 할당되어 있을 것이다.

NULL을 호출했으니 코드가 정상적으로 작동할리가 없다.

이는 코드가 작성되는 시점에서는 감지할 수가 없는 문제이므로 Exception이 아니라 RuntimeException이며,

NULL을 참조하므로 NullPointerException으로 분류된다.