if문과 switch문은 조건에 맞는 코드를 실행시킨다는 것에서 공통점이 있습니다. 하지만 차이점이 있기 때문에 구분해서 사용해만 각자의 장점을 살려서 사용할 수 있습니다. 즉, 장점과 단점을 모르고 사용할 경우 각자의 단점이 부각되게 사용할 수 있다는 것 입니다. 이번 시간에는 if문과 switch문의 장점과 단점을 소개하고 서로의 차이를 비교하여 용도까지 알아보는 시간을 갖겠습니다.


[if문의 개념과 사용법]

프로그래밍에서 조건에 따라 다른 동작을 수행하는 데 사용되는 조건문입니다.

if 문은 조건을 검사하여 조건이 참(true)이면 특정 코드 블록을 실행합니다. 조건이 거짓(false)이면 해당 코드 블록을 건너뜁니다.

사용법

기본 구조는 다음과 같습니다

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

여기서 조건은 불리언(Boolean) 값을 반환하는 표현식입니다. 조건이 참이면 중괄호({}) 안에 있는 코드 블록이 실행됩니다.

예시

int number = 10;

if (number > 5)
{
    Console.WriteLine("Number is greater than 5");
}

위의 예시에서는 number 변수의 값이 5보다 큰지 확인하는 조건문을 사용했습니다. 만약 number가 5보다 크다면 “Number is greater than 5″를 출력합니다.

else 문

조건이 거짓일 때 다른 코드를 실행해야 할 수 있습니다. 이런 경우에는 else 문을 사용합니다.

int number = 2;

if (number > 5)
{
    Console.WriteLine("Number is greater than 5");
}
else
{
    Console.WriteLine("Number is not greater than 5");
}

위의 예시에서는 number가 5보다 큰지 확인하고, 만약 그렇지 않으면 “Number is not greater than 5″를 출력합니다.

else if 문

int number = 10;

if (number > 10)
{
    Console.WriteLine("Number is greater than 10");
}
else if (number < 10)
{
    Console.WriteLine("Number is less than 10");
}
else
{
    Console.WriteLine("Number is equal to 10");
}

위의 예시에서는 number가 10보다 큰지, 작은지 또는 같은지를 확인하여 각각에 맞는 메시지를 출력합니다.


[if문의 장점과 단점]

[장점]

  1. 조건부 실행: 조건을 검사하여 해당하는 코드 블록을 실행하므로, 프로그램이 특정 조건에 따라 다르게 동작할 수 있습니다. 이를 통해 유연하고 다양한 상황에 대응할 수 있습니다.
  2. 프로그램 흐름 제어: 프로그램의 흐름을 제어할 수 있습니다. 조건에 따라 특정 코드 블록을 실행하거나 건너뛰는 등의 제어를 할 수 있어서 원하는 동작을 정확하게 구현할 수 있습니다.
  3. 다중 조건 처리: 여러 개의 조건을 동시에 검사하거나 다양한 조건을 순차적으로 검사할 수 있습니다. 이를 통해 복잡한 상황에 대응할 수 있습니다.

[단점]

  1. 가독성 감소: 복잡한 조건식은 코드의 가독성을 낮출 수 있습니다. 이는 코드를 이해하고 유지보수하는 데 어려움을 초래할 수 있습니다.
  2. 오류 발생 가능성: 복잡한 조건식이나 다양한 경우의 수를 처리하는 코드는 오류가 발생하기 쉽습니다. 특히 조건을 정확하게 설정하지 않거나 모든 경우를 고려하지 않으면 예기치 않은 결과가 발생할 수 있습니다.
  3. 중복 코드: 비슷한 조건을 검사하는 경우 중복 코드가 발생할 수 있습니다. 이는 코드의 유지보수를 어렵게 만들고, 코드의 재사용성을 감소시킬 수 있습니다.

가독성 감소 예시코드

int score = 85;
bool isPassed = false;

if (score >= 70 && score <= 100)
{
    isPassed = true;
}
else if (score >= 60 && score < 70)
{
    isPassed = true;
}
else
{
    isPassed = false;
}

위의 코드에서는 학생의 점수에 따라 합격 여부를 결정하는 것을 보여줍니다. 하지만 복잡한 조건식으로 인해 코드의 가독성이 낮아졌습니다. score의 범위를 검사하는 조건이 중복되고, 의미가 명확하지 않습니다.

오류 발생 가능성에 대한 예시코드

string day = "Monday";
string schedule;

if (day == "Monday" || day == "Wednesday" || day == "Friday")
{
    schedule = "Math class";
}
else if (day == "Tuesday" || day == "Thursday" || day == "Saturday")
{
    schedule = "English class";
}
else
{
    schedule = "No class";
}

