Developer MJ Story

[Java/Android] &, &&, |, || 연산에 대한 모든것과 활용 방안 본문

Software/Java

[Java/Android] &, &&, |, || 연산에 대한 모든것과 활용 방안

집근처 2016. 2. 18. 09:28
반응형

안녕하세요.

집근처 개발자 입니다.


오늘은 아주아주 기본 적이지만 아주아주 햇갈리는 &(and), |(or)연산에 대해 설명 드릴까 합니다.

어쩔때 &을 쓰고, 어쩔때는 &&를 쓰고........

개발자 마음대로 쓰는 것일까요??ㅋ

그건 아니고 아주아주 유용하게 사용할 수 있습니다.


먼저  &와 && 차이를 알려 드리겠습니다.


A & B 는 A가 false 이더라도 B까지 확인 합니다.

A && B는 A가 false 면 B까지 확인하지 않고 바로 false로 판단합니다. 


이것이 무슨 차이가 있는 것일 까요??

아래 코드를 보시면 차이가 있을 알 수 있으실 것입니다.


아래와 같이 코딩을 할 경우 어떻게 될까요?

A.equals("a")에서 이미 false이지만 & 연산은 B.equals.("b") 연산까지 하기 때문에 java.lang.NullPointerException이 발생하겠죠?

		String A = "A";
		String B = null;
		
		if(A.equals("a") & B.equals("b")){
			return true;
		}


그런데, 아래와 같이 && 연산을 할 경우 A.equals.("a")에서 false로 판단되서 B.equals.("b")를 연산하지 않기 때문에 java.lang.NullPointerException 발생하지 않겠죠?


		String A = "A";
		String B = null;
		
		if(A.equals("a") && B.equals("b")){
			return true;
		}


저는 이렇게 사용합니다.

조건문 수식을 세울때 해당 객체가 null인지 아닌지 확인할 때 자주 사용합니다.

이렇게 해놓으면 NullPointerException 예방 효과를 갖질 수 있습니다.


아래 코드는 android에서 bluetooth device를 검색해서 name을 받아 오는데 내가 아는 이름인지 확인 하는 조건문입니다.

아래와 같이 하지 않고 그냥 아래와 같이 하나의 조건문 수식만 넣을 경우 name 객체가 null 이면 NullPointerException이 발생하죠.

device.getName().equals(DEVICE_NAME) 

if(device.getName() != null && device.getName().equals(DEVICE_NAME))

내가 만든 객체라서 100% 보장되는 객체에 대한 조건문 수식이 아닌 경우 보험드는 차원에서 && 연산으로 null check해주시면 좋겠죠?

아! 그리고, |, || 연산도 동일하니 생략합니다!


문의 사항이 있으시면 덧글을 남겨 주세요~ㅋ


반응형