내일배움캠프 TIL

내일배움캠프 8일차 TIL "조건문, 반복문, 메서드"

Jooglorystar 2024. 9. 23. 21:00

 

 

조건문과 반복문을 통해 더 복잡한 프로그램을 구상할 수 있다.

또한, 메서드를 이용하면, 특정 코드가 반복적으로 써야할 경우, 메서드를 이용해 간편하게 코드를 재사용할 수 있다.

반복문 중. for 반복문은 3일차 TIL에서 다룬 바 있으므로, 개인 복습용 예시 코드만 게재하며, 설명은 생략한다.

 

1. if 조건문

 

static void Main(string[] args)
{
    Console.Write("정수 입력: ");
    int num = int.Parse(Console.ReadLine());

    if (num % 2 == 0)
    {
        Console.WriteLine($"{num}은 짝수");
    }
    else
    {
        Console.WriteLine($"{num}은 홀수");
    }
}

 

 

 

if 조건문을 이용할 경우 괄호안에 있는 값이 true일 경우, 중괄호 내부의 코드가 실행된다.

만약 false일 경우 if의 중괄호 코드는 무시하며, 대신, else에 있는 중괄호의 코드가 실행된다.

 

static void Main(string[] args)
{
    Console.Write("정수 입력: ");
    int num = int.Parse(Console.ReadLine());

    if(num % 2 == 0 && num % 3 == 0)
    {
        Console.WriteLine($"{num}은 2의 배수이자 3의 배수");
    }
    else if (num % 2 == 0)
    {
        Console.WriteLine($"{num}은 2의 배수");
    }
    else if (num % 3 == 0) 
    {
        Console.WriteLine($"{num}은 3의 배수");
    }
    else
    {
        Console.WriteLine($"{num}은 2의 배수도 아니고, 3의 배수도 아님");
    }
}

 

 

else if 문의 경우, else와 if 가 붙은 형태이다.

else if로 묶였을 경우, 맨 앞의 if문이 true일 경우 그 뒤에 있는 else if문들은 작동하지 않는다.

 

만약 else if가 아닌 그냥 if로 엮었다면 12를 입력했을 때, 다음과 같이 출력된다.

 

static void Main(string[] args)
{
    Console.Write("정수 입력: ");
    int num = int.Parse(Console.ReadLine());

    if(num % 2 == 0 && num % 3 == 0)
    {
        Console.WriteLine($"{num}은 2의 배수이자 3의 배수");
    }
    if (num % 2 == 0)
    {
        Console.WriteLine($"{num}은 2의 배수");
    }
    if (num % 3 == 0) 
    {
        Console.WriteLine($"{num}은 3의 배수");
    }
    else		// 이 else는 (num % 3 == 0) 가 false일때 출력된다.
    {
        Console.WriteLine($"{num}은 2의 배수도 아니고, 3의 배수도 아님");
    }
}

 

else if로 엮으면 if(num % 2 == 0 && num % 3 == 0)가 참이어도, 

if (num % 2 == 0)와 if (num % 3 == 0) 는 판단하지 않았지만,

else없이 if로만 연결 했을 때는 true인 모든 if문이 출력되는 것을 볼 수 있다.

 

자신이 코드를 제어하고자 하는 바대로 적절히 사용하는 것이 필요하다.

 

 

2. switch case 조건문

 

static void Main(string[] args)
{
    int input=0;
    while(input != 5)
    {
        Console.Write("\n1. 웃음소리\n2. 울음소리\n3. 기침소리\n4. 재채기소리\n5. 코드 종료\n>>");
        input = int.Parse(Console.ReadLine());

        switch (input)
        {
            case 1:
                Console.WriteLine("하하호호");
                break;
            case 2:
                Console.WriteLine("흑흑흑");
                break;
            case 3:
                Console.WriteLine("콜록콜록");
                break;
            case 4:
                Console.WriteLine("에취");
                break;
            case 5:
                Console.WriteLine("종료합니다.");
                break;
            default:
                Console.WriteLine("올바른 값을 입력해주세요.");
                break;
        }
    }
}

 

 

switch case문은 위와 같이 한 변수의 값을 가지고 분기를 나눌 수 있다.

예시에서 처럼 int input의 값에 따라서 case에 해당하는 코드를 출력하는 것을 볼 수 있다.

default는 위의 case에 해당하지 않는 모든 값에 대해 작동한다.

 

switch case에서 중요한 것은 break문의 사용이다.

위 코드 예시에서 만약 case 1:에서 break문을 지운다면, input이 1일 때, case 1과 case 2가 동시에 출력되게 된다.

만약 공통된 값을 출력하는 경우 의도적으로 break문을 쓰지 않는 경우도 있지만,

그렇지 않은 경우 break문을 통해 해당되는 case의 코드만 실행되게 한다.

 

3. for 반복문

static void Main(string[] args)
{
    for (int i = 1; i < 10; i++)
    {
        for(int j = 2; j < 10; j++)
        {
            Console.Write($"{j} X {i} = {j*i}\t");
        }
        Console.WriteLine();
    }
}

 

구구단을 출력하는 코드이다.

 

 

4. while 반복문