위의 코드에서는 요일에 따라 수업 일정을 지정하는 것을 보여줍니다. 하지만 각각의 요일에 대한 조건이 정확하게 설정되지 않았기 때문에 예상치 못한 결과가 발생할 수 있습니다. 예를 들어, 일요일에 대한 처리가 없으므로 “No class”가 할당될 것입니다.


[switch문의 개념과 사용법]

여러 개의 조건을 비교하여 각각에 맞는 동작을 수행합니다. 일반적으로 switch 문은 특정 변수나 표현식의 값에 따라 다른 코드 블록을 실행하는 데 사용됩니다.

개념

하나의 변수나 표현식의 값을 여러 개의 경우(case)와 비교하여 해당하는 경우에 따라 다른 코드를 실행합니다. 각 경우는 일련의 문장으로 구성되며, 일치하는 경우가 없을 때 실행되는 기본(default) 경우를 포함할 수 있습니다.

사용법

switch (표현식)
{
    case 값1:
        // 값1에 해당하는 코드
        break;
    case 값2:
        // 값2에 해당하는 코드
        break;
    // 추가 case 문 가능
    default:
        // 기본(default) 경우의 코드
        break;
}

여기서 표현식은 비교할 변수나 표현식을 나타냅니다. 각 case 문은 비교할 값과 일치하는 경우에 해당하는 코드를 포함하고, 해당 case 문의 코드 블록이 실행됩니다. default 문은 일치하는 case 문이 없을 때 실행됩니다.

예시

int dayOfWeek = 3;

switch (dayOfWeek)
{
    case 1:
        Console.WriteLine("Monday");
        break;
    case 2:
        Console.WriteLine("Tuesday");
        break;
    case 3:
        Console.WriteLine("Wednesday");
        break;
    case 4:
        Console.WriteLine("Thursday");
        break;
    case 5:
        Console.WriteLine("Friday");
        break;
    default:
        Console.WriteLine("Weekend");
        break;
}

위의 예시에서는 dayOfWeek 변수의 값에 따라 해당하는 요일을 출력합니다. 예를 들어, dayOfWeek가 3이면 “Wednesday”가 출력됩니다.

특징

  • 여러 개의 경우를 동시에 검사할 수 있으며, 각 case 문은 서로 중복되지 않아야 합니다.
  • 각 case 문의 마지막에는 break; 문을 사용하여 해당 case 문의 실행을 중단해야 합니다. 그렇지 않으면 다음 case 문도 실행됩니다.
  • default 문은 선택사항이며, 일치하는 case 문이 없을 때 실행됩니다.

[switch문의 장점과 단점]

[장점]

  1. 가독성: 여러 개의 조건을 한눈에 파악할 수 있도록 만들어져 있습니다. 변수나 표현식의 값에 따라 다른 동작을 수행하는 경우 switch 문을 사용하면 코드의 가독성이 향상됩니다.
  2. 유지보수성: 여러 개의 if-else 문을 사용하여 조건을 처리하는 것보다 switch 문을 사용하는 것이 코드를 관리하기 쉽습니다. 특히 조건이 추가되거나 변경되어도 switch 문은 각각의 경우를 명확하게 정의하고 있어 수정이 용이합니다.
  3. 성능: 여러 개의 조건을 비교할 때 일반적으로 성능이 좋습니다. 컴파일러가 효율적으로 최적화하여 실행 속도를 향상시킬 수 있습니다.

[단점]

  1. 제한된 조건: 일반적으로 값의 동일 여부를 검사하는 데 사용됩니다. 따라서 범위나 복잡한 조건을 처리하는 데는 적합하지 않습니다. 이로 인해 switch 문을 사용할 수 없는 경우가 발생할 수 있습니다.
  2. 가독성 감소: switch 문이 많은 경우에는 코드의 가독성이 감소할 수 있습니다. 특히 많은 case 문이 있으면, 복잡해 보일 수 있고, 관련 코드를 파악하기 어려울 수 있습니다.
  3. 중복 코드: 동일한 코드가 반복되는 경우가 발생할 수 있습니다. 이는 코드의 유지보수성을 저하시킬 수 있으며, 수정이 필요할 때 모든 중복된 부분을 일일이 수정해야 합니다.

제한된 조건의 예시 코드

int age = 25;

switch (age)
{
    case int n when n >= 0 && n <= 17:
        Console.WriteLine("You are a minor.");
        break;
    case int n when n >= 18 && n <= 64:
        Console.WriteLine("You are an adult.");
        break;
    case int n when n >= 65:
        Console.WriteLine("You are a senior citizen.");
        break;
    default:
        Console.WriteLine("Invalid age.");
        break;
}

