"".equals ?

Programming/Java 2011. 12. 21. 11:56 |

"".equals 라는게 뭘까?
약간 생략이 된부분이 있다. 원래는
public void f(String a){
	if(a==null || "".equals(a.trim())){
		return;
	}
}

이런 형식으로 종종 사용된다.

어떤 함수를 만들었는데 전달 받는 인자가 문자열이다. 근데 이 문자열이 제대로 들어왔다면 진행하고 null 이나 내용이 없는 문자열이면 처리하지 않고 리턴 하겠다. 라는 의미이다.
근데 왜 a.equals("") 이 아니고 "".equals(a) 인가? 라는 게 요점일것이다.
혹시 a가 null 이라면 어쩔것인가?
물론 앞에서 a==null 이라는 부분을 체크 했지만 혹시 저부분이 없다면?

또 다른 부분에서 a라는 문자열이 "abcd" 라는 문자열과 같은지 비교해보고 싶다. 라고 할때
"abcd".equals(a) 와 a.equals("abcd")와는 어떤 차이가 있을까?

일반적으로 동등 비교를 하게 된다면 null 이 아닐 가능성이 높은 객체를 기준으로 두고 비교를 하게된다.
"abcd" 나 "" 의 경우는 리터럴 이라고 해서 null일 수가 없다. 혹은 미리 자신이 만들어둔 객체. 즉 final String 을 사용할수 있다.
final 이 붙으면 객체 생성시. 게다가 static 까지 붙으면 클레스를 로드하는 시점에서 객체가 생성되지 않을수 없기 때문에 null일 가능성이 적다.
가능성이 적다. 라고 한것은 이것도 null 로 정의해버릴수 있기 때문이다.


이렇게 하는 프로그래밍을 방어적 프로그래밍 이라고 말하기도 한다고 들었다.(그냥 줏어 들은거니 책임은 없어영) 
이런 방법 말고도 방어복사라던가 하는 부분은 Effective Java 의 뒷부분에서 다루어질것이다.
Posted by 동적할당
: