퍼포마의 야근근절을 위한 코딩

반복문 - 초보자들이 주의해야 할 2가지 실수

인생은스트러글 2022. 11. 21. 07:35

[목차]

0. 여는 말

1. 실수1: 잘못 설정된 반복 범위

2. 실수2: 무한 루프(loop)

3. 맺는 말

 


 

0. 여는 말

 

지난 글에서 '반복문의 개념, 활용 가능 영역, 그리고 장단점'에 대해 알아 보았는데요 (아래 글 참조),

 

 

반복문 - 개념, 활용방안, 그리고 장단점

[목차] 0. 여는 말 1. 반복문의 개념 2. 반복문의 활용 가능 영역 3. 반복문의 장점 4. 반복문의 단점 5. 맺는 말 0. 여는 말 이번 글과 다음 글에서는 '반복문'에 대해 얘기해 보려 합니다. 반복문은

lifeisstruggle.tistory.com

 

이번 글에서는 '초보자들이 반복문을 사용할 때 주의해야 할 대표적인 2가지 실수'에 대해 얘기해 보겠습니다.
바로 글 시작하겠습니다!

 


 

1. 실수1: 잘못 설정된 반복 범위

 

내가 의도한 범위의 경우의 수들을 모두 다루는지 확인하자 !

 

반복문을 사용할 때 가장 흔히 발생하는 실수 중 하나가 '전체 경우의 수 중 1~2개가 누락되는 것' 입니다.
아주 작은 차이라서 크게 눈에 띄지 않아 놓치기 쉬운 부분이기도 합니다.
같은 코드 라인(line)들이라도 그 라인(line)들의 배열 순서에 따라 내가 의도한 경우들을 모두 다룰 수도, 그렇지 않을 수도 있으니 내가 만든 코드가 의도한 모든 경우들을 다루고 있는지 확인하는 습관을 들이는 것이 좋습니다.

독자 분들의 이해를 돕기 위해 2가지 예시를 들어보겠습니다.

먼저 첫 번째 예시입니다.

예시 1: 들어가는 코드 라인들은 동일하나, 그 배열 순서 차이에 따라 출력 범위가 달라지는 경우

 

첫 번째 예시는 '들어가는 코드 라인들은 동일하나, 그 배열 순서 차이에 따라 출력 범위가 달라지는 경우' 입니다.
위 두 가지 케이스 모두 5가지 경우를 커버하는 것은 동일하지만, "num += 1" 이라는 코드의 위치에 따라 1~5의 값을 출력하기도, 0~4의 값을 출력하기도 합니다.

 

다음은 두 번째 예시입니다.

예시 2: 들어가는 코드 라인들은 동일하나, 그 배열 순서 차이에 따라 다루는 경우의 수까지 달라지는 경우

 

두 번째 예시는 첫 번째 예시와 마찬가지로 들어가는 코드 라인들은 동일하지만, '그 배열 순서에 따라 조건문을 충족시키는 경우의 수가 달라져, 출력 범위 뿐 아니라 경우의 수까지 달라지는 경우' 입니다.
"num += 1" 이라는 코드의 위치에 따라 첫 번째 케이스에서는 1~4까지 4가지 경우의 수를 다루는 반면, 두 번째 케이스에서는 0~4까지 5가지 경우의 수를 다루고 있습니다.

 

두 가지 예시를 들어봤는데요, 어떤 독자 분들은 '이렇게 눈에 잘 보이는 데 실수할 수가 있나?' 라고 생각하실 수도 있을 것 같아요. 하지만 실제로는 위 예시보다 코드가 더 복잡할 수도 있고, 그럴수록 코드가 내가 의도했던 경우들을 모두 다루지 못하는 것을 파악하기 어려울 수 있어요. 그러니 꼭! 코드가 내가 의도했던 경우들을 모두 다루는지 확인하시는 것을 추천드립니다 :)

 

