[IT-정보] C# 반복문 기초 핵심 문법과 활용 가이드 – 실무 예제로 배우는 프로그래밍

반복되는 작업을 자동화하는 마법, C# 반복문

화면에 “안녕하세요”라는 문구를 100번 출력해야 하는 과제를 받았다고 상상해 보세요. 만약 여러분이 프로그래밍 언어를 모른다면, 직접 키보드로 백 번을 타이핑해야 할 거예요. 손가락도 아프고 시간도 엄청나게 걸리겠죠. 하지만 C# 반복문 기초를 알고 있다면, 단 세 줄의 코드로 이 작업을 1초 만에 끝낼 수 있어요.

개발을 하다 보면 똑같은 로직을 수십 번, 수백 번 반복해야 하는 상황을 끊임없이 마주하게 돼요. 사용자 리스트를 화면에 뿌려주거나, 게임에서 적 캐릭터가 계속 나타나게 하거나, 방대한 데이터를 하나씩 검사하는 일들이 모두 반복문의 영역이에요. 이걸 제대로 배우지 못하면 코드는 점점 길어지고, 수정하기는 더 힘들어지는 스파게티 코드가 되고 말아요.

많은 입문자가 처음 반복문을 접할 때 “조건이 언제 끝나는 거지?”라며 혼란스러워하거나, 무한 루프에 빠져 프로그램이 멈춰버리는 경험을 해요. 하지만 걱정하지 마세요. 반복문의 원리만 정확히 이해하면, 여러분은 컴퓨터에게 아주 복잡하고 지루한 일을 맡기는 유능한 지휘관이 될 수 있어요.

오늘 이 가이드를 끝까지 읽고 나면 다음과 같은 능력을 갖추게 될 거예요.

  • 상황에 맞는 최적의 반복문 형식을 선택하는 안목
  • 반복문 내부에서 데이터를 자유롭게 다루는 기술
  • 무한 루프나 인덱스 오류 같은 치명적인 실수를 방지하는 능력
  • 실제 프로덕션 환경에서 쓰이는 코드 스타일 습득

자, 이제 지루한 반복 업무에서 해방되어 효율적인 코드를 작성할 준비를 시작해 봐요.

반복문을 배우기 전 반드시 알아야 할 핵심 개념

반복문을 무작정 따라 쓰기 전에, 이 도구가 어떤 원리로 작동하는지 머릿속에 그려보는 과정이 필요해요. 반복문은 단순히 코드를 복사해서 붙여넣는 기능이 아니라, 특정 조건이 참(true)인 동안 지정된 구역의 코드를 계속해서 실행하는 제어 흐름이기 때문이에요.

반복문을 제대로 다루기 위해서는 세 가지 핵심 요소가 조화를 이루어야 해요. 첫 번째는 초기화예요. 반복을 시작할 기준점을 잡는 것이죠. 두 번째는 조건식이에요. “언제까지 이 짓을 계속할 것인가?”를 결정하는 아주 중요한 기준이 돼요. 마지막 세 번째는 증감식이에요. 한 번의 반복이 끝날 때마다 기준점을 조금씩 변화시켜서, 결국에는 조건이 거짓(false)이 되어 반복이 멈추도록 만드는 역할을 해요.

💡 알아두기
반복문을 공부하기 전에 C# 조건문에 대해 먼저 익혀두면 훨씬 수월해요. 반복문은 조건문의 결과에 따라 실행 여부가 결정되기 때문에, 두 개념은 마치 동전의 양면과 같답니다.

또한, 반복문을 사용하기 위해서는 변수의 개념과 데이터 타입에 대한 이해가 선행되어야 해요. 반복 횟수를 셀 카운터 변수가 정수형(int)인지, 배열의 인덱스를 다루는지에 따라 코드가 달라질 수 있기 때문이죠. 특히 .NET Framework 환경에서 제공하는 다양한 컬렉션(List, Array 등)을 다룰 때는 각 반복문이 데이터를 어떻게 접근하는지 아는 것이 매우 중요해요.

어떤 반복문을 쓸지 고민될 때는 아래의 비교 표를 참고해 보세요. 각 상황에 맞는 선택 기준을 정리해 두었어요.

반복문 종류주요 특징언제 사용하나요?
for 문반복 횟수가 명확할 때 유리함특정 숫자만큼 반복하거나 인덱스로 접근할 때
while 문조건이 만족될 때까지 계속함반복 횟수를 미리 알 수 없는 경우
foreach 문컬렉션의 요소를 순차적으로 순회배열이나 리스트의 모든 항목을 훑을 때
do-while 문조건 검사를 나중에 함최소한 한 번은 무조건 실행해야 할 때

