백엔드/Java

제어문 - 조건문

Ryuzy 2025. 5. 15. 15:41
728x90
반응형

조건문(Conditional Statement)은 프로그램에서 특정 조건이 참인지 거짓인지에 따라 다른 명령을 실행할 수 있도록 해주는 제어문입니다. 대표적으로 if, if-else, if-else if-else, switch문 등이 있으며, 조건식에는 비교 연산자나 논리 연산자를 사용하여 값을 판단합니다. 조건문을 사용하면 프로그램의 흐름을 분기시켜 상황에 맞는 처리를 할 수 있어, 사용자 입력 처리, 메뉴 선택, 오류 검사 등 다양한 상황에서 필수적으로 사용됩니다.

 

1. if 문

자바의 if문은 프로그램에서 어떤 조건이 참(true)일 때만 특정 코드를 실행하게 해주는 조건문입니다.
조건이 거짓(false)이면 해당 코드는 건너뛰고 실행되지 않습니다.

if (조건식) {
    // 조건식이 참일 때 실행될 코드
}

 

  • 조건식은 반드시 true 또는 false가 되는 논리값(boolean)이어야 합니다.
  • 조건식이 참이면 {} 안의 코드가 실행됩니다.
  • 거짓이면 {} 안의 코드는 무시되고 다음 코드로 넘어갑니다.

 

import java.util.Scanner;

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

        System.out.print("정수를 입력하세요: ");
        int number = sc.nextInt();

        if (number > 0) {
            System.out.println("양수입니다.");
        }

        sc.close();
    }
}

 

 

2. if-else문

if-else문은 조건식이 참이면 A 코드, 조건식이 거짓이면 B 코드를 실행하는 분기문(조건 분기)입니다. 즉, 두 가지 경우 중 하나만 선택해서 실행됩니다.

if (조건식) {
    // 조건식이 참(true)일 때 실행되는 코드
} else {
    // 조건식이 거짓(false)일 때 실행되는 코드
}

 

import java.util.Scanner;

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

        System.out.print("정수를 입력하세요: ");
        int number = sc.nextInt();

        if (number >= 0) {
            System.out.println("0 또는 양수입니다.");
        } else {
            System.out.println("음수입니다.");
        }

        sc.close();
    }
}

 

 

3. if-else if 문

if-else if 문은 하나의 조건이 아닌 여러 조건을 순서대로 검사해서 가장 먼저 참(true)이 되는 조건만 실행하고, 나머지는 무시하는 조건문입니다.

if (조건1) {
    // 조건1이 참일 때 실행
} else if (조건2) {
    // 조건2가 참일 때 실행
} else if (조건3) {
    // 조건3이 참일 때 실행
} else {
    // 모든 조건이 거짓일 때 실행
}

 

import java.util.Scanner;

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

        System.out.print("점수를 입력하세요: ");
        int score = sc.nextInt();

        if (score >= 90) {
            System.out.println("A학점입니다.");
        } else if (score >= 80) {
            System.out.println("B학점입니다.");
        } else if (score >= 70) {
            System.out.println("C학점입니다.");
        } else if (score >= 60) {
            System.out.println("D학점입니다.");
        } else {
            System.out.println("재시험 대상입니다.");
        }

        sc.close();
    }
}

 

import java.util.Scanner;

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

        // 미리 설정된 아이디와 비밀번호
        String correctId = "apple";
        String correctPw = "1111";

        // 사용자 입력 받기
        System.out.print("아이디를 입력하세요: ");
        String inputId = sc.nextLine();

        System.out.print("비밀번호를 입력하세요: ");
        String inputPw = sc.nextLine();

        // 아이디와 비밀번호 확인
        if (inputId.equals(correctId) && inputPw.equals(correctPw)) {
            System.out.println("로그인 성공!");
        } else {
            System.out.println("아이디 또는 비밀번호가 틀렸습니다.");
        }

        sc.close();
    }
}

 

 

4. switch 문

switch 문은 하나의 값을 여러 경우(case)로 나누어 해당하는 조건만 실행하는 조건문입니다. if-else if와 비슷하지만, 조건이 정확히 일치하는 경우에만 실행됩니다.

switch (값) {
    case1:
        실행문1;
        break;
    case2:
        실행문2;
        break;
    ...
    default:
        실행문n;
}

 

  • switch 괄호 안에는 검사할 정수, 문자, 문자열 등이 들어갑니다.
  • case는 검사할 각 값입니다.
  • break는 해당 case 실행 후 switch문을 빠져나가기 위한 키워드입니다.
  • default는 어떤 case에도 해당하지 않을 때 실행됩니다 (생략 가능).

 

