본문 바로가기
JAVA

JAVA: Switch문과 If-then-else 선택 [코딩백과 with JAVA]

by GangDev 2024. 12. 22.

1.8.2: Switch 문과 If-then-else 사이의 선택

프로그램의 흐름을 제어하는 데 있어 Switch 문과 If-then-else 문은 모두 유용하지만, 각각의 장단점이 있습니다. 이 섹션에서는 두 제어 구조의 차이점과 상황에 따른 적절한 선택 방법에 대해 자세히 설명합니다.

Switch 문 vs If-then-else

Switch 문의 특징

  1. 표현식 제한: 단일 정수, 열거형 값, 또는 String 객체만 테스트할 수 있습니다.
  2. 등가 비교: 값의 정확한 일치를 확인합니다.
  3. 효율성: 많은 조건을 처리할 때 효율적입니다.

If-then-else의 특징

  1. 유연한 표현식: 범위, 조건 등을 포함한 다양한 형태의 표현식을 테스트할 수 있습니다.
  2. 복잡한 논리: AND, OR 등의 논리 연산자를 사용할 수 있습니다.
  3. 모든 타입 지원: 모든 타입의 변수를 사용할 수 있습니다.

선택 기준

  1. 표현식의 복잡성:
    단순한 등가 비교인 경우: Switch 문이 적합합니다.
    범위나 복잡한 조건을 포함하는 경우: If-then-else가 더 적합합니다.
  2. 조건의 수:
    여러 개의 명확한 조건이 있을 경우: Switch 문이 더 효율적입니다.
    복잡하거나 중첩된 조건이 있는 경우: If-then-else가 더 적합합니다.
  3. 변수의 타입:
    byte, short, char, int, enum, String 타입의 변수를 사용하는 경우: Switch 문이 가능합니다.
    그 외의 타입을 사용하는 경우: If-then-else를 사용해야 합니다.
  4. 코드의 가독성:
    조건이 명확하고 간단한 경우: Switch 문이 더 직관적일 수 있습니다.
    복잡한 논리나 범위 비교가 필요한 경우: If-then-else가 더 명확할 수 있습니다.

예시 코드

Switch 문 사용 예:

int month = 3;
String monthName;

switch (month) {
    case 1: monthName = "January"; break;
    case 2: monthName = "February"; break;
    case 3: monthName = "March"; break;
    // ... 다른 월들에 대한 case 처리 ...
    default: monthName = "Invalid month"; break;
}

System.out.println(monthName);

If-then-else 사용 예:

double temperature = 25.5;
String stateOfWater;

if (temperature < 0) {
    stateOfWater = "Ice";
} else if (temperature < 100) {
    stateOfWater = "Liquid";
} else {
    stateOfWater = "Gas";
}

System.out.println("At " + temperature + "°C, water is " + stateOfWater);

추가 고려사항

  1. 범위 테스트: If-then-else는 범위를 쉽게 테스트할 수 있습니다. Switch 문은 개별 값만 테스트할 수 있으므로, 범위 테스트에는 적합하지 않습니다.
int score = 85;

// If-then-else를 사용한 범위 테스트
if (score >= 90) {
    grade = 'A';
} else if (score >= 80) {
    grade = 'B';
} else if (score >= 70) {
    grade = 'C';
}
  1. 복잡한 논리: If-then-else는 복잡한 논리 연산을 지원합니다. Switch 문은 단순한 등가 비교만 가능합니다.
boolean isAdmin = true;
int age = 25;

// If-then-else를 사용한 복잡한 조건
if ((isAdmin && age > 18) || (!isAdmin && age > 21)) {
    System.out.println("Access granted");
} else {
    System.out.println("Access denied");
}
  1. 타입 유연성: If-then-else는 모든 타입의 변수를 사용할 수 있습니다. Switch 문은 특정 타입만 허용합니다.
double averageGrade = 87.5;

// If-then-else를 사용한 부동소수점 비교
if (averageGrade >= 90) {
    System.out.println("Excellent");
} else if (averageGrade >= 80) {
    System.out.println("Good");
}

정리

Switch 문과 If-then-else는 각각 고유한 장단점이 있으며, 상황에 따라 적절히 선택해야 합니다. 일반적으로:

  • 단순한 등가 비교와 명확한 조건을 가진 경우: Switch 문이 더 효율적이고 가독성이 좋습니다.
  • 복잡한 논리, 범위 비교, 또는 다양한 타입의 변수를 다룰 때: If-then-else가 더 적합합니다.

편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111