•
반복문이란 순환적인 제어 구조의 모든 형태, 프로그램이 특정한 코드 블록을 반복 실행하게 만드는 모든 구조를 가리키는 용어다.
1. 반복문 종류 선택
•
대부분의 언어에서 다음과 같은 종류의 반복문을 사용한다.
◦
계수형 반복문은 특정한 횟수만큼 수행된다.
◦
지속 판단형 반복문은 실행 횟수가 정해지지 않고 반복 작업에 중단할지 검사한다.
◦
무한 반복문은 일단 끝없이 실행된다.
◦
iterator를 사용한 반복문은 컨테이너 클래스에 있는 각 요소에 대해서 한 번씩 수행된다.
•
반복문의 종류는 먼저 유연성에 의해 갈린다. 반복문이 지정된 횟수만큼 실행되는지, 아니면 반복할때마다 중단 여부를 테스트하는지에 따라 달라진다. 그리고 종료 조건문의 위치에 따라 차별화된다.
반복문의 종류 | 유연성 | 테스트 위치 |
for | 유연함 | 시작 |
while | 유연함 | 시작 |
do-while | 유연함 | 끝 |
foreach | 유연성이 없음 | 시작 |
while 반복문을 사용하는 시기
•
비교적 유연한 반복문에 속하며 반복문을 몇번 반복해야하는지 정확히 알지 못할 때 사용한다.
탈출이 가능한 반복문을 사용하는 시기
•
종료 조건이 반복문의 시작이나 끝이 아닌 중간에 나타나는 반복문이다.
for 반복문을 사용하는 시기
•
for 반복문은 지정한 횟수만큼 실행하는 반복문이 필요할 때 사용한다. 내부적인 반복문 제어가 필요없는 간단한 작업에 사용한다.
foreach 반복문을 사용하는 시기
•
배열이나 컨테이너의 각 멤버에 대해서 연산을 수해앟는 경우 유용하다.
•
이 반복문은 반복문을 수행하기 위한 인덱스가 필요 없다는 특징을 바탕으로 반복문 계산 과정에서 오류가 발생할 가능성을 없애준다.
2. 반복문 제어
•
반복문에는 초기화 실수, 변수의 초기화 생략, 부적절합 중첩 등의 문제 등이 발생할 수 있는데, 다음 두 습관을 지킴으로써 방지할 수 있다.
◦
반복문에 영향을 미치는 요소의 수를 최소화한다.
◦
반복문의 내부를 마치 별도의 메소드인 것처럼 취급한다.
▪
될 수 있는 한 제어 부분을 반복문 외부에 입력한다.
반복문 진입
•
반복문을 시작하기 바로 전에 초기화 코드를 두어라.
•
적절하다면 for 반복문을 사용하라.
◦
for 반복문은 반복문 제어 코드를 한곳에 모아 읽기 쉬운 반복문을 만든다.
반복문 본문
•
언제나 괄호를 사용하라.
◦
한 줄이라고 생략하지 말자. 일관성을 지키면 가독성은 따라오게 되어있다.
•
빈 반복문을 피하라.
•
반복문에서 보조 관리 작업은 반복문의 시작이나 끝에 놓아라.
◦
반복문의 다음 코드 블록으로 이동하기 위한 변수들이다.
•
반복문이 하나의 기능만 처리하게 하라.
반복문 종료
•
반복문이 종료되는지 확인하라.
•
반복문 종료 조건을 분명히 하라.
반복문 탈출하기
•
불린 플래그보다 break를 사용하라.
◦
불린 플래그는 해당 조건문을 탈출하고서도 수명이 남아있고 변경될 요지가 있다. break는 흐름을 반복문으로부터 탈출시키므로 가독성이 좋다.
•
반복문 내에 수 많은 break 문이 사용되는 것을 경계한다.
◦
break가 많다면 반복문의 구조나 역할에 대해서 불분명하게 이해하고 있다는 뜻일 수 있다.
종결점 확인
•
효율적인 개발자는 먼저 머릿속에서 돌려보고 손으로 계산해본다. 비효율적인 개발자는 작동할 것 같은 조합을 찾을 때까지 무작정 실험하는 경향이 있다.
•
머릿속에서 프로그램을 돌려보고 손으로 계산해 봄으로써 많은 이득을 얻을 수 있다.
반복문 변수 사용
•
중첩 반복문을 읽기 쉽게 하기 위해서 의미 있는 변수 이름을 사용하라.
반복문이 얼마나 길어야 할까?
•
한눈에 볼 수 있을 정도로 길이를 짧게 하라.
•
중첩을 세 단계 이하로 제한하라.
•
긴 반복문의 내부 반복문을 메소드로 이동시켜라.
•
길이가 긴 반복문은 특히 명료하게 작성하라.
요점 정리
•
반복문은 복잡하다. 따라서 반복문을 간단하게 작성할수록 코드를 이해하기가 쉽다.
•
반복문을 간단하게 작성하는 기법은 특이한 모양의 반복문을 피하고 중첩을 최소화하며 진입과 탈출을 명확하게 만들고 보조 관리 코드를 한 곳에 작성하는 것이다.
•
반복문 인덱스는 남용하기가 쉽다. 명확한 이름을 사용하고 한 가지 목적으로만 사용한다.
•
반복문이 모든 경우에 정상적으로 작동하고 모든 조건에 대해서 종료하는지 검증하기 위해서 신중하게 생각한다.