카테고리 없음

Chapter16 - Controlling Loops

아찌방 2025. 2. 2. 19:26

 

루프 중요함 ㅇㅇ

 

16.1 Selecting the Kind of Loop( 반복문 종류 선택)

 

프로그램에 따라 적절한 반복문을 선택하는 것이 중요함.

 

반복문 선택 시 고려 사항
유연성: 반복문이 고정된 횟수를 반복할지, 아니면 조건을 검사하여 반복할지
검사 위치: 조건 검사 위치에 따라 반복문이 실행되는 방식이 달라짐

 

While문 써야 할 때

while => 유연성 좋음, 조건 참이면 반복

1. 반복 횟 수 모를때, 반복 조건을 매번 검사해야 할 때

2. 최소 한 번은 실행해야 할 때

 

Loop-With-Exit 반복문 써야 할 때

loop-with-exit =>사람이 생각하는 방식과 비슷, 이해하기 쉬움

 

For문 써야 할 때

내부 루프 컨프롤이 필요 없을 때 => 간단한 루프

루프의 인덱스를 임의로 변경 X => while 사용

 

Foreach문 써야 할 때

배열, 다른 컨테이너의 각 멤버에 대해 작업할 때


16.2 Controlling the Loop(루프 제어)

루프에서 발생하는 오류 : 초기화 오류, 종료 조건 오류, 변수 증가 오류, 배열 인덱싱 오류 등

 

루프 진입

1. 진입 위치는 하나만

2. 초기화 코드는 루프 바로 앞에

3. 무한 루프는 while(true) or for(;;)로 명확하게

4. 적절하게 for문 사용

5. for 루프 헤더에는 루프 제어만

recordCount = 0;
for ( inputFile.MoveToStart(); !inputFile.EndOfFile(); inputFile.GetRecord() ) {
	recordCount++;
}

 

이렇게 할 거면 while문 사용

inputFile.MoveToStart();
recordCount = 0;
while ( !inputFile.EndOfFile() ) {    
	inputFile.GetRecord();
   recordCount++; 
}

 

Processing the Middle of the Loop(루프 중간 처리 지침)

 

1. 루프 안에 {, } 사용 => 가독성 향상, 오류 방지 => 항상 사용 추천

2. 빈 루프 X => 종료 조건과 작업을 명확하게 분리하기

3. 루프 집행 관련 작업은 루프의 시작이나 끝에 배치 => 코드 흐름을 명확하게 관리

4. 각 루프는 하나의 기능만 수행

 

Exiting the Loop (루프 종료 처리 지침)

1. 루프 종료 확실히 확인

2. 종료 조건을 명확하게 => 종료 조건을 한 곳에서 관리

3. 인덱스를 수정하여 종료하지 않기 => for문에서 인덱스 변경할 거면 차라리 while 사용하기

4. 인덱스의 최종 값에 의존하지 않기 => 인덱스가 아닌 종료 조건을 변수에 할당해서, 이를 활용하기

5. 안전 카운터 사용 고려 => 루프가 예상보다 더 많이 돌아가는 경우를 방지하기 위해 사용, 코드 복잡성 높아질 수 있으니까 주의

 

일찍 종료하기 : break와 continue

break 사용 시

break 너무 많이 사용하지 말기 => 차라리 루프를 나누기

java 같은 경우 라벨 붙이기 => 명확성 향상

 

break와 continue는 루프 제어를 간결하게 만들 수 있지만, 남용하거나 과도하게 사용하면 코드가 복잡해짐

신중하게 사용하시오.

 

Checking Endpoints (엔드포인트 점검)

 

루프의 주요 세 관점:
첫 번째 경우: 루프의 시작에서 발생하는 상황
중간 경우: 루프 실행 중간에 발생하는 일반적인 상황

마지막 경우: 루프가 종료될 때 발생하는 상황

 

효율적인 프로그래머는 루프를 작성할 때 정신적으로 시뮬레이션을 해보고 손으로 계산하여 예상되는 결과를 체크 함.

=> 초기 코딩에서 오류를 줄이고, 디버깅을 더 빠르게 하며, 프로그램을 더 잘 이해함

 

정신적 시뮬레이션과 수학적 검산의 이점:
1. 오류를 줄이고 초기 코딩 단계에서부터 보다 명확한 이해를 바탕으로 코드를 작성할 수 있음
2. 디버깅이 빠르고, 프로그램의 정확한 동작 방식을 이해 가능.작동 방식을 잘 이해 가능 => 문제가 발생했을 때 그 원인도 빠르게 파악 가능

 

Using Loop Variables ( 루프 변수 사용)

 

1. 정수형 변수로 루프 인덱스 설정하기

2. 의미 있는 변수 이름 사용하기 => 루프의 목적, 배열의 인덱스 명확히 하기

3. 루프 인덱스 변수는 루프 내에서만 사용하기, 인덱스 교차 사용 X

 

How Long Should a Loop Be? (루프의 길이)

 

1. 한 번에 볼 수 있을 정도로 => 15 - 20라인

2. 중첩은 최대 3번까지 => 넘어가면 분리

3. 길 수록 단일 종료 조건 사용, 종료 조건을 명확하게 하기 => 가독성 중요

 


16.3 Creating Loops Easily—From the Inside Out (루프 만들기—내부에서 외부로)

 

1. 단계별로 작업을 추가 => 처음에는 구체적인 데이터와 간단한 코드로 시작하고, 점차적으로 루프를 확장
2. 루프 인덱스 추가 => 배열이나 데이터 구조에 인덱스를 추가해 가며 코드를 구체화
3. 복잡한 루프는 작은 부분으로 나누어 작성 => 각 단계를 하나씩 해결하면서 점진적으로 루프를 만들기

 

 


16.4 Correspondence Between Loops and Arrays (루프와 배열 간의 대응)

 

루프와 배열은 관련이 깊음 => 루프 카운터가 배열의 인덱스와 일대일로 대응

그러나 루프와 배열은 본질적으로 연결되어 있지 않다는 점을 유의해야 함

 

경우에 따라 루프가 아닌 언어가 제공하는 기능 사용하는게 효율적

ex) APL의 배열 곱셈

product <- a x b

 

루프를 사용하는 경우 체크리스트를 참고하여 코드 품질을 높이고, 명확하고 오류가 없는 코드 작성이 가능

728x90