'
본문 바로가기
study/Programming

[JAVA 기초] 제어문 - 조건문

by meowdule 2025. 4. 28.

 

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

 

 

 

 

 

 

 

 

 

 

 

마무리
다음 게시글에서는 제어문 중 반복문에 대해 학습하겠습니다.