2011년 4월 25일 월요일

자바의 관계연산자(==, !=, <, >, <=, >=)

* 결과값은 맨뒷장에서 보여줄 예정이니 미리 보지말것!

이번에는 자바의 관계연산자(==, !=, <, >, <=, >=)에 대해서 알아보겠다. 일단 위의 프로그램을 짜면서 실행하기전에 어떤 답이 나올지 미리 생각해보기 바란다. 관계연산자는 여러분이 잘아는 서로 크고 작음을 비교를 하는 연산자인데 비교를 하는거니까 당연히 뭔가를 물어보는 조건문에서 많이 사용되며 결과값으로 boolean타입 즉 참(true)이나 거짓(false)을 알려준다. 관계연산자 혹은 비교연산자 다 같은 말이다.

a == b, a와 b가 같니?
a != b, a와 b가  같지 않지? 네^^ 같지 않아요. (같지 않으면 true, 같으면 false)
a < b, b가 a보다 크니?
a > b, a가 b보다 크니?
a <= b, b가 a보다 크거나 같지 않니?
a >= b, a가 b보다 크거나 같지 않니?

관계연산자를 이용하면 크게 위와같이 6가지 형식으로 질문을 하는것과 같다. 너무 쉬워서 서서히 졸려울거다.ㅎㅎ 그래서 준비했다. 이것은 무엇일까?

!(1==1)

참일까 거짓일까? 답을 생각해보고 위의 질문을 자바에 넣고 한번 실행해 보자. 물론 자바에 넣을때는 이렇게 넣으면 된다.

System.out.println(!(1 == 1));

괄호가 많으니 정신(?)없을지도 모르겠다. 저번에도 언급한적 있지만 중간에 띄워쓰기나 빈줄은 자바에서 인식하지 않으니 연산부호 양옆을 띄워서 쓰면 보기 편하다. 이런 표현방식이 때때로 쓰이는데 확실하게 알아두지 않으면 혼동하기 쉽다. 이걸 명확하게 푸는 비책(?)을 소개한다.

!(1==1)
1 == 1, 1이랑 1은 같으니까 true
!(true), true를 아니라고 틀렸다고 말하니까 false

위와같이 고수들만 떠올린다는 삼단논법(?)으로 해석해나가면 이런 조건문을 만나도 겁먹을 필요가 없다. 즉, 괄호부터 처리하면 된다. 이제 비책을 얻었으니 테스트 삼아 아래를 실험해보기 바란다.

!(1!=1)

모르면 항상 정답을 알려주는 자바를 돌려보도록 한다. 위에서 보충 설명하였지만 이 부분은 상당히 틀리기 쉬운 부분이다. 1과 1이 같으니까 무심코 자기도 모르게 참(우리말에서 강조형으로 묻는 "그렇지 않니?"의 의미가 아니다.), 그 다음에 그것을 부정하니까 거짓, 따라서 답을 false라고 말하는 이가 생각보다 많을 것이다. 허나 정답은 true다. 같지 않은지 물었는데 같지 않아야 참이다. 허걱~ 이것을 맞춘 똘똘한 이가 그래도 한명(?)쯤은 있었길 빈다. 여기서는 숫자가 1과 1 즉 값이 같다. 따라서 처음에 false가 된다. 그 다음에 !(false)를 구하는게 된다. 그러면 true가 나온다. 프로그램 짜면서 순간적으로 실수하기 쉬운 부분이니 확실히 알고 넘어가기 바란다.

!(1<=1)

기호 많으니까 어려워 보이남? 필자가 비책을 선물로 주었는데 무슨 걱정을 하는가? 아끼지 말고 쓰도록 해라. 안쓰면 썩는다. ㅎㅎ

1<=1, 1이 1보다 크거나 같니? 한쪽만 성립하면 참이다. 따라서 참이다.
!(true), true가 아니라면? 당연히 거짓이 된다.

자 그럼 이제는 직접적으로 물어보겠다. 이렇게 물으면 또 가슴철렁하는 이가 있더라.

!!!true

답이 뭘까? 비책을 울어먹어라. 다를게 하나도 없으니까 말이다. 답은 false (true의 반대, 반대, 그리고 반대는?) 이렇게 묻는것과 같다. 설마 ! 이거 많아가지고 아 복잡하다 그러는 사람은 없겠지? 그래도 혹시나 몰라 이것도 골이 아파서 못하겠다는 이들한테 필자가 또 하나의 비기(?)를 선물하겠다. 잘 들어라. "홀수면 반대로, 짝수면 원래대로"다. ! 많을때 아주 빨리 계산하는 필자만의 비기이니 많은 이들에게 널리 퍼뜨려 자바 세상을 이롭게 하라. ㅎㅎ

마지막으로 하나만 더 주의깊게 살펴보자.

a = b
a == b

위의 두가지가 똑같은 의미라고 생각하면 큰 오산이다. 소스를 짜다보면 자기도 모르게 혼동하는 이들이 있는데 첫번째는 변수 a에 변수 b의 값을 넘겨주라는 얘기고 두번째는 변수 a와 변수 b의 값이 같다는 의미다. 이번 시간 이후로 이 부분에 대해서는 착각하는 이가 없길 바란다.

자, 오늘은 조건문에서 시도때도 없이 쓰이는 관계연산자에 대해서 알아보았다. 저번에 배운 "증감연산자", 이번에 배운 "관계연산자", 그리고 다음에 배울 "논리연산자"는 결과값을 도출해내기 위해 테스트할때 자바에서 아주 많이 쓰이는 부분이니 자유자재로 써먹을수 있도록 열심히 익히기 바란다. 그리고 맨위에 보여준 예제의 결과값은 아래와 같다.

true
false
false
true
false
true
=====
false
true
false
true
false
true

댓글 1개: