2011년 4월 25일 월요일

자바의 논리연산자(&&,||)

논리야 놀자~^^ 오늘은 자바의 논리연산자인 &&(AND)와 ||(OR)의 기능에 대해서 알아보기로 하자.

A && B
A 그리고 B, A와 B가 모두 true일때만 그 결과도 true이다.
다른 말로, 어느 한쪽이 false라면 그 결과도 false이다.

A || B
A 또는 B, A와 B에서 어느 한쪽만 true라도 그 결과는 true이다.
다른 말로, 둘다 false라야 그 결과도 false이다.

위의 말만 이해하면 어떤 상황이 닥쳐도 저절로 다 이해가 될것이다. 자바의 논리연산자를 설명하기 위해 강이도 여러가지 도표나 수식들로 멋드러지게 폼(?)을 잡아보려고 했으나 자바를 열심히 공부하는 여러분을 위해 자제하기로 했으니 더욱더 분발해주기 부탁한다.

심층학습을 위해 아래 예제를 직접 쳐보고 결과가 어떻게 나올지 실행하기전에 생각해본다. 그리고 실행해서 맞춰보라. 다 맞았는가? 한두개 정도는 틀려도 실망할건 없다. 틀렸다면 위의 설명을 다시 한번 읽어보면 이해가 될것이다.
예제에서 &&나 ||인 논리연산자가 한번 나왔을때는 별로 어렵지 않았을 것이나 이게 두번 세번되면 가물가물해지는 경우가 있다. 허나 필자의 강좌를 숙지한 이들이 이 정도 레벨에 굴복(?)하지는 않을거라 믿는다.^^ 그럼 중요한 사항만 짚고 넘어가겠다.

예제에서 아래와 같은 구문이 있다.
System.out.println(10==10 && 10>20);

비교연산자와 논리연산자가 함께 있다. 괄호가 없어 애매모호할 것이다. 이렇게 비교와 논리가 함께 놀 경우 비교연산자 즉 관계연산자가 먼저 처리된다. 따라서 계산의 순서는 아래와 같이 될 것이다.

10==10 && 10>20
true && false
false

그럼 다음 &&(그리고, AND) 구문을 보자.
System.out.println((10<20) && (20<30) && (30<=40));

괄호까지 있으니 보기 편할 것이다. 관계연산자부터 차례차례 계산한 다음에 논리연산자 계산하면 된다. 20이 10보다 크냐고 물었으니 참이고 30이 20보다 크냐고 물었으니 참이고 40이 30보다 크거나 같냐고 물었는데 뭘까? 저번 시간에 배웠는데 모른다고 하진 않겠지? ^^ 거짓이 아니고 참이다. 40과 30이 같지는 않지만 크기는 하다. 따라서 한쪽이라도 맞으니 참이다. 한국말 참 어렵다.ㅎㅎ 순서대로 정리하면 다음과 같다.

(10<20) && (20<30) && (30<=40)
true && true && true
true

만약에 하나라도 false가 나왔으면 답이 false일텐데 그냥 찍어도 맞출수 있는 문제를 낸것 같다.ㅋㅋ 그럼 이제 ||(또는, OR) 예를 보자.

System.out.println(10!=20 || 10>20);

아까 배운대로 관계연산자부터 처리한다. 10과 20이 같지 않은게 맞는지 묻는거다. 같지 않으면 true, 같으면 false가 된다. 저번 강좌에서 이 부분을 무지 강조했으니 틀리는 이가 없길 바라면서 다음은 당연히 10이 20보다 크지 않으니까 false이다. 그러면 첫번째는 숫자가 같지 않으니까 true이고 두번째는 20이 더 크니까 false이다. OR 구문이므로 전체는 한쪽만 맞으면 되니까 true이다. 잠 깨라고 표현을 일부러 이리저리 돌려가면서 쓰고 있다. 정신 바짝 차리면 이해될꺼다.^^

System.out.println((10>20) || (20>30) || (30<=40));

자, 조금만 더 하자. 마지막이다. 거침없이 하이킥(?)이다. 첫번째는 10이 더 크지 않으니까 틀렸고 두번째도 20이 더 크지 않으니까 틀렸고 세번째는 30이 40보다 작은건 맞는데 30이랑 40이랑 같냐고 물으니 당연히 아니니까 틀렸고 따라서 답은 다 틀렸으니 당근 false다. 이렇게 답 내는 이가 있으면 완전 실망 --, 마지막에 30이 40보다 작은게 맞으니까 다른거 볼것도 없이 참이다. 관계연산자 두개가 같이 나오면 한쪽만 맞아도 참인 것이다. 또한 OR 구문이므로 전체 정답도 true이다. 딴거 다 틀렸어도 마지막게 맞았으니 참이 된다. 이것이 바로 || 의 매력인 것이다.

맨위에 간략하게 &&와 ||의 정의를 썼지만 그래도 어려워하는 이들을 위해 오직 하나, 단 한줄로 심플하게 자바의 논리연산자를 요약해 보겠다. 잠시나마 무한감동(?)을 느끼기 바란다.

&&
하나라도 틀리면 가차없이 false

||
하나라도 맞으면 무조건 true

오늘의 핵심사항은 위의 두줄이다. 고작 이 두줄 갖고 이렇게 오래 설명했다고 필자를 탓하는 이(?)는 절대 없어야 할것이다. 왜냐? 여러분이 자바를 접하는 동안 이 두줄이 여러분을 주구장창 먹여살릴 것이기 때문이다. ^^ 그럼 끝내기에 앞서 예제의 결과값을 공개한다. 그냥 맞춰보지만 말고 자바로 꼭 본인이 직접 실행해 보기 바란다~

AND 예제
true
false
false
false
true

OR 예제
true
false
true
true
true

댓글 1개:

  1. 포풍 감동입니다. 정주행 잘하고있습니다 ㅠ_ㅜ

    답글삭제