목록으로

[자바 기초] 5강. 프로그램에게 지능 심어주기: 조건문(if, switch) 완벽 가이드

지난 시간 복습과 이번 강의 목표

지난 4강까지 우리는 계산기처럼 입력받은 숫자를 더하거나 나누는 법을 배웠습니다. 하지만 아직 2% 부족합니다.

"시험 점수가 60점 이상이면 '합격', 아니면 '불합격'을 띄워줘."

이런 간단한 논리조차 아직 구현할 수 없으니까요. 이번 시간에는 프로그램의 실행 흐름을 내 마음대로 바꾸는 **제어문(Control Flow)**의 첫 번째 주자, 조건문을 배워보겠습니다. 이것만 알면 여러분의 프로그램은 드디어 **'지능'**을 갖게 됩니다.


1. 만약에 말이야: if 문 (가장 기본)

if는 영어 뜻 그대로 **"만약 ~라면"**입니다. 괄호 () 안의 조건이 **참(True)**일 때만 중괄호 {} 안의 코드를 실행합니다.

int score = 80;

if (score >= 60) {
    System.out.println("축하합니다! 합격입니다.");
}
  • 점수가 80점이니 60점보다 크죠? (참) -> "합격입니다" 출력.
  • 만약 점수가 50점이었다면? (거짓) -> 아무 일도 일어나지 않습니다.

양자택일: if - else

"합격만 알려주고 불합격은 무시하나요?" 아닙니다. 조건이 거짓일 때 실행할 코드는 **else (그렇지 않으면)**에 적으면 됩니다.

if (score >= 60) {
    System.out.println("합격입니다.");
} else {
    System.out.println("아쉽지만 불합격입니다.");
}

2. 선택지가 여러 개일 때: else if

세상사가 합격/불합격처럼 딱 두 개로 나뉘진 않죠. 학점(A, B, C, F)이나 등급을 나눌 때는 **else if**를 사용해서 조건을 계속 추가할 수 있습니다.

if (score >= 90) {
    System.out.println("등급: A");
} else if (score >= 80) {
    System.out.println("등급: B");
} else if (score >= 70) {
    System.out.println("등급: C");
} else {
    System.out.println("등급: F (재수강)");
}

💡 선생님의 팁: 위에서부터 순서대로 조건을 검사하며 내려옵니다. 만약 95점이라면? 첫 번째 score >= 90에 걸려서 "A"를 출력하고, 나머지 밑에 있는 코드들은 쳐다보지도 않고 빠져나갑니다. (효율적이죠?)


3. 딱 떨어지는 값: switch 문

조건이 범위(이상, 이하)가 아니라, 1번, 2번 메뉴처럼 딱 떨어지는 값일 때는 switch 문이 더 깔끔합니다.

(1) 구형 방식 (Classic Switch)

오랫동안 쓰여온 전통적인 방식입니다. break를 꼭 써줘야 하는 단점이 있습니다.

int key = 1;

switch (key) {
    case 1:
        System.out.println("관리자 모드");
        break; // 이거 안 쓰면 밑에 것까지 다 실행됨! (치명적 단점)
    case 2:
        System.out.println("사용자 모드");
        break;
    default:
        System.out.println("잘못된 입력");
}

(2) 신형 방식 (Java 14+ Enhanced Switch) ⭐

지금(2026년) 배우는 분들은 이 방식을 더 추천합니다. 화살표(->)를 사용해서 break 없이도 깔끔하게 작성할 수 있습니다.

int key = 1;

switch (key) {
    case 1 -> System.out.println("관리자 모드");
    case 2 -> System.out.println("사용자 모드");
    default -> System.out.println("잘못된 입력");
}

훨씬 직관적이죠? 실무에서는 이제 이 방식이 대세입니다.


4. 실전 예제: 학점 계산기 만들기

오늘 배운 Scannerif-else if를 합쳐서 완벽한 학점 계산기를 만들어봅시다. src/Main.java에 작성해 보세요.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("=== 2026 대학교 학점 계산기 ===");
        System.out.print("이번 학기 점수를 입력하세요(0~100): ");
        int score = sc.nextInt();

        // 유효성 검사 (이상한 점수 걸러내기)
        if (score < 0 || score > 100) {
            System.out.println("에러: 점수는 0에서 100 사이여야 합니다.");
        } else {
            // 정상적인 점수라면 학점 계산 시작
            String grade; // 학점을 담을 변수

            if (score >= 90) {
                grade = "A";
            } else if (score >= 80) {
                grade = "B";
            } else if (score >= 70) {
                grade = "C";
            } else if (score >= 60) {
                grade = "D";
            } else {
                grade = "F";
            }

            System.out.println("당신의 점수는 " + score + "점이고,");
            System.out.println("학점은 [" + grade + "] 입니다.");

            // 보너스: 응원 메시지
            if (grade.equals("F")) {
                System.out.println("팁: 교수님께 메일을 보내보세요...");
            }
        }
    }
}

실행 결과

=== 2026 대학교 학점 계산기 ===
이번 학기 점수를 입력하세요(0~100): 55
당신의 점수는 55점이고,
학점은 [F] 입니다.
팁: 교수님께 메일을 보내보세요...

5. 자주 하는 실수 (Error Case)

  1. 같다는 표시는 == 입니다. (지난 시간에 강조했죠?)
    • if (score = 100) -> 에러! (100을 넣으라는 뜻이 됨)
    • if (score == 100) -> 정답! (100과 같니?)
  2. 문자열 비교는 .equals()
    • 숫자는 ==로 비교하지만, Stringgrade.equals("A") 처럼 비교해야 정확합니다. (이건 나중에 심화 과정에서 이유를 알려드릴게요.)

6. 마무리

이제 여러분의 프로그램은 입력값에 따라 다르게 행동하는 **'판단력'**을 갖췄습니다. 하지만 아직 한계가 있습니다. 만약 학생이 100명이면? 코드를 100번 실행해야 할까요?

컴퓨터가 제일 잘하는 건 **'단순 반복'**입니다. 다음 **[6강]**에서는 컴퓨터에게 노가다를 시키는 기술, **반복문(for, while)**에 대해 배워보겠습니다. 구구단 100단을 0.1초 만에 만드는 마법을 보여드리죠.

👉 6강 바로가기: 노가다는 컴퓨터에게, 반복문(Loop)