이처럼 반복문은 무조건 쓰는 것이 아니라, 내가 해결하려는 문제의 성격에 맞춰 골라 쓰는 것이 실력 있는 개발자의 자세예요. 이제 준비가 되었다면 본격적으로 각 문법의 구조를 파헤쳐 볼까요?

상황별 최적의 반복문 활용법 5단계

이제 본격적으로 C# 프로그래밍의 핵심인 반복문 문법들을 하나씩 정복해 볼 시간이에요. 각 문법이 가진 독특한 매력을 이해하고, 어떤 상황에서 빛을 발하는지 구체적인 예시와 함께 살펴볼게요.

STEP 1. 정해진 횟수만큼 반복하는 for 문법

가장 대표적인 반복문은 단연 for 문이에요. for 문은 “10번 반복해”, “1부터 100까지 더해”처럼 반복할 횟수가 명확하게 정해져 있는 경우에 가장 강력한 힘을 발휘해요. 구조가 매우 짜임새 있어서 초기값, 조건, 증감식을 한눈에 파악할 수 있다는 장점이 있죠.

기본적인 구조는 다음과 같아요.
for (초기화; 조건식; 증감식) { // 실행할 코드 }
여기서 초기화는 변수를 만드는 단계이고, 조건식은 이 반복을 계속할지 결정하는 문턱이며, 증감식은 한 바퀴 돌 때마다 숫자를 높이거나 낮추는 단계예요. 예를 들어, 0부터 9까지 숫자를 출력하고 싶다면 초기값을 0으로 잡고, 10보다 작을 때까지 실행하며, 한 번 돌 때마다 1씩 더해주는 식이죠.

for 문을 사용할 때 주의할 점은 인덱스 범위예요. 배열의 길이를 사용할 때는 보통 i < array.Length와 같이 ‘미만’ 조건을 사용해야 해요. 만약 ‘이하’를 써버리면 배열의 범위를 벗어나 프로그램이 멈춰버리는 사고가 발생할 수 있거든요. 이는 초보 개발자들이 가장 자주 겪는 실수 중 하나예요.

STEP 2. 조건이 충족될 때까지 달리는 while 문법

만약 반복을 몇 번 해야 할지 미리 알 수 없다면 어떻게 해야 할까요? 그럴 때는 while 문이 정답이에요. while 문은 특정 조건이 ‘참’인 동안에는 무한히 코드를 실행해요. 횟수보다는 “상태”에 집중하는 문법이라고 이해하면 쉬워요.

예를 들어, 사용자가 “종료”라고 입력하기 전까지 계속해서 입력을 받는 프로그램을 만든다고 가정해 봐요. 사용자가 언제 종료를 입력할지는 아무도 모르기 때문에, 이때는 while 문을 사용하는 것이 가장 자연스러워요.
while (사용자입력 != "종료") { // 입력 받기 로직 }
이런 식으로 말이죠.

⚠️ 주의
while 문을 사용할 때 가장 무서운 적은 무한 루프예요. 조건을 항상 거짓으로 만들어 줄 장치(증감식이나 탈출 조건)를 깜빡하면, 컴퓨터는 영원히 그 자리에서 맴돌며 CPU 점유율을 100%로 끌어올리고 결국 시스템을 멈추게 할 거예요. 반드시 탈출 조건을 꼼꼼히 체크하세요!

STEP 3. 컬렉션을 효율적으로 훑는 foreach 문법

현대적인 프로그래밍, 특히 C# 프로그래밍에서는 리스트나 배열 같은 데이터 꾸러미를 다루는 일이 정말 많아요. 이때 가장 세련되고 안전한 방법이 바로 foreach 문이에요. foreach 문은 인덱스(숫자)를 직접 관리할 필요 없이, 데이터 꾸러미 안에 있는 아이템을 하나씩 순서대로 꺼내어 줍니다.

for 문이 “첫 번째 칸, 두 번째 칸…” 하며 번호를 매겨 찾아가는 방식이라면, foreach 문은 “바구니 안에 있는 사과를 하나씩 꺼내줘”라고 말하는 방식이에요. 구조는 매우 단순해요.
foreach (var item in collection) { // item 사용 }
이렇게 작성하면 collection 안에 들어있는 모든 요소를 순차적으로 꺼내어 item이라는 변수에 담아 실행해 줘요.

foreach 문의 가장 큰 장점은 가독성과 안전성이에요. 인덱스 번호를 계산하다가 실수할 일이 전혀 없고, 코드가 마치 영어 문장처럼 읽히기 때문에 읽기에도 아주 편해요. 다만, 반복 도중에 리스트의 내용을 삭제하거나 추가하는 작업은 금지되어 있다는 점을 기억해야 해요. 데이터의 순서가 뒤섞여 오류가 날 수 있기 때문이죠.

STEP 4. 최소 한 번은 실행해야 하는 do-while 문법

일반적인 while 문은 조건부터 검사하기 때문에, 처음부터 조건이 틀리면 코드가 한 번도 실행되지 않아요. 하지만 세상에는 일단 한 번은 실행해 보고 나서 결정해야 하는 일들이 있어요. 예를 들어, 사용자에게 메뉴를 보여주고 선택을 받는 과정이 그렇죠. 메뉴를 보여줘야 선택을 할 수 있으니까요.

이럴 때 사용하는 것이 do-while 문이에요. 이름 그대로 일단 ‘do(해라)’를 먼저 수행하고, 그 다음에 ‘while(조건을 확인해라)’를 하는 구조예요. 덕분에 조건의 결과와 상관없이 무조건 최소 한 번의 실행을 보장받을 수 있어요. 실무에서는 사용자 인터페이스(UI) 입력 루프나 네트워크 연결 재시도 로직 등에서 종종 쓰인답니다.

STEP 5. 복잡한 구조를 만드는 중첩 반복문

마지막으로, 반복문 안에 또 다른 반복문을 넣는 중첩 반복문에 대해 알아볼게요. 이는 마치 시계의 시침, 분침, 초침이 맞물려 돌아가는 것과 같아요. 초침이 60번 돌아야 분침이 한 칸 움직이는 것처럼, 안쪽 반복문이 완전히 끝날 때까지 바깥쪽 반복문은 다음 단계로 넘어가지 못해요.

가장 대표적인 예시는 구구단 출력이나 2차원 배열(표 형태의 데이터)을 다룰 때예요. 행(row)을 담당하는 바깥쪽 루프와 열(column)을 담당하는 안쪽 루프가 만나면, 격자 모양의 복잡한 데이터를 완벽하게 제어할 수 있게 되죠. 하지만 주의할 점은 중첩이 깊어질수록 프로그램의 속도가 급격히 느려질 수 있다는 점이에요. 루프가 겹칠수록 실행 횟수는 곱절로 늘어나기 때문에, 알고리즘의 효율성을 항상 염두에 두어야 해요.

이 모든 반복문을 조합하면 여러분은 상상하는 거의 모든 로직을 구현할 수 있어요. 이제 각 도구의 특성을 이해했으니, 직접 코드를 짜보며 손끝으로 익히는 과정이 필요해요.

자주 하는 실수와 해결법

반복문을 공부하다 보면 누구나 한 번쯤은 벽에 부딪히게 돼요. 혼자 고민하며 시간을 허비하기보다, 자주 발생하는 실수 패턴을 미리 알고 있으면 훨씬 빠르게 성장할 수 있어요.

  • 증감식을 빠뜨려 무한 루프에 빠지는 경우
    왜 발생하는가: for 문에서 i++를 써야 하는데 실수로 쓰지 않거나, while 문의 조건을 변화시키는 코드를 작성하지 않았을 때 발생해요.
    ✅ 해결법: 루프가 끝날 수 있는 ‘탈출 조건’이 코드 내에 명확히 존재하는지 항상 확인하세요.
  • 배열 인덱스 범위를 초과하는 경우 (IndexOutOfRangeException)
    왜 발생하는가: 배열의 길이가 10인데 인덱스를 10까지 접근하려고 할 때 발생해요. (인덱스는 0부터 9까지니까요!)
    ✅ 해결법: 반복 조건식에서 i < array.Length 처럼 ‘미만’ 기호를 정확히 사용하세요.
  • foreach 문 안에서 리스트를 수정하려는 경우
    왜 발생하는가: 데이터를 훑고 있는 도중에 리스트의 요소를 삭제하거나 추가하면, 데이터의 구조가 바뀌어 순서를 보장할 수 없기 때문이에요.
    ✅ 해결법: 리스트를 수정해야 한다면 foreach 대신 인덱스를 사용하는 for 문을 쓰거나, 삭제할 항목을 별도의 리스트에 담아두었다가 반복문이 끝난 뒤 처리하세요.
  • 조건식을 잘못 설정하여 루프가 실행되지 않는 경우
    왜 발생하는가: 처음부터 조건이 거짓(false)이 되도록 작성했기 때문이에요. 예를 들어 i가 1부터 시작하는데 조건은 i > 10으로 설정한 경우죠.
    ✅ 해결법: 반복문을 작성한 직후, 첫 번째 실행 시점에 조건식이 참이 되는지 머릿속으로 시뮬레이션해 보세요.
  • 중첩 루프에서 변수 이름을 헷갈리는 경우
    왜 발생하는가: 바깥쪽 루프와 안쪽 루프의 제어 변수 이름을 모두 i로 설정하면 값이 뒤섞여 버려요.
    ✅ 해결법: 바깥쪽은 i, 안쪽은 j와 같이 변수 이름을 명확히 구분해서 사용하세요.

자주 묻는 질문

Q. for 문과 while 문 중 무엇이 더 좋은가요?

둘 중 무엇이 더 좋다고 말할 수는 없어요. 반복할 횟수가 정해져 있다면 for 문이 코드의 의도를 명확히 보여주어 읽기 편하고, 횟수가 불확실하다면 while 문이 훨씬 자연스러워요. 상황에 맞는 적절한 도구를 선택하는 것이 핵심이에요.

Q. break와 continue의 차이가 무엇인가요?

break는 반복문을 아예 통째로 탈출하여 끝내버리는 명령이고, continue는 현재 차례의 남은 코드만 건너뛰고 바로 다음 반복(증감식 단계)으로 넘어가는 명령이에요. 즉, break는 ‘종료’, continue는 ‘다음으로 건너뛰기’라고 이해하시면 돼요.

Q. foreach 문을 쓰면 성능이 느려지나요?

아주 미세한 차이는 있을 수 있지만, 일반적인 비즈니스 로직에서는 거의 체감할 수 없는 수준이에요. 성능을 아주 극단적으로 최적화해야 하는 특수 상황이 아니라면, 가독성과 안전성이 뛰어난 foreach 문을 우선적으로 사용하는 것을 추천해요.

Q. 무한 루프를 만들 수도 있나요?

네, 의도적으로 만들 때도 있어요. 예를 들어 서버 프로그램은 클라이언트의 요청을 24시간 내내 기다려야 하므로 while(true)를 사용해 무한 루프를 돌리며 대기 상태를 유지하기도 해요. 하지만 일반적인 알고리즘에서는 반드시 탈출 조건이 있어야 해요.

Q. 중첩 반복문은 몇 단계까지 쓰는 게 적당한가요?

보통 2~3단계 정도가 적당해요. 4단계 이상 넘어가면 코드를 이해하기가 매우 힘들어지고, 실행 속도도 기하급수적으로 느려져요. 만약 중첩이 너무 깊어진다면 로직을 별도의 메서드로 분리하는 것을 고려해 보세요.

반복문 마스터를 위한 마지막 체크리스트

오늘 우리는 C# 프로그래밍의 든든한 기초가 되는 반복문들에 대해 깊이 있게 알아보았어요. 처음에는 조건식과 증감식이 헷갈릴 수 있지만, 직접 코드를 치며 오류를 겪어보는 것이 가장 빠른 학습 방법이에요.

✅ 핵심 요약

  • 횟수가 정해진 반복은 for 문을 사용하세요.
  • 조건에 따른 무한 반복이 필요하면 while 문이 적합해요.
  • 컬렉션 데이터를 안전하게 훑을 때는 foreach 문이 최고예요.
  • 최소 한 번의 실행이 보장되어야 한다면 do-while 문을 쓰세요.
  • 중첩 루프는 변수 이름(i, j, k)을 명확히 구분해야 해요.
  • 무한 루프와 인덱스 범위 오류(IndexOutOfRangeException)를 항상 경계하세요.

이제 배운 내용을 바탕으로 오늘 바로 실행해 볼 과제를 드릴게요.

[오늘 할 일]
Visual Studio나 VS Code를 켜고, for 문을 이용해 구구단 2단부터 9단까지 출력하는 코드를 직접 작성해 보세요.

[이번 주 할 일]
배열(Array)과 리스트(List)를 만들어 두고, foreach 문과 while 문을 각각 사용하여 데이터의 합계를 구하는 연습을 해 보세요.

[실행 직전 할 일]
반복문을 돌릴 때 발생할 수 있는 ‘무한 루프’ 상황을 상상해 보고, 어떻게 하면 안전하게 멈출 수 있을지 스스로 질문해 보세요.

반복문은 단순한 기술을 넘어 프로그래밍 사고력의 기초예요. 이 기초가 탄탄해야 나중에 복잡한 알고리즘과 데이터 구조를 만났을 때 당황하지 않을 수 있답니다. 예제 코드를 직접 따라 하며 오늘 바로 익혀 보세요. 여러분의 성장을 진심으로 응원해요!

다음 단계로 넘어가고 싶다면, 반복문과 단짝인 C# 조건문 관련 글을 읽어보시는 것을 강력히 추천해 드려요. 논리적인 흐름을 만드는 두 기둥을 모두 세우면 개발의 재미가 두 배가 될 거예요.

댓글 남기기