조건문: if, switch와 게임 점수 등급 계산
6강. 조건문: if, switch와 게임 점수 등급 계산
1. 이번 강의에서 해결할 문제
값을 저장하고 계산해도 모든 입력에 같은 문장만 출력하면 게임 규칙을 표현할 수 없습니다. 점수에 따라 등급을 고르고 모드별 보너스를 적용하려면 실행 경로를 나눠야 합니다. 이때 조건 순서가 뒤집히면 높은 점수가 낮은 등급을 받고, 처리하지 않은 모드가 조용히 잘못된 값으로 이어질 수 있습니다.
2. 학습 목표
3. 핵심 개념
조건문은 실행할 경로를 고릅니다
if는 괄호 안의 boolean 표현식이 true일 때 중괄호 블록을 실행합니다. else는 앞 조건이 거짓일 때, else if는 앞 조건이 거짓이면서 자신의 조건이 참일 때 실행됩니다.
int score = 120;
boolean canReceiveReward = score >= 100;
if (canReceiveReward) {
System.out.println("보상을 지급합니다.");
} else {
System.out.println("점수가 부족합니다.");
}
score >= 100은 숫자를 만드는 식이 아니라 true 또는 false를 만드는 비교식입니다. 중괄호는 조건에 속한 코드 범위를 표시합니다. 한 줄이어도 중괄호를 쓰면 코드를 추가할 때 실수로 조건 밖에 두는 문제를 줄일 수 있습니다.
한 체인에서는 처음 참인 블록 하나만 실행됩니다
점수 1,500은 score >= 900, score >= 1_200, score >= 1_500을 모두 만족합니다. 낮은 기준부터 검사하면 첫 조건에서 B를 선택하고 아래 조건을 보지 않습니다. 겹치는 하한 조건은 가장 높은 값부터 내려와야 합니다.
switch는 하나의 값에 따른 선택을 모읍니다
게임 모드처럼 하나의 값과 여러 후보를 정확히 비교할 때 switch를 사용하면 선택지를 한곳에서 볼 수 있습니다. 이 과정의 Java 버전에서는 case ... -> 값 형태의 switch 식으로 결과를 바로 만들 수 있습니다. default는 알려지지 않은 입력을 어떻게 처리할지 나타냅니다. 잘못된 입력을 0점으로 조용히 받아들일지, 오류로 거부할지는 요구사항에 따라 결정해야 합니다.
4. 가장 작은 예제로 시작하기
int score = 80;
if (score >= 100) {
System.out.println("목표 달성");
} else {
System.out.println("20점이 더 필요합니다.");
}
80 >= 100을 계산하면false입니다.- 첫 중괄호 블록을 건너뜁니다.
else블록의 문장을 출력합니다.
score를 정확히 100으로 바꾸면 >= 조건은 true가 됩니다. >를 사용하면 100은 거짓이므로 요구사항에 경계값 포함 여부를 먼저 정해야 합니다.
5. 코드 한 줄씩 이해하기와 실행 흐름
src/GradeCalculator.java 작성
실행 환경: 코드 편집기
실행 위치: C:\dev\game-records
실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.
대상 파일: src/GradeCalculator.java
public class GradeCalculator {
public static void main(String[] args) {
int score = 1_350;
String mode = "ranked";
String grade;
if (score >= 1_500) {
grade = "S";
} else if (score >= 1_200) {
grade = "A";
} else if (score >= 900) {
grade = "B";
} else {
grade = "C";
}
int modeBonus = switch (mode) {
case "ranked" -> 200;
case "casual" -> 50;
default -> 0;
};
System.out.println("등급: " + grade + ", 보너스: " + modeBonus);
}
}
PowerShell에서 컴파일·실행
실행 환경: Windows PowerShell
실행 위치: C:\dev\game-records
실행 전 확인: java -version과 javac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.
대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일
Set-Location C:\dev\game-records
javac -d out .\src\GradeCalculator.java
java -cp out GradeCalculator
예상 출력:
등급: A, 보너스: 200
점수 1,350의 흐름은 다음과 같습니다.
| 순서 | 검사 | 결과 | 동작 |
|---|---|---|---|
| 1 | 1350 >= 1500 | false | 다음 조건 검사 |
| 2 | 1350 >= 1200 | true | grade = "A", 체인 종료 |
| 3 | mode가 "ranked"인가 | 일치 | switch 식의 결과는 200 |
| 4 | 출력 | - | 등급: A, 보너스: 200 |
switch 식은 각 case가 값을 제공하므로 modeBonus에 바로 초기화할 수 있습니다. 모드를 "casual"로 바꾸면 등급은 그대로 A이고 보너스만 50으로 바뀝니다. 등급 판단과 모드 판단이 서로 다른 질문이므로 독립적으로 계산됩니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
10. 다음 강의 연결
한 점수의 등급과 모드 보너스를 선택할 수 있게 되었습니다. 다음 강의에서는 여러 경기 점수에 같은 판단을 반복 적용하고 반복 종료 조건을 제어합니다.
조건문: if, switch와 게임 점수 등급 계산 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.