Post

[Java] 조건식 연산자 제어문

📌 들어가며

이번 글에서는 조건식, 몇 가지 연산자, 그리고 제어문(삼항 → if → switch)을 다룬다. 특히 같은 문제(혈액형별 성격)를 삼항 → if → switch로 발전시키며, 각 제어문이 언제 편한지 감을 잡아본다.


1. 조건식과 boolean

조건식은 참/거짓 둘 중 하나가 나오는 식이다. C와 자바의 참·거짓 표현이 다르다.

언어거짓
C1 (0이 아닌 모든 수)0
Javatruefalse

자바는 참/거짓을 담는 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로 발전시키며, 분기가 늘수록 제어문이 유리하다는 걸 확인했다. 상황에 맞는 제어문을 고르는 감각이 중요하다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.