[자바 기초] 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. 실전 예제: 학점 계산기 만들기
오늘 배운 Scanner와 if-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)
- 같다는 표시는
==입니다. (지난 시간에 강조했죠?)if (score = 100)-> 에러! (100을 넣으라는 뜻이 됨)if (score == 100)-> 정답! (100과 같니?)
- 문자열 비교는
.equals()- 숫자는
==로 비교하지만,String은grade.equals("A")처럼 비교해야 정확합니다. (이건 나중에 심화 과정에서 이유를 알려드릴게요.)
- 숫자는
6. 마무리
이제 여러분의 프로그램은 입력값에 따라 다르게 행동하는 **'판단력'**을 갖췄습니다. 하지만 아직 한계가 있습니다. 만약 학생이 100명이면? 코드를 100번 실행해야 할까요?
컴퓨터가 제일 잘하는 건 **'단순 반복'**입니다. 다음 **[6강]**에서는 컴퓨터에게 노가다를 시키는 기술, **반복문(for, while)**에 대해 배워보겠습니다. 구구단 100단을 0.1초 만에 만드는 마법을 보여드리죠.