https://hcl-yeon.tistory.com/67

 

java.lang.NullPointerException

Cannot invoke "String.equals(Object)" because "edit" is null    Null Pointer, 생각보다 쉽게 보는 오류다보니 해결도 쉬워서 그렇게 어려운 에러는 아니었는데 생각보다 꽤 애먹었던 부분이 있어 기록으로

hcl-yeon.tistory.com


   null값 처리에 대해서는 아직도 미숙한 점이 많은 모양이다. 오류노트를 작성한 이후에도 Null값에 대한 처리가 서툴러 종종 에러를 발생시키고 있는데 이 null의 처리에 관하여 자세히 알아보려고 한다.

 

   일단 String은 데이터 타입이 아니라 객체이다. 여기서 말하는 데이터 타입은 정수형, 실수형, 문자 등 Java에서 제공하는 변수를 담는 데이터 형식을 뜻한다. int, double, char 등등... 하지만 이런 형식만 있는 것이 아니라 Integer과 같이 부모 요소로 보이는 대문자를 가진 객체형이 존재한다. 이는 정말로 객체였으며, 오늘은 이 둘의 차이에 대해 말해보려 한다.

 

   일단 int, double, long 등과 같은 데이터 타입은 기본 데이터 타입이라고 부른다. 이는 메모리에 직접 값이 저장되는 형식이며 이 데이터 타입의 경우에는 Null값을 가질 수 없다. 반면에 Integer, Long과 같이 대문자로 시작하는 래퍼 클래스는 문자 그대로 객체기 때문에 이는 null값을 허용할 수 있다. 그리고 해당 객체가 가진 함수 또한 사용할 수 있기 때문에 형변환을 하는 경우에는 이 점이 더 유리할 수 있겠다.

 

   따라서 내가 계속 내고 있는 null point Exception 에러의 발생경위를 다시 돌아보도록 하겠다.

boolean  error = ( boolean )request.getAttribute("error");

 

   JSP 페이지에서 특정 코드에 따라 페이지를 바꾸기 위해 리퀘스트에서 값을 꺼내던 중이었다. 그리고 만약 코드의 값이 없다면 그냥 무시하겠지 싶어서 그대로 실행했지만 결과는 다음과 같았다.

 

java.lang.NullPointerException: Cannot invoke
"java.lang.Boolean.booleanValue()" because "error" is null

 

 

   null값이 오는 건 알고 있었다. 따라서 해당 값이 null이면, 다른 처리를 하라고 예외까지 지시해 둔 상황이었는데도 해당 값은 null이라는 이유로 아예 코드 실행조차 되지 않고 페이지가 터져나가고 있었다. 분명 null이면 하지말라고 예외까지 주었는데도, 그냥 변수 자체에 담지 못한다고 뻗어버린 것이었다. 그래서 오늘자 오류노트가 생긴 것이 아닐까 싶다...

 

   이유인 즉슨 간단했다, 이후 null처리를 하던 말던 일단 boolean이라는 데이터 타입은 null값 자체를 저장할 수 없으므로 애초부터 잘못된 코드라며 터지고 있는 것이었다. 따라서 내가 정한 예외처리와 함께 문제없이 진행되기 위해서는 래퍼 클래스에 담을 필요가 있다.

Boolean  error = ( Boolean )request.getAttribute("error");

 

   위와 같이 래퍼 클래스인 Boolean에 값을 저장하게 되면 null값도 자연스레 받을 수 있게되고, Boolean객체에서 null은 곧 false가 되므로 이후의 제어문에서도 별도의 null값 처리가 아닌 true/false 처리로 진행할 수 있게 되었다.

 

 

'오류노트' 카테고리의 다른 글

webflow Http Status 404 Error  (0) 2024.11.11
mySQL update 및 delete가 안될 때  (0) 2024.11.10
Tiles.xml 설정 주의 사항  (0) 2024.11.09
Downloading external resources is disabled  (0) 2024.11.08
java.lang.NullPointerException  (0) 2024.10.29

+ Recent posts