제어문 - 조건문
조건문(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 (값) {
case 값1:
실행문1;
break;
case 값2:
실행문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();
}
}