이전강의에서 저희는 반복문을 배워보았습니다.

이 반복문은 잘못하면 무한루프에 빠진다고 이전시간에 언급했었는데요.

이 반복문을 제어할 수 있는 방법이 있습니다.

Break, continue, goto 제어문을 통해서 입니다.


1. Break

break는 '가장 가까운 반복문을 빠져나오는 역할' 을 수행하는 제어문입니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int ForEnd = 0;
            
            for(int i=0; i<10; i++)
            {
                if(ForEnd<5)
                {
                    Console.WriteLine(ForEnd);
                    ForEnd++;
                }
                else
                {
                    break;
                }

            }
        }
    }
}

코드를 해석해보자면

반복문(for)가 돌아가고 있는 중 ForEnd라는 변수가 5보다 작을 때는 변수에 담긴 수를 출력하고

ForEnd에 1씩 더한다는 내용이 if문 내부에 있습니다.`

else에 들어갈 조건은 당연하게도 'ForEnd가 5와 같거나, 보다 클 때' 인데요, 이 때 break와 가장 가까운 반복문

즉, int 형 변수 i를 사용하는 반복문을 종료한다는 것 입니다.

 결과를 보시면 ForEnd변수가 5가 됨에 따라 else문에서 break를 만나 4에서 출력이 멈춘것을 볼 수 있습니다.

위에 강조해둔 break와 가장 가까운 반복문 이라는 부분은 중요한 포인트입니다.

이를 코드로 확인해보겠습니다.

더보기
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            for(int i=0; i<10; i++)
            {
                for(int j=0; j<10;j++)
                {
                    Console.WriteLine($"i : {i}, j : {j}");
                }

            }
        }
    }
}

이는 평범한 다중 for문 형태입니다.

그 결과는

이처럼  i가 9, j가 9가 될 때까지 나오는 것을 볼 수 있는데요.

이제 분기문을 사용해서 j가 3이 되었을 때 끊어보겠습니다. 

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            for(int i=0; i<10; i++)
            {
                for(int j=0; j<10;j++)
                {
                    Console.Write($"i : {i}, j : {j}\t");
                    if (j == 3)
                        break;
                }
                Console.WriteLine();
                Console.WriteLine();
            }
        }
    }
}

보기 편하도록 코드를 적어보았는데요. 그 결과는

이렇습니다. j가 3이 되면 j반복문이 끊어지고 다시 i반복문으로 향합니다. 

i가 1 올라가고 다시 j반복문으로 내려와 3까지 진행한후 끊어지는 것을 반복하는 모습을 볼 수 있습니다.

이처럼 break는 break와 가까운 반복문을 탈출하는 모습을 볼 수 있습니다.


2. continue

 

 

 

continue는 반복문에서 '조건을 검사하는 부분으로 가는' 제어문입니다.

예시코드를 보겠습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            
            for(int i=1; i<=5; i++)
            {
                if (i == 3)
                    continue;
                for (int j=1; j<=5;j++)
                {
                    Console.WriteLine($"i : {i}, j : {j}");
                }
                Console.WriteLine();
            }
        }
    }
}

이전 break는 반복문 자체를 탈출하여 그 뒤로는 실행이 안되었습니다.

하지만 continue는 반복문 자체를 탈출하는 것이 아닌 그 조건일 때

반복문의 조건을 검사하는 부분으로 올라가는 것이므로 3이외의 모든 코드가 나와야 합니다.

i가 3일 때 continue를 해주어서 i값이 3일 때가 없는 것을 볼 수 있습니다.


3. goto

goto문은 '지정된 레이블로 건너뛰는' 제어문입니다.

※ 레이블(Lable) : 코드 내에 데이터 위치를 나타내주는 역할

 

goto 레이블명;
...
레이블: 실행될 코드

위 코드는 goto의 기본형태입니다.

 

이를 코드로 보자면

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            for(int i=1; i<=10; i++)
            {
                if(i==3)
                {
                    goto numThree;
                }
                Console.WriteLine($"i = {i}");
            }
            numThree: Console.WriteLine("숫자 3입니다.");
        }
    }
}

i를 계속 출력하던 중 if조건문을 만나 goto 문으로 반복문 바깥부분으로 넘어가는 것을 볼 수 있습니다.

goto 문은 이렇게 반복문 탈출로도 사용할 수 있지만 위에 언급한 것 처럼

원하는 부분으로 코드를 뛰어넘는 역할을 하는 것으로 이해하면 원활한 이해가 가능할 것 같습니다.

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i=1; i<=9; i++)
            {
                if (i == 3)
                    goto Jump;//여기서 점프
                Console.WriteLine($"i = {i}");
            }

            Console.WriteLine("점프되는 부분");//건너뛰어짐으로 출력되지않음

            Jump://여기로 점프
            Console.WriteLine();//줄바꿈
            for (int k = 5; k <= 9; k++)
            {
                Console.WriteLine($"k = {k}");
            }

        }
    }
}

코드를 보시면 i가 3이 되고 Jump레이블로 이동을 시작합니다. 반복문을 종료시키고 중간에 껴있는 출력문 역시 건너뛰어 Jump레이블로가 줄바꿈과 새로운 for 반복문을 출력합니다.

 

'C#' 카테고리의 다른 글

[C#_9] 배열 (Array)  (0) 2021.10.07
[C#_8] 메서드 method  (0) 2021.10.02
[C#_6] 반복문(for,foreach,while,do while)  (0) 2021.09.24
[C#_5] 조건문 (if, else, switch)  (0) 2021.09.23
[C#_4] 출력문, 입력문, 연산자, 문자열 보간  (0) 2021.09.21

+ Recent posts