1. 논리형 데이터 타입: boolean
이미 확인했듯이 Java에는 매우 유용한 제어문 — if-else가 있습니다. 괄호 안의 조건이 참이면 한 블록의 명령을, 조건이 거짓이면 다른 블록의 명령을 실행합니다.
참 또는 거짓이 될 수 있는 표현식을 편하게 다루기 위해 Java에는 특별한 타입 — boolean이 있습니다. 이 타입 변수의 가장 큰 특징은 단 두 가지 값만 가질 수 있다는 점입니다: true(참)와 false(거짓).
그 외의 값을 boolean 타입 변수에 대입하는 것은 불가능합니다. 컴파일러가 허용하지 않습니다.
boolean 타입 변수의 예:
boolean isAdult = true;
boolean hasMoney = false;
boolean 타입 변수의 값은 true와 false 두 가지뿐입니다. 끝! 성공한 테스트처럼 — “통과” 아니면 “실패”입니다.
2. 비교 연산
그렇다면 이렇게 단순한 타입이 왜 필요할까요? boolean의 진짜 위력은 우리가 논리 표현식을 만들 때 드러납니다. 보통은 비교 연산자를 이용해 만듭니다.
| 연산자 | 의미 | 예 | 값 |
|---|---|---|---|
| == | 같다 | |
true 또는 false |
| != | 같지 않다 | |
true 또는 false |
| > | 크다 | |
true 또는 false |
| < | 작다 | |
true 또는 false |
| >= | 크거나 같다 | |
true 또는 false |
| <= | 작거나 같다 | |
true 또는 false |
예:
int age = 20;
boolean isAdult = age >= 18; // true (20은 18보다 크거나 같다)
boolean isTeenager = age >= 13 && age < 18; // false (20은 18보다 작지 않다)
boolean isEven = age % 2 == 0; // true (20은 2로 나누어 떨어진다)
여기서는 isAdult가 true가 됩니다. 20은 정말로 “성인” 나이이니까요.
중요 포인트 1:
두 글자로 이루어진 연산자는 띄어 쓰면 안 됩니다.
a < = 10
speed > = max
age = = 18
time ! = 0
중요 포인트 2:
=>와 =< 같은 연산자는 없습니다. 오직 <=와 >=만 있습니다. 만약 a =< 3처럼 쓰면, 코드는 컴파일되지 않습니다.
중요 포인트 3:
Java에서는 18 < age < 65 형태로 표현할 수 없습니다. 왜냐하면 18 < age라는 표현식의 값은 true 또는 false가 되기 때문입니다. 그리고 true를 숫자(65)와 비교할 수는 없습니다 — 타입이 다릅니다.
3. 논리 연산
Java에서는 18 < age < 65 같은 표현을 쓸 수 없습니다 — 문법적으로 잘못이며 프로그램이 컴파일되지 않습니다.
대신 이렇게 쓸 수 있습니다:
(18 < age) I (age < 65)
물론 그리고라는 단어 대신 논리 연산자를 사용합니다. Java에는 세 가지 논리 연산자가 있습니다: AND(그리고), OR(또는), NOT(부정).
좋은 소식: 괄호를 사용하면 얼마든지 복잡한 논리식을 만들 수 있습니다.
나쁜 소식: Java에서는 and, or, not 같은 단어 대신 C 계열의 기호 &&, ||, !를 사용합니다.
| 논리 연산자 | 기대 | 실제 |
|---|---|---|
| 그리고 (∧) | and | && |
| 또는 (∨) | or | || |
| 부정 (¬) | not | ! |
다음은 Java에서 논리 연산자를 사용하는 몇 가지 예입니다:
| 표현식 | 해석 | 설명 |
|---|---|---|
|
(0 < a) and (a < 100) | (0 < a) 그리고 (a < 100) |
|
(not a) and (not b) | (아닌 a) 그리고 (아닌 b) |
|
not((not a) or (not b)) | 부정((아닌 a) 또는 (아닌 b)) |
4. 진리표
논리 연산을 간단히 훑어보겠습니다.
AND 연산자
AND 연산자, 즉 그리고, &&, 결합(컨정션, conjunction), 논리적 곱이라고도 합니다.
| 표현식 | 결과 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
OR 연산자
OR 연산자, 즉 또는, ||, 논리합(디스정션, disjunction), 논리적 합이라고도 합니다.
| 표현식 | 결과 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
NOT 연산자
NOT 연산자, 즉 부정, !, 반전(인버전)이라고도 합니다.
| 표현식 | 결과 |
|---|---|
| ! true | false |
| ! false | true |
유용한 항등식:
| 표현식 | 결과 |
|---|---|
| m && !m | false |
| m || !m | true |
| !(a && b) | !a || !b |
| !(a || b) | !a && !b |
5. 논리 연산 예시: and, or, not
연산 “그리고”(AND)는 &&로 표기합니다
두 조건이 모두 참일 때만 결과가 참입니다.
int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true (16은 14보다 크고 티켓이 있다)
나이가 14 이상이고 그리고 티켓이 있으면 — 통과!
연산 “또는”(OR)은 (||)로 표기합니다
둘 중 하나라도 참이면 결과는 참입니다.
boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true (둘 중 하나라도 true이면 편집할 수 있다)
관리자 또는 모더레이터라면 — 마음껏 버튼을 누르세요!
연산 “부정”(NOT)은 (!)로 표기합니다
부정은 참을 거짓으로, 거짓을 참으로 뒤집습니다.
boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true (주말이 아니면 일한다)
부정이 아니면 — 일어날 시간!
조합하기: 얼마든지 복잡한 조건을 만들 수 있습니다
논리 연산은 원하는 만큼 조합할 수 있습니다(너무 복잡하게 만들지만 마세요). 괄호는 가독성을 위해 적극적으로 사용하세요.
예:
int age = 17;
boolean hasTicket = false;
boolean isVip = true;
boolean canGo = (age >= 18 && hasTicket) || isVip; // true, 왜냐하면 isVip = true
논리: 성인이면서 티켓이 있거나 VIP라면 — 입장. VIP가 아니라면 성인이면서 티켓이 있을 때만 입장.
GO TO FULL VERSION