논리 연산자란 논리곱(&&) , 논리합(||) , 배타적 논리합(^), 논리 부정(!) 의 기능을 수행하는 연산자를 의미합니다. 논리 연산자의 피 연산자는 boolean 타입만이 가능합니다. 논리 연산자의 종류와 기능을 봅시다.
논리곱(AND)
피 연산자가 전부 참(true)일 경우에만 연산 결과가 참이 산출 됩니다. 그 이외의 경우는 모두 거짓(false)입니다.
기호는 & 또는 &&를 사용합니다.
연산식 |
연산 결과 |
true (& 또는 &&) true |
true |
true (& 또는 &&) false |
false |
false (& 또는 &&) true |
false |
false (& 또는 &&) false |
false |
논리합(OR)
이 연산자는 | 또는 || 기호를 사용 합니다. ( | 기호는 키보드의 \키 위에 있는 기호)
피 연산자가 하나라도 true(참)가 있으면 연산 결과는 true가 나옵니다. 즉 피 연산자가 둘 다 false(거짓)일 경우에만 거짓이 나옵니다.
연산식 |
연산 결과 |
true ( | 또는 ||) true |
true |
true ( | 또는 ||) false |
true |
false ( | 또는 ||) true |
true |
false ( | 또는 ||) false |
false |
배타적 논리합(XOR)
기호는 ^( 숫자 6위의 기호)를 사용합니다.
이 연산자는 피 연산자가 서로 다른 boolean값을 갖는 경우에만 true(참)의 연산 결과가 산출 됩니다.
연산식 |
연산 결과 |
true ^ true |
false |
true ^ false |
true |
false ^ true |
true |
false ^ false |
false |
논리 부정(NOT)
이 연산자의 기호는 ! 입니다.
피 연산자의 boolean 값을 반대로 바꾸어 주는 기능을 합니다.
위 의 논리 연산자들이 피 연산자가 2개 필요한 이항 연산자임에 비하여 논리 부정 연산자는 피 연산자가 1개인 단항 연산자입니다.
true 값은 false로 false 값은 true 로 변환 시켜 줍니다.
&& 연산자 와 & 연산자
이 둘은 결과 값은 같지만 그 산출 과정이 다릅니다. & 연산자는 피 연산자 두 개를 모두 보고 결과 값을 냅니다. 그러나 &&연산자는 좌측 피 연산자가 false이면 더 이상 우측 피 연산자를 보지 않고 바로 false값을 산출 합니다. 피 연산자 중 1개라도 false면 어차피 결과가 false이기 때문입니다.
그래서 &보다는 &&가 속도 면에서 더 효율적이라고 할 수 있습니다.
|| 연산자 와 | 연산자
이 두 연산자도 위의 && 와 & 같이 동일한 차이점이 있습니다. 즉, || 연산자 좌측 피 연산자가 true(참)이면 우측 피 연산자를 더 이상 보지 않고 결과 값 true를 산출합니다.
한 개의 피 연산자라도 true 면 어차피 전체 연산식의 결과는 true 이기 때문입니다. 이에 비하여 |연산자는 두 피 연산자의 값을 모두 따져 봅니다. 속도 측면에서 당연히 ||연산이 더 우수합니다.
제어문의 조건식에 주로 사용
논리 연산자는 주로 조건문(if) , 반복문(for, while , do~while) 등 실행 흐름을 제어하는 제어문에 주로 사용 됩니다. if 문에서 사용된 논리 연산자를 아래 예제를 통해서 알아 봅시다.
public class Example {
public static void main(String[ ] args) {
int character = 'A';
if( (character>=65) & (character<=90) ) { // 참이므로 아래 문장이 실행된다.
System.out.println("대문자 입니다.");
}
if( (character>=97) && (character<=122) ) { // character>=97 이 거짓이므로
System.out.println("소문자 입니다."); // 더 이상 판단하지 않고 빠져나감
}
if( !(character<48) && !(character>57) ) { // character<48 이 거짓이다.
System.out.println("0~9 숫자 입니다."); // 더 이상 판단하지 않고 빠져나감
}
int number = 6;
if( (number%2==0) | (number%3==0) ) { // 참이므로 실행된다.
System.out.println("2 또는 3의 배수 입니다.");
}
if( (number%2==0) || (number%3==0) ) { //참이므로 실행된다.
System.out.println("2 또는 3의 배수 입니다.");
}
}
실행 결과는 다음과 같습니다.
대문자 입니다.
2 또는 3의 배수입니다.
2 또는 3의 배수입니다.