////
Search
Duplicate
🏟️

16. 반복문 제어

반복문이란 순환적인 제어 구조의 모든 형태, 프로그램이 특정한 코드 블록을 반복 실행하게 만드는 모든 구조를 가리키는 용어다.

1. 반복문 종류 선택

대부분의 언어에서 다음과 같은 종류의 반복문을 사용한다.
계수형 반복문은 특정한 횟수만큼 수행된다.
지속 판단형 반복문은 실행 횟수가 정해지지 않고 반복 작업에 중단할지 검사한다.
무한 반복문은 일단 끝없이 실행된다.
iterator를 사용한 반복문은 컨테이너 클래스에 있는 각 요소에 대해서 한 번씩 수행된다.
반복문의 종류는 먼저 유연성에 의해 갈린다. 반복문이 지정된 횟수만큼 실행되는지, 아니면 반복할때마다 중단 여부를 테스트하는지에 따라 달라진다. 그리고 종료 조건문의 위치에 따라 차별화된다.
반복문의 종류
유연성
테스트 위치
for
유연함
시작
while
유연함
시작
do-while
유연함
foreach
유연성이 없음
시작

while 반복문을 사용하는 시기

비교적 유연한 반복문에 속하며 반복문을 몇번 반복해야하는지 정확히 알지 못할 때 사용한다.

탈출이 가능한 반복문을 사용하는 시기

종료 조건이 반복문의 시작이나 끝이 아닌 중간에 나타나는 반복문이다.

for 반복문을 사용하는 시기

for 반복문은 지정한 횟수만큼 실행하는 반복문이 필요할 때 사용한다. 내부적인 반복문 제어가 필요없는 간단한 작업에 사용한다.

foreach 반복문을 사용하는 시기

배열이나 컨테이너의 각 멤버에 대해서 연산을 수해앟는 경우 유용하다.
이 반복문은 반복문을 수행하기 위한 인덱스가 필요 없다는 특징을 바탕으로 반복문 계산 과정에서 오류가 발생할 가능성을 없애준다.

2. 반복문 제어

반복문에는 초기화 실수, 변수의 초기화 생략, 부적절합 중첩 등의 문제 등이 발생할 수 있는데, 다음 두 습관을 지킴으로써 방지할 수 있다.
반복문에 영향을 미치는 요소의 수를 최소화한다.
반복문의 내부를 마치 별도의 메소드인 것처럼 취급한다.
될 수 있는 한 제어 부분을 반복문 외부에 입력한다.

반복문 진입

반복문을 시작하기 바로 전에 초기화 코드를 두어라.
적절하다면 for 반복문을 사용하라.
for 반복문은 반복문 제어 코드를 한곳에 모아 읽기 쉬운 반복문을 만든다.

반복문 본문

언제나 괄호를 사용하라.
한 줄이라고 생략하지 말자. 일관성을 지키면 가독성은 따라오게 되어있다.
빈 반복문을 피하라.
반복문에서 보조 관리 작업은 반복문의 시작이나 끝에 놓아라.
반복문의 다음 코드 블록으로 이동하기 위한 변수들이다.
반복문이 하나의 기능만 처리하게 하라.

반복문 종료

반복문이 종료되는지 확인하라.
반복문 종료 조건을 분명히 하라.

반복문 탈출하기

불린 플래그보다 break를 사용하라.
불린 플래그는 해당 조건문을 탈출하고서도 수명이 남아있고 변경될 요지가 있다. break는 흐름을 반복문으로부터 탈출시키므로 가독성이 좋다.
반복문 내에 수 많은 break 문이 사용되는 것을 경계한다.
break가 많다면 반복문의 구조나 역할에 대해서 불분명하게 이해하고 있다는 뜻일 수 있다.

종결점 확인

효율적인 개발자는 먼저 머릿속에서 돌려보고 손으로 계산해본다. 비효율적인 개발자는 작동할 것 같은 조합을 찾을 때까지 무작정 실험하는 경향이 있다.
머릿속에서 프로그램을 돌려보고 손으로 계산해 봄으로써 많은 이득을 얻을 수 있다.

반복문 변수 사용

중첩 반복문을 읽기 쉽게 하기 위해서 의미 있는 변수 이름을 사용하라.

반복문이 얼마나 길어야 할까?

한눈에 볼 수 있을 정도로 길이를 짧게 하라.
중첩을 세 단계 이하로 제한하라.
긴 반복문의 내부 반복문을 메소드로 이동시켜라.
길이가 긴 반복문은 특히 명료하게 작성하라.

요점 정리

반복문은 복잡하다. 따라서 반복문을 간단하게 작성할수록 코드를 이해하기가 쉽다.
반복문을 간단하게 작성하는 기법은 특이한 모양의 반복문을 피하고 중첩을 최소화하며 진입과 탈출을 명확하게 만들고 보조 관리 코드를 한 곳에 작성하는 것이다.
반복문 인덱스는 남용하기가 쉽다. 명확한 이름을 사용하고 한 가지 목적으로만 사용한다.
반복문이 모든 경우에 정상적으로 작동하고 모든 조건에 대해서 종료하는지 검증하기 위해서 신중하게 생각한다.