2장. 이름에 정보 담기
프로그래밍하면서 가장 고민 되는 부분 중 하나가 이름을 짓는 것이다. 언제나 창작의 고통은 큰 것 같다. 하지만 잘 지은 이름은 이후에 뿌듯함만 주는 것이 아니라 코드를 쉽게 이해할 수 있도록 도움을 준다.
기존에 코드 컴플리트에서는 tmp
, result
와 같은 변수를 사용하지 말라고 추천했었는데, 이 책에서는 조금 관대한 모습을 보여준다. 좁은 범위의 코드 내에서는 위처럼 보편적인 변수명을 사용해도 문제되지 않고, 오히려 좋을 것이라고 말해준다. 하지만 범위가 커지고, 개인의 귀차니즘(?) 때문에 지은 보편적인 이름들은 에러를 발생했을 때, 문제를 발견하기 더 어렵게 만든다고 말한다.
반복문에 사용하는 i
, j
, k
와 같은 변수명들도 누구나 이 것이 반복문에서 사용되는 인덱스임을 이해할 수 있기 때문에 사용해도 괜찮다고 한다. 하지만 더 좋은 방법이 있다. 의미가 있는 특정 이름을 사용하는 것이 중첩된 반복문을 사용할 때, 인덱스를 사용함에 있어서 실수를 줄여준다.
for (int i = 0; i < organic.length(); i++) {
for (int j = 0; j < people.length(); j++) {
for (in k = 0; k < children.length(); k++) {
if (people[k].age > children[j].age) {
cout << 'adult' << endl;
}
}
}
}
위의 코드는 사실 문제가 있다. if (people[k].age > children[j].age)
에서 배열의 인덱스를 잘 못 설정했다. 이러한 문제를 쉽게 해결할 수 있는 방법이 의미가 있는 이름을 짓는 방법이다. organic_i
, people_i
, children_i
처럼 이름을 지었다면 금방 문제를 발견할 수 있었을 것이다.
이름이 얼마나 길어도 되는지에 대한 질문에 대한은 쉽다. 현재 우리가 사용하는 대부분의 코드 편집기에서 자동 완성 기능을 제공한다. 이를 충분히 사용하라. 그리고, 의미를 충분히 포함하는 이름을 짓자.