Tip: 이러한 불상사의 빈출 원인으로는 1) 부등호의 등호 포함 여부 ('>'와 '>='의 차이)2) 실행횟수에 영향을 미치는 변수가 있는 라인의 위치 (위 예시에서는 num이 있는 'num += 1'), 이렇게 2가지 정도가 있습니다. 이 부분을 좀 더 중점적으로 확인하셔도 좋을 것 같네요 :)

 


 

2. 실수2: 무한 루프(loop)

 

while문 사용 시, 무한루프에 빠지지 않도록 세팅 확인 & break 기능을 활용하자 !

 

while문으로 반복문을 구현하면, 가끔 무한루프(loop)의 늪에 빠지는 경우가 있습니다. 무한루프란 '내가 설정한 범위가 끝이 없어 코드가 무한히 반복되며 끝나지 않는 경우'를 의미합니다.

 

끝나지 않는 무한 굴레,,, (빙빙 돌아가는 회전목마처럼~ 영원히 계속될 것처럼~ )

 

이 실수는 코드 실행이 종료되지 않기 때문에 비교적 발견하기 쉽습니다. 코드 실행이 끝날 때가 된 것 같은데 끝나지 않고 계속된다면 무한루프에 빠진 것은 아닌지 의심해 볼 수 있으며, 이 경우가 맞다면 내가 설정한 범위가 잘못되었는지 확인 후, 수정하여 해결 가능합니다.

또한, break 기능을 사용하여 강제 종료 장치를 심어둘 수도 있습니다.
아래 예시와 함께 살펴보겠습니다.

 

while문의 조건은 앞선 예시와 동일하지만, break 기능을 통해 일정 수준에서 코드를 강제 종료시킵니다.

 

앞선 무한루프 예시와 거의 동일하나, 중간에 if문과 break가 추가되었습니다.
이 추가된 코드로 인해 변수 a가 20 이상이 되면 코드가 강제 종료되도록 설정이 추가되었고, 실제로 실행해 보면 while문의 조건이 무한함에도 불구하고, 19까지만 출력되고 반복문이 종료되는 것을 확인할 수 있습니다.
미처 예상하지 못한 무한루프 오류를 강제로 막을 수 있는 기능으로, 이를 활용하시면 좀 더 안정적인 코드를 짜실 수 있을 것입니다.

 


 

3. 맺는 말

 

이번 글에서는 '초보자가 반복문을 사용할 때 가장 흔히 발생하고, 그만큼 주의해야 하는 2가지 실수'에 대해 다뤄보았습니다.
문제가 될 수 있는 상황이야 무궁무진하겠지만, 위에 언급한 2가지만 피할 수 있어도 반복문에서는 거의 문제가 발생하지 않을 것이라 생각합니다.

더하여, 이제 코드가 조금씩 본격적으로 등장하기 시작하는데요,
코드를 복붙(복사+붙여넣기)해서 실행도 해 보시고, 필사처럼 따라서 타이핑도 해 보시고, 그 다음 코드의 논리(흐름)가 익숙해지시면 예시를 보지 않고 스스로 코드를 짜 보기도 하시면서 코딩에 조금씩 익숙해지시기를 바랍니다.
만약 이해가 안 가거나 막히는 부분들이 있다면, 그건 여러분의 실력 문제가 아니라 전적으로 설명이 미흡한 저의 탓이니, 혼자 고민하시다가 포기하지 마시고 댓글 등으로 문의를 주세요. 최대한 이해가 되시도록 추가 설명을 드리겠습니다 :)

 

다음 글에서는 반복문과 함께 필수적인 구문 중 하나라고 생각하는 '조건문 (if문)'에 대해 얘기해보려 합니다.
엑셀(excel)에서 쓰는 if 함수와 크게 다르지 않아 엑셀에 익숙한 분이시라면 크게 어렵지 않게 이해하실 수 있을 것이라 생각하는데요, 자세한 내용은 다음 글에서 다뤄보도록 하겠습니다.

 

그러면 오늘 글은 여기서 마치겠습니다.
오늘도 긴 글 읽으시느라 고생 많으셨습니다!

 

 

리들의 스트러글(struggle)하는 현생, 화이팅입니다!

 

반응형