규도자 개발 블로그

좋은 변수이름 정하기 : 반복문 인덱스 이름 본문

소프트웨어 공학/Clean Code

좋은 변수이름 정하기 : 반복문 인덱스 이름

규도자 (gyudoza) 2018. 10. 9. 23:27

전의 게시물에서도 밝혔다시피 이 게시물은 스티브 맥코넬이 쓴 CODE COMPLETE2에 나온 내용이며 다른 사람들에게도 변수 이름의 중요성과 그 이름을 정하는 데 도움을 주기 위해, 그리고 나 자신도 필요할 때마다 참고하기 위해 쓴다는 것을 알린다.

반복문 인덱스 이름

반복문 변수 이름을 위한 가이드라인이 생겨난 이유는 반복문이 컴퓨터 프로그래밍에서 일반적인 기능이기 때문이다. i, j, k와 같은 이름을 관습적으로 사용한다.


간단한 반복문 변수 이름에 대한 자바 예제

for (i = firstItem; i < lastItem; i++){
    data[i] = 0;
}

변수를 반복문 외부에서 사용해야 한다면 반드시 i나 j, k보다는 좀 더 의미 있는 이름을 지어야 한다. 가령 파일로부터 레코드를 읽어 들이고 얼마나 많은 레코드를 읽었는지 기억해야 한다면 recordCount와 같은 이름이 적절할 것이다.


설명적인 반복문 변수 이름에 대한 자바 예제

recordCount = 0;
while (moreScores()){
    score[recordCount] = getNextScore();
    recordCount++;
}

// recordCount를 사용하는 코드
...

반복문이 길어진다면 i가 무엇을 나타내는지 쉽게 잊히기 때문에 반복문의 인덱스에 좀 더 의미 있는 이름을 짓는 게 좋다. 코드는 자주 변경되고 확장되고 다른 프로그램에 복사되기 때문에 숙련된 개발자들은 i와 같은 이름을 사용하지 않는다.

 반복문이 길어지는 한 가지 이유는 반복문이 중첩되기 때문이다. 여러 개의 중첩된 반복문이 있다면 가독성을 향상하기 위해 좀 더 긴 이름으로 반복문 변수를 작성한다.


중첩된 반복문에서 좋은 반복문 이름을 가진 자바 예제

for (teamIndex = 0; teamIndex < teamCount; teamIndex++){
    for(eventIndex = 0; eventIndex < eventCount[teamIndex]; eventIntex++){
        score[teamIndex][eventIndex] = 0;
    }
}

반복문 인덱스 변수의 이름을 신중하게 선택하면 인덱스 혼선으로 인한 일반적인 문제를 피할 수 있다. 예를 들면 j를 의미할 때 i를 말하고 i를 의미할 때 j를 말하는 경우가 그렇다. 또한 배열 접근을 더 분명하게 한다. score[teamIndex][eventIndex]는 score[i][j]보다 많은 정보를 제공한다.

 i, j, k를 사용해야 한다면 간단한 반복문을 위한 인덱스 이외의 용도로는 사용하지 않는다. 이 규약을 어기고 다른 방법으로 이 변수를 사용하면 혼란을 일으킬 수 있을 정도로 이 규약은 아주 잘 정립되어 있다. 이런 문제를 피하는 가장 간단한 방법은 i, j, k보다 더 설명적인 이름을 생각해내는 것이다.

 

Comments