위의 코드에서는 나이에 따라 다른 메시지를 출력합니다. 하지만 switch 문은 범위를 비교하는 것보다 값의 일치 여부를 비교하는 데에 더 적합합니다. 따라서 범위를 처리해야 하는 경우에는 if-else 문이 더 적합할 수 있습니다.

가독성 감소에 대한 예시코드

int month = 5;

switch (month)
{
    case 1:
        Console.WriteLine("January");
        break;
    case 2:
        Console.WriteLine("February");
        break;
    case 3:
        Console.WriteLine("March");
        break;
    case 4:
        Console.WriteLine("April");
        break;
    case 5:
        Console.WriteLine("May");
        break;
    case 6:
        Console.WriteLine("June");
        break;
    // 나머지 case 문 생략
    default:
        Console.WriteLine("Invalid month");
        break;
}

위의 코드에서는 각 case 문이 순서대로 월을 표현하고 있지만, 많은 경우의 수를 처리하는 경우에는 가독성이 감소할 수 있습니다. 특히 많은 case 문이 있을 때는 각각의 경우를 파악하기 어려울 수 있습니다.

중복코드에 대한 예시코드

int option = 2;

switch (option)
{
    case 1:
        Console.WriteLine("Option 1 selected");
        // Option 1에 대한 처리
        break;
    case 2:
        Console.WriteLine("Option 2 selected");
        // Option 2에 대한 처리
        break;
    case 3:
        Console.WriteLine("Option 3 selected");
        // Option 3에 대한 처리
        break;
    case 4:
        Console.WriteLine("Option 4 selected");
        // Option 4에 대한 처리
        break;
    case 5:
        Console.WriteLine("Option 5 selected");
        // Option 5에 대한 처리
        break;
    default:
        Console.WriteLine("Invalid option selected");
        // 유효하지 않은 옵션 처리
        break;
}

위의 코드에서는 각 case 문마다 다른 동작을 수행하지만, 출력 메시지 외에 다른 코드가 중복될 수 있습니다. 예를 들어, 각각의 옵션에 대한 처리 내용이 비슷하거나 중복되는 경우가 있을 수 있습니다.


[if문과 switch문의 차이점 비교]

if문

  1. 개별적인 조건 처리: 각각의 조건에 대해 개별적으로 처리할 수 있습니다. 즉, 조건이 서로 독립적이거나 복잡한 비교가 필요한 경우에 적합합니다.
  2. 범위 조건 처리: 범위를 비교할 수 있으며, 이를 통해 여러 조건을 하나의 if 문으로 처리할 수 있습니다.
  3. 다양한 조건 처리: 논리 연산자를 사용하여 다양한 조건을 조합할 수 있습니다. 따라서 복잡한 조건을 처리할 때 유연하게 사용할 수 있습니다.

switch문

  1. 일치하는 값에 따른 분기: 값의 일치 여부에 따라 분기를 처리합니다. 즉, 값이 명확하게 정해져 있고 여러 경우의 수를 처리해야 할 때 적합합니다.
  2. 값의 비교만 가능: 값의 비교만을 수행하며, 범위나 복잡한 조건을 처리하는 데에는 적합하지 않습니다.
  3. 단순하고 명확한 분기: 각 case 문을 사용하여 간결하고 명확하게 분기를 처리할 수 있습니다. 따라서 분기가 명시적이고 간단한 경우에 유용합니다.

[if문과 switch문은 언제 사용해야할까? (용도)]

  • if 문 사용 시: 개별적인 조건을 처리해야 하거나 범위를 비교해야 할 때, 복잡한 조건이 필요한 경우, 다양한 조건을 조합하여 처리해야 하는 경우에 사용합니다.
int score = 85;
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";
}

Console.WriteLine($"Your grade is {grade}");

위의 코드에서는 점수에 따라 학점을 지정하는 예시입니다.

  • switch 문 사용 시: 값의 일치 여부에 따라 분기를 처리해야 하거나 여러 경우의 수를 명확하게 처리해야 할 때, 간결하고 명확한 분기 처리가 필요한 경우에 사용합니다.
int dayOfWeek = 3;
string schedule;

switch (dayOfWeek)
{
    case 1:
        schedule = "Math class";
        break;
    case 2:
        schedule = "English class";
        break;
    case 3:
        schedule = "History class";
        break;
    case 4:
        schedule = "Science class";
        break;
    case 5:
        schedule = "Art class";
        break;
    default:
        schedule = "No class";
        break;
}

Console.WriteLine($"Today's schedule is {schedule}");

위의 코드에서는 요일에 따라 수업 일정을 지정하는 예시입니다.


[마무리 말]

if문과 switch문은 이론만 보다보면 어떤 상황에 사용해야할 지 감이 잘 오지 않습니다 그렇기에 제가 제시해드린 예시코드들을 눈에 익히시고 직접 간단한 프로그램을 만들면서 익히시는 것이 중요합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다