[Java] 조건식 연산자 제어문
📌 들어가며
이번 글에서는 조건식, 몇 가지 연산자, 그리고 제어문(삼항 → if → switch)을 다룬다. 특히 같은 문제(혈액형별 성격)를 삼항 → if → switch로 발전시키며, 각 제어문이 언제 편한지 감을 잡아본다.
1. 조건식과 boolean
조건식은 참/거짓 둘 중 하나가 나오는 식이다. C와 자바의 참·거짓 표현이 다르다.
| 언어 | 참 | 거짓 |
|---|---|---|
| C | 1 (0이 아닌 모든 수) | 0 |
| Java | true | false |
자바는 참/거짓을 담는 boolean 타입(1byte)을 따로 둔다.
1
boolean isTrue = 10 > 11; // false
2. 연산자 정리
| 분류 | 연산자 | 의미 |
|---|---|---|
| 관계 | == != | 같다 / 같지 않다 |
> < >= <= | 초과·미만·이상·이하 | |
| 논리 | && (AND) | 둘 다 참일 때 참 |
\|\| (OR) | 하나만 참이어도 참 | |
| 단항 | ! (NOT) | true↔false 반전 |
| 삼항 | ? : | 조건 ? 참 : 거짓 |
⚠️ 여전히 대입
=와 비교==를 구분해야 한다.
1
System.out.println(!(10 > 11 && 10 != 11)); // true
💡
!(...)에 괄호를 친 이유:!는 우선순위가 높아 괄호가 없으면!10이 되어버린다. 괄호로 묶어야10>11 && 10!=11(거짓) 전체를 반전해 true가 된다.
3. 삼항 연산자 — 그리고 그 한계
조건식 ? 참 : 거짓 형태다. 거짓 자리에 또 다른 삼항을 이어 연쇄할 수 있다.
1
2
3
4
// 두 정수 중 큰 값 (같은 경우까지 처리)
result = num1 > num2 ? "큰 값 :" + num1
: num1 == num2 ? "두 수는 같습니다"
: "큰 값: " + num2;
💡
num1 > num2가 거짓이라고 바로num2를 큰 값으로 단정하면 안 된다. 두 수가 같을 수도 있으므로, 거짓일 때 한 번 더 물어본다.
혈액형 예제로 확장하면 삼항이 급격히 길어진다.
1
2
3
4
5
result = choice == aBlood ? aMsg
: choice == bBlood ? bMsg
: choice == oBlood ? oMsg
: choice == abBlood ? abMsg
: "잘못입력하셨습니다.";
💡 여기서 메시지들을 미리 변수(
aMsg,bMsg…)로 선언한 점에 주목하자. 나중에 문구를 바꿀 때 한 곳만 고치면 되므로 유지보수가 쉽다. (개발자의 능력이 갈리는 지점!)
이처럼 삼항 연산자는 분기가 많아지면 길어지고 가독성이 떨어진다. 그럴 땐 if를 쓴다.
4. if 문
1
2
3
if (조건식) { ... }
else if (조건식) { ... }
else { ... } // 모든 조건이 거짓일 때
| 키워드 | 실행 조건 |
|---|---|
if | 조건이 참일 때 (독립적) |
else if | 앞이 거짓이고 자신이 참일 때 |
else | 앞선 모든 조건이 거짓일 때 |
큰 값 구하기를 if로 바꾸면 삼항보다 훨씬 읽기 편하다.
1
2
3
if (num1 > num2) result = "큰 값 : " + num1;
else if (num1 < num2) result = "큰 값 : " + num2;
else result = "두 수는 같습니다.";
5. switch 문
if마다 choice == ?를 반복하는 게 귀찮아지면 switch가 편하다.
1
2
3
4
5
6
7
switch (choice) {
case 1: result = aMsg; break;
case 2: result = bMsg; break;
case 3: result = oMsg; break;
case 4: result = abMsg; break;
default: result = errMsg;
}
⚠️ 각
case마다break를 넣어야 다음 case로 흘러내리지(fall-through) 않는다.
📝 정리
1
2
3
4
5
6
조건 · 연산자 · 제어문
├─ boolean Java는 true/false (C의 0/1과 다름)
├─ 연산자 관계 · 논리(&&,||) · 단항(!) · 삼항(?:)
├─ 삼항 간단하지만 분기 많으면 길고 난해
├─ if 분기가 복잡할 때 가독성↑
└─ switch 하나의 변수를 여러 값과 비교할 때 (break 필수)
| 제어문 | 언제 쓰나 |
|---|---|
| 삼항 | 분기 1~2개의 간단한 선택 |
| if | 조건이 복잡하거나 범위 비교 |
| switch | 하나의 값을 여러 경우와 비교 |
같은 문제를 삼항 → if → switch로 발전시키며, 분기가 늘수록 제어문이 유리하다는 걸 확인했다. 상황에 맞는 제어문을 고르는 감각이 중요하다.
Comments powered by Disqus.