이 글을 Effective Java를 읽고 적는 글임을 미리 밝힌다. ( 서적에 정확하게 기록되어있다. )

---------------------------------------

아래의 간단한 코드를 보자.

String strInputValue = "I Love You";

System.out.println("["+strInputValue+"]");

if(strInputValue.equals("TRUE"))

{

System.out.println("True");

}


흔하디 흔한 String 변수선언 이후 변수를 출력하고  문자열과 비교 후 일치할 시에 True 라는 문구를 출력하는 코드이다..

너무 쉽다? 그렇다. 너무 쉬운 코드라면 코드다.. 

위 코드에서 strInputValue 의 값을 null 로 변환하면 어떤 일이 벌어질까?





String strInputValue = null;

System.out.println("["+strInputValue+"]");

if(strInputValue.equals("TRUE"))

{

    System.out.println("True");

}





결과

[null]

Exception in thread "main" java.lang.NullPointerException

at com.ncf.test.java.TestClass.main(TestClass.java:13)




읭?

출력에서 null은 잘 찍어놓고..

비교 구문에서 오류를?

 
대학 시절에는. 아래와 같은 구문으로 null 값에 대한 처리를 수행했었다.


if(strValue != null && strValue.equals("test"))
{
System.out.println("Success");
}


대충 위와 같은 코드다... 물론 이도 동작은 한다.

좀 더 깔끔한 코드를 원하는것 뿐이다.


String strInputValue = null;

System.out.println("["+strInputValue+"]");

if("TRUE".equals(strInputValue))

{

System.out.println("Pass");

}




그렇다면 이 코드는 어떤가?

에? 위하고 비교했을때 .. 비교값의 위치가 반대인 것이잖아?

그렇다면 결과는 어떨까?



글을 쓰고 있는 이유와 같이. Null pointer Exception 은 발생하지 않는다.

왜일까?

좌변의 값 떄문이다.

자바에서 비교는 일단 좌측의 값을 기반으로 비교를 행하는데.

상단의 코드의 경우 좌측의 값이 null 이다... 고로 비교 자체를 할수가 없다.


아래의 경우는 좌측의 값이 문자열 TRUE다.. 우측의 값이 null 이므로 다른값으로 간주하게 되는것이다.


간단한 트릭? 이지만, SI를 뛰고 있는 개발자 입장에서 유익하게 사용중이니

가벼운 마음으로 익혀두면 두고두고 나쁠일은 없지 않을까?






 

+ Recent posts