static void Main(string[] args)
{
    int input=0;
    while(input != 5)
    {
        Console.Write("\n1. 웃음소리\n2. 울음소리\n3. 기침소리\n4. 재채기소리\n5. 코드 종료\n>>");
        input = int.Parse(Console.ReadLine());

        switch (input)
        {
            case 1:
                Console.WriteLine("하하호호");
                break;
            case 2:
                Console.WriteLine("흑흑흑");
                break;
            case 3:
                Console.WriteLine("콜록콜록");
                break;
            case 4:
                Console.WriteLine("에취");
                break;
            case 5:
                Console.WriteLine("종료합니다.");
                break;
            default:
                Console.WriteLine("올바른 값을 입력해주세요.");
                break;
        }
    }
}

input에 5 입력 후 input != 5가 false가 되어 반복이 종료된다.

switch case문 설명에서 while 반복문을 사용하였었다.

while 반복문은 while(bool) 에서 bool 값이 true인 동안에는 중괄호 내부의 코드를 반복하는 것이 특징이다.

 

for 반복문으로 구현이 가능한 것은 while 반복문으로도 구현이 가능하다.

하단의 코드는 위의 for 반복문의 예시 코드를 while 반복문으로 구현한 것이다. 

static void Main(string[] args)
{
    int i = 1;
    
    while(i<10)
    {
        int j = 2;

        while (j<10)
        {
            Console.Write($"{j} X {i} = {j * i}\t");
            j++;
        }

        Console.WriteLine();
        i++;
    }
}

출력 결과는 생략한다.

 

4.1. do while 반복문

static void Main(string[] args)
{
    int input = 0;

    do
    {
        Console.Write("\n1. 웃음소리\n2. 울음소리\n3. 기침소리\n4. 재채기소리\n5. 코드 종료\n>>");
        input = int.Parse(Console.ReadLine());

        switch (input)
        {
            case 1:
                Console.WriteLine("하하호호");
                break;
            case 2:
                Console.WriteLine("흑흑흑");
                break;
            case 3:
                Console.WriteLine("콜록콜록");
                break;
            case 4:
                Console.WriteLine("에취");
                break;
            case 5:
                Console.WriteLine("종료합니다.");
                break;
            default:
                Console.WriteLine("올바른 값을 입력해주세요.");
                break;
        }
    } while (input != 5);
}

 

예시 코드는 while문의 예시코드를 단순히 do while문으로 변경한 것이다.

while 문과 do while 문의 차이점은

do while 문은 while의 괄호 안의 값이 false이더라도, do에 있는 코드는 무조건 한번은 실행한다.

 

예를 들면 while 문의 예시 코드에서 input을 5로 초기화 하면 (input != 5)이 false가 되기 때문에

아무것도 실행되지 않고 끝나지만,

do while 문에서 input을 5로 초기화 하면 (input != 5)가 false여도 do 내부의 switch 문이 작동한다.

 

 

5. 메서드

 

internal class Program
{
    static void Main(string[] args)
    {
        int input1 = int.Parse(Console.ReadLine());
        int input2 = int.Parse(Console.ReadLine());

        int addResult = Add(input1, input2);
        Result(addResult);
        
        int subResult = Sub(input1, input2);
        Result(subResult);
        
        int multResult = Mult(input1, input2);
        Result(multResult);
        
        int divResult = Div(input1, input2);
        Result(divResult);

        JustWriteLine();
    }

    static int Add(int num1, int num2)
    {
        Console.WriteLine($"{num1}과 {num2}의 합");
        return num1 + num2;
    }

    static int Sub(int num1, int num2)
    {
        Console.WriteLine($"{num1}과 {num2}의 차");
        return num1 - num2;
    }

    static int Mult(int num1, int num2)
    {
        Console.WriteLine($"{num1}과 {num2}의 곱");
        return num1 * num2;
    }

    static int Div(int num1, int num2)
    {
        Console.WriteLine($"{num1}과 {num2}의 몫");
        return num1 / num2;
    }

    static void Result(int result)
    {
        Console.WriteLine($"값: {result}");
    }

    static void JustWriteLine()
    {
        Console.WriteLine("이건 매개변수도, 반환값도 없는 함수입니다.");
    }
}

 

C#에서 메서드를 생성할 때는

반환값자료형 메서드명(매게변수)

{

   return 반환값

}

의 형식으로 생성한다.

위 메서드들에 static이 붙은 이유는, Main 메서드에 static이 붙어 있기 때문에, Main 메서드에서 호출하기 위해 붙인 것이다.

int Add(int num1, int num2)

{
    Console.WriteLine($"{num1}과 {num2}의 합");
    return num1 + num2;
}

의 메서드를 예시로 보면, 위 함수는 int 매개변수 두개를 가지며,

num1 + num2 값을 반환한다.

 

저 메서드가 호출된 int addResult = Add(input1, input2); 를 보면 input1과 input2를 받아, input1 + input2의 값이 반환되어, addResult라는 변수에 초기화되는 것을 알 수 있다.

 

반면, Result(addResult); 메서드를 보면 앞에 자료형이 아닌 void라고 적힌 것을 볼 수 있다.

이는 이 함수가 반환하는 값이 없다는 의미이다.

 

void JustWriteLine()는 매개변수도 반환값도 없이 메서드를 만들 수 있음을 보여주기 위해 작성한 메서드이다.

JustWriteLine(); 로 호출하면 내부의 코드가 생성됨을 확인할 수 있다.

 

본 예시에서는 직접 적어도 되는 짧은 코드들이지만,

만약 이보다 더 긴 코드를 반복적으로 사용해야하는 상황이 있다면,

메서드로 만들고, 이를 호출하는 식으로 이용할 수 있다.