목차
1. 조건문이란?
📌 조건문
말 그대로 어떤 조건을 기준으로 코드의 실행 흐름을 제어하는 문장입니다.
쉽게 말해, “어떤 조건이 참이면 실행하고, 아니면 실행하지 않는다”는 구조입니다.
if (조건식) {
// 조건이 참일 때 실행될 코드
}
이처럼 조건문은 우리가 어떤 상황에서
“이럴 땐 이렇게 하고, 저럴 땐 저렇게 한다”와 같은 선택을 내릴 수 있게 해줍니다.
📌 예시 상황
- 배고프면 밥을 먹는다.
- 시험 점수가 90점 이상이면 A학점을 준다.
- 나이가 20살 이상이면 성인으로 간주한다.
위처럼 프로그램도 조건에 따라 다르게 동작해야 할 때 조건문을 사용합니다.
📌 조건식과 boolean의 관계
조건문은 조건식을 평가한 결과가 true 또는 false인지에 따라 실행 여부를 결정합니다.
즉, 조건식은 항상 boolean 타입으로 평가됩니다.
| 조건식 예시 | 결과 |
| 3 > 2 | true |
| 10 == 5 | false |
| num % 2 == 0 | num이 짝수인지 확인 |
int a = 10;
if (a > 5) {
System.out.println("a는 5보다 큽니다.");
}
📌 조건문 if vs switch 비교
| 비교 항목 | if 문 | switch 문 |
| 조건 비교 방식 | 논리 표현식 (true/false로 평가되는 조건식) | 정확한 값 비교 (정수, 문자, 문자열 등) |
| 비교 대상 | 숫자, 문자, 문자열, boolean, 실수 등 모든 타입 | 정수, 문자, 문자열 (단, 실수/boolean은 불가) |
| 복잡한 조건 | 복합 조건 (&&, ` | |
| 가독성 | 조건이 많아지면 복잡해질 수 있음 | case 단위로 보기 쉬움 |
| 유연성 | 훨씬 유연함. 모든 조건/로직 가능 | 비교값이 제한적, 대소 비교 불가능 |
| 버전 제한 | 모든 Java 버전에서 동일 | 문자열 비교는 Java 7 이상부터 가능 |
| 실행 흐름 제어 | else, else if 등으로 흐름 제어 가능 | break 필요. 없으면 fall-through 발생 |
언제 어떤 것을 쓰면 좋을까?
📌 if 문을 사용하는 것이 좋은 경우
- 조건이 복잡한 논리식일 때
→ 예: score >= 90 && score < 95 - 조건이 범위에 기반할 때
→ 예: if (age >= 18 && age <= 65) - 조건 값이 boolean, 실수, 객체의 상태 등일 때
- 모든 조건을 세밀하게 조합하고 싶을 때
📌 switch 문을 사용하는 것이 좋은 경우
- 값 자체가 명확한 분기일 때
→ 예: 메뉴 선택, 요일, 등급(A/B/C…), 상태 값 - 정수, 문자, 문자열 같은 값 비교에 최적화된 상황
- 다중 조건 분기를 빠르게 나열하고 싶을 때
- 코드를 간결하고 깔끔하게 보이게 하고 싶을 때
2. if문
📌 if문 기본 구조
Java의 if문은 다음과 같은 기본 구조를 가집니다:
- 조건식이 true이면 중괄호 {} 내부의 코드가 실행됩니다.
- 조건식이 false이면 {} 내부의 코드는 무시됩니다.
if (조건식) {
// 조건식이 true일 때 실행되는 코드
}
📌 단독 if문 실습 예제
예제: 입력한 숫자가 짝수인지 확인

import java.util.Scanner;
public class EvenChecker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 하나를 입력하세요: ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println("입력한 숫자는 짝수입니다.");
}
System.out.println("프로그램을 종료합니다.");
}
}
실행 결과
숫자 하나를 입력하세요: 4
입력한 숫자는 짝수입니다.
프로그램을 종료합니다.
숫자 하나를 입력하세요: 5
프로그램을 종료합니다.
짝수가 아닐 경우 조건이 거짓이므로 출력되지 않으며, 프로그램은 계속 진행됩니다.
📌 중첩 if문 실습 예제
예제: 입력한 숫자가 양수이면서 짝수인지 확인

import java.util.Scanner;
public class PositiveEvenChecker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 하나를 입력하세요: ");
int num = sc.nextInt();
if (num > 0) {
if (num % 2 == 0) {
System.out.println("입력한 숫자는 양수이면서 짝수입니다.");
}
}
System.out.println("프로그램을 종료합니다.");
}
}
실행 결과
숫자 하나를 입력하세요: 4
입력한 숫자는 양수이면서 짝수입니다.
프로그램을 종료합니다.
숫자 하나를 입력하세요: -6
프로그램을 종료합니다.
숫자 하나를 입력하세요: 3
프로그램을 종료합니다.
조건문 안에 조건문을 또 사용하는 방식이 중첩 if문입니다
3. if-else문 과 조건 분기 처리
📌 if-else 문 구조
- 조건이 참이면 if 블록 실행,
- 조건이 거짓이면 else 블록 실행
즉, 두 코드 중 하나만 무조건 실행되는 구조입니다.
if (조건식) {
// 조건식이 true일 때 실행
} else {
// 조건식이 false일 때 실행
}
📌 조건 분기 흐름 이해
int age = 20;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
- age가 18 이상이면 → "성인입니다."
- 아니라면 → "미성년자입니다."
조건에 따라 프로그램의 흐름이 분기되는 구조입니다.
📌단일 조건 분기 실습
예제: 홀수 / 짝수 구분

import java.util.Scanner;
public class OddEvenChecker {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요: ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println("입력하신 숫자는 짝수입니다.");
} else {
System.out.println("입력하신 숫자는 홀수입니다.");
}
System.out.println("프로그램을 종료합니다.");
}
}
실행 결과
정수를 입력하세요: 4
입력하신 숫자는 짝수입니다.
프로그램을 종료합니다.
정수를 입력하세요: 7
입력하신 숫자는 홀수입니다.
프로그램을 종료합니다.
짝수인지 아닌지 둘 중 하나는 반드시 결정되므로 if-else문이 적절합니다.
📌 중첩 if-else 흐름 실습
복잡한 조건은 if-else문 안에 또 다른 if문을 넣어 중첩 구조로 만들 수 있습니다.
예제: 숫자의 부호 + 홀짝 판별

import java.util.Scanner;
public class NestedIfElse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수를 입력하세요: ");
int num = sc.nextInt();
if (num >= 0) {
// 0 이상이면
if (num % 2 == 0) {
System.out.println("입력하신 숫자는 양수이며 짝수입니다.");
} else {
System.out.println("입력하신 숫자는 양수이며 홀수입니다.");
}
} else {
System.out.println("입력하신 숫자는 음수입니다.");
}
System.out.println("프로그램을 종료합니다.");
}
}
실행 결과
정수를 입력하세요: 4
입력하신 숫자는 양수이며 짝수입니다.
프로그램을 종료합니다.
정수를 입력하세요: -5
입력하신 숫자는 음수입니다.
프로그램을 종료합니다.
조건을 단계별로 분기하면서 더 세부적인 판단을 할 수 있습니다.
4. if-else-if문과 다중 분기 처리
📌 if-else-if 구조와 필요성
- 조건을 위에서부터 차례로 검사하고,
- 처음으로 true인 조건의 코드 블록만 실행
- 조건이 많을수록 더 다양한 분기 처리가 가능
if (조건1) {
// 조건1이 true일 때 실행
} else if (조건2) {
// 조건2가 true일 때 실행
} else if (조건3) {
// 조건3이 true일 때 실행
} else {
// 모든 조건이 false일 때 실행
}
📌 다중 조건 실습
예를 들어, 어떤 사람이 "금도끼", "은도끼", "쇠도끼" 중 하나를 선택하는 상황이 있다고 가정해보겠습니다.
선택에 따라 결과가 달라지면, 다음과 같이 if-else-if문을 활용합니다.
import java.util.Scanner;
public class AxeStory {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("산신령이 금도끼, 은도끼, 쇠도끼를 들고 나타났습니다.");
System.out.print("어느 도끼가 너의 도끼냐? (1. 금도끼, 2. 은도끼, 3. 쇠도끼): ");
int answer = sc.nextInt();
if (answer == 1) {
System.out.println("거짓말쟁이! 도끼를 줄 수 없다!");
} else if (answer == 2) {
System.out.println("욕심은 적지만 그래도 거짓말이구나!");
} else {
System.out.println("정직하구나! 세 도끼를 모두 가져가거라!");
}
System.out.println("산신령은 연못 속으로 사라졌습니다.");
}
}
실행 결과
어느 도끼가 너의 도끼냐? (1. 금도끼, 2. 은도끼, 3. 쇠도끼): 2
욕심은 적지만 그래도 거짓말이구나!
산신령은 연못 속으로 사라졌습니다.
선택지에 따라 서로 다른 결과가 출력됩니다.
📌 실습
1) 기본형 (중첩 조건 활용)
import java.util.Scanner;
public class GradeCheck {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학생 이름을 입력하세요: ");
String name = sc.nextLine();
System.out.print("점수를 입력하세요: ");
int score = sc.nextInt();
String grade = "";
if (score >= 90) {
grade = "A";
if (score >= 95) grade += "+";
} else if (score >= 80) {
grade = "B";
if (score >= 85) grade += "+";
} else if (score >= 70) {
grade = "C";
if (score >= 75) grade += "+";
} else if (score >= 60) {
grade = "D";
if (score >= 65) grade += "+";
} else {
grade = "F";
}
System.out.println(name + "의 등급은 " + grade + "입니다.");
}
}
2) 개선형 (중복 제거 + 범용성)
import java.util.Scanner;
public class GradeEfficient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학생 이름을 입력하세요: ");
String name = sc.nextLine();
System.out.print("점수를 입력하세요: ");
int score = sc.nextInt();
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";
}
// + 부여 조건: 60점 이상 && 일의 자릿수가 5 이상 or 100점
if (score >= 60 && (score % 10 >= 5 || score == 100)) {
grade += "+";
}
System.out.println(name + "의 등급은 " + grade + "입니다.");
}
}
5. switch문
📌 switch문
- switch문은 여러 개의 값 중 하나와 일치하는 경우에 특정 코드 블록을 실행하는 조건문입니다.
- 위에서부터 차례대로 case 값을 비교하고, 일치하는 case의 코드를 실행합니다.
- break 키워드가 없으면 아래로 계속 실행됨 (fall-through)
switch (변수 또는 식) {
case 값1:
// 값1과 일치하면 실행
break;
case 값2:
// 값2와 일치하면 실행
break;
...
default:
// 일치하는 case가 없을 때 실행
}
📌 비교 대상 제약 (switch문의 조건값)
switch문은 아래와 같은 값들과 비교할 수 있습니다:
| 비교 가능 타입 | 예시 |
| 정수 (int, byte, short, char) | case 1: case 'A': |
| 문자열 (String) – Java 7 이상 | case "apple": |
실수형(float, double), boolean은 사용 불가!
- Java 1.6 이하에서는 문자열 비교 불가!
- 문자열 비교는 equals()를 내부적으로 사용하므로 null인 경우 NullPointerException 발생 가능
📌 break 키워드의 역할
- break는 해당 case 실행 후 switch문을 빠져나가기 위한 필수 키워드입니다.
- break가 없으면 다음 case로 계속 실행됨 → 원하지 않는 실행 흐름이 생김
📌 실습: 간단 계산기 만들기
목표
- 정수 2개, 연산자 기호 입력
- 입력한 기호에 따라 사칙연산 수행
- switch문으로 연산자 처리
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 정수 입력: ");
int num1 = sc.nextInt();
System.out.print("두 번째 정수 입력: ");
int num2 = sc.nextInt();
System.out.print("연산 기호 입력 (+, -, *, /, %): ");
char op = sc.next().charAt(0);
int result = 0;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) result = num1 / num2;
else System.out.println("0으로 나눌 수 없습니다.");
break;
case '%':
result = num1 % num2;
break;
default:
System.out.println("올바르지 않은 연산자입니다.");
return;
}
System.out.println("결과: " + num1 + " " + op + " " + num2 + " = " + result);
}
}
실행예시
첫 번째 정수 입력: 10
두 번째 정수 입력: 3
연산 기호 입력 (+, -, *, /, %): *
결과: 10 * 3 = 30
마무리
다음 게시글에서는 제어문 중 반복문에 대해 학습하겠습니다.
'study > Programming' 카테고리의 다른 글
| [JAVA 기초] 제어문 - 분기문 (1) | 2025.04.30 |
|---|---|
| [JAVA 기초] 제어문 - 반복문 (0) | 2025.04.29 |
| [JAVA 기초] Java API - Scanner 클래스 (1) | 2025.04.27 |
| [JAVA 기초] Java API - Math 클래스 (1) | 2025.04.26 |
| [JAVA 기초] API 개념 중심 (1) | 2025.04.25 |