import java.util.Scanner;

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

        System.out.print("점수를 입력하세요 (0~100): ");
        int score = sc.nextInt();
        int grade = score / 10;  // 90~99 → 9, 80~89 → 8 ...

        switch (grade) {
            case 10:
            case 9:
                System.out.println("A학점입니다.");
                break;
            case 8:
                System.out.println("B학점입니다.");
                break;
            case 7:
                System.out.println("C학점입니다.");
                break;
            case 6:
                System.out.println("D학점입니다.");
                break;
            default:
                System.out.println("재시험 대상입니다.");
        }

        sc.close();
    }
}

 

 

5. switch 표현식

자바의 switch 표현식(Switch Expression)은 자바 14부터 도입된 새로운 switch 문법으로, 기존의 switch문보다 더 간결하고 안전하며 값을 반환할 수 있는 기능을 제공합니다. 기존에는 각 case마다 break를 사용해야 했지만, switch 표현식에서는 case 값 -> 실행문 형태로 작성하며, 여러 값을 동시에 처리하거나 yield를 사용해 결과를 반환할 수 있습니다. 이를 통해 switch를 if-else처럼 조건 분기뿐만 아니라 하나의 값으로 결과를 처리하는 표현식처럼 사용할 수 있게 되었습니다.

import java.util.Scanner;

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

        System.out.print("과일 이름을 영어로 입력하세요 (apple, banana, grape): ");
        String fruit = sc.nextLine();

        String result = switch (fruit) {
            case "apple"  -> "사과";
            case "banana" -> "바나나";
            case "grape"  -> "포도";
            case "peach"  -> "복숭아";
            case "melon"  -> "멜론";
            default       -> "알 수 없는 과일입니다.";
        };

        System.out.println("입력한 과일의 한글 이름: " + result);

        sc.close();
    }
}

 

import java.util.Scanner;

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

        System.out.print("당신의 MBTI를 입력하세요 (예: INFP, ENFP, ISTJ 등): ");
        String mbti = sc.nextLine().toUpperCase();  // 대소문자 구분 없이 처리

        switch (mbti) {
            case "INFP" -> {
                System.out.println("🌱 INFP: 이상주의자형");
                System.out.println("조용하고 친절하며, 내면의 세계가 풍부해요.");
                System.out.println("자신만의 가치관을 가지고 살아가는 당신, 멋져요!");
            }
            case "ENFP" -> {
                System.out.println("🔥 ENFP: 재기발랄한 활동가형");
                System.out.println("창의적이고 열정적이며, 주변을 활기차게 만드네요!");
                System.out.println("당신 덕분에 주변이 밝아져요 😄");
            }
            case "INTJ" -> {
                System.out.println("🧠 INTJ: 전략가형");
                System.out.println("분석적이고 독립적인 사고를 가진 당신은 진정한 계획자!");
                System.out.println("미래를 설계하는 당신의 통찰력이 놀라워요.");
            }
            case "ESFP" -> {
                System.out.println("🎉 ESFP: 연예인형");
                System.out.println("항상 즐거움을 추구하고, 사람들과 잘 어울리는 분위기 메이커!");
                System.out.println("당신의 웃음은 모두에게 긍정의 에너지입니다.");
            }
            case "INFJ" -> {
                System.out.println("🌌 INFJ: 옹호자형");
                System.out.println("깊은 직관과 신념을 가진 당신, 조용하지만 강한 리더입니다.");
                System.out.println("세상을 바꾸는 건 당신 같은 사람이에요.");
            }
            default -> {
                System.out.println("😕 아직 해당 MBTI 정보가 없어요.");
                System.out.println("정확히 4자리 영어로 입력해 주세요. 예: INFP, ENTP");
            }
        }

        sc.close();
    }
}

 

import java.util.Scanner;

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

        System.out.print("과일 이름을 영어로 입력하세요 (apple, banana, grape): ");
        String fruit = sc.nextLine().toLowerCase();

        // switch 표현식 + yield 사용
        String result = switch (fruit) {
            case "apple" -> {
                System.out.println("🍎 사과를 선택하셨습니다!");
                yield "사과";
            }
            case "banana" -> {
                System.out.println("🍌 바나나는 에너지가 넘치죠!");
                yield "바나나";
            }
            case "grape" -> {
                System.out.println("🍇 포도는 여름 제철 과일이에요.");
                yield "포도";
            }
            default -> {
                System.out.println("😕 등록되지 않은 과일입니다.");
                yield "알 수 없음";
            }
        };

        System.out.println("한글 이름: " + result);

        sc.close();
    }
}

 

 

 

728x90
반응형