////
Search
Duplicate
🎿

11. 변수명의 기능

1. 좋은 이름을 위한 고려 사항

보통 변수의 좋고 나쁨은 그 이름에 의해 좌우된다. 변수의 이름을 신중하게 선택해야 한다.

이름을 지을 때 가장 중요한 고려 사항

변수 이름을 지을 때 그 이름이 변수가 나타내고자 하는 바를 완전하고 정확하게 설명하는지를 가장 중요하게 생각해야 한다.
미국 올림픽 대표팀 선수가 몇명인지 나타내는 변수의 이름은 numberOfPeopleOnTheUsOlympicTeam이 좋다.
이처럼 좋은 이름에는 두 가지 특징이 존재한다.
하나는 해석하기 쉽다는 점이다. 변수 이름은 해석할 필요없이 바로 받아들일 수 있게끔 쉽게 읽을 수 있어야 한다.
나머지 하나는 가능한 구체적이라는 점이다. 한 가지 이상의 목적으로 사용되기 쉬운 막연한 이름은 많은 정보를 제공하지도 않고 일반적으로 나쁜 이름이다.

문제 지향

좋은 이름은 일반적으로 해결책보다 문제에 대해서 서술하고 있는 경향이 있다.
어떻게보다 무엇을 표현한다.
일반적으로 이름이 문제보다 해결 과정의 어떤 측면을 가리키고 있다면 이는 무엇보다는 어떻게에 대한 것이다. 문제 자체를 가리키는 이름이 좋다.
직원의 데이터에 대한 레코드는 inputRec이나 employeeData가 될 수 있다.
inputRec은 입력과 레코드라는 컴퓨팅 개념을 가리키는 컴퓨터 용어다. employeeData는 컴퓨팅보다는 문제 영역에 해당한다.
조금 더 도메인에 집중해서 표현하라는 의미로 받아들여도 될 것 같다.

최적의 이름 길이

최적의 길이는 존재하지 않는다. 너무 짧은 이름은 충분한 의미를 전달하지 못하고 너무 긴 이름은 외관상 우릴 읽기 두렵게 만든다.
너무 많지도 적지도 않은 상태로 유지하는 것이 좋다. 가급적 3, 4단어들의 조합까진 허용되는 것 같다.

범위가 변수명에 미치는 효과

짧은 변수 이름이 항상 나쁜 것일까? 그 변수의 수명이 짧다면 좋은 선택일지도 모른다.
범위가 짧다면 변수의 이름이 짧아도 충분하다는 의미다. 즉 그 변수를 해석하기에 너무 많은 정보가 존재하지 않으므로 단순해도 상관이 없다.
하지만 짧은 이름은 문제를 일으킬 가능성이 존재하므로 신중한 개발자들은 방어적으로 짧은 이름을 피하곤 한다.
전역 네임스페이스에 있는 변수에는 한정자를 사용하라.
변수가 전역 공간에 있다면 전역 공간을 나누고 이름 충돌을 피하기 위한 컨벤션을 고려해본다.
이를 지원하지 않는다면 접두사로 서브시스템을 붙이는 것을 추천한다.

변수 이름의 계산값 한정자

많은 프로그램이 총계, 평균, 최댓값등 수학적 계산값을 보관하는 변수를 가진다.
total, sum, average와 같은 한정자를 변수의 이름에 넣는 경우, 이름 끝에 한정자를 입력한다.
한 가지 예외는 num 한정자의 위치다.
앞에 있는 경우, 총계를 가리킨다, 뒤에 있는 경우 인덱스를 가리킨다.
전체 고객의 수는 customerCount, 특정 고객을 가리킬때는 customerIndex를 사용하는 것이 좋다.

일반적인 변수명의 반의어

반의어를 두루뭉실하게 사용하지 말라. 반의어에 대한 컨벤션을 적절하게 사용하면 일관성을 유지하고 가독성을 높이는데 도움이 된다.
다음은 몇 가지 일반적인 반의어다.
begin/end, first/last, locked/unlocked, min/max, next/previous, old/new, opened/closed, visible/invisible

2. 특정 타입의 데이터 이름 짓기

반복문 인덱스 변수명

반복문이 짧다면 i, j, k로도 충분하다.
반복문이 길어진다면 해석을 위해 충분히 힌트가 될만한 변수명을 사용하자.

상태 변수명

상태 변수에 flag보다 더 나은 이름을 생각해본다.
그 어떠한 단서도 제공하지 않기 때문에 프로그램 상에서 어떤 의미를 나타내는지 확인하고 이름을 지어보자.
열거형에도 이 접근방법을 사용할 수 있다.

임시 변수명

임시 변수는 계산의 중간 결과를 보관하기 위해 임시 저장소로 사용되고 보조 수단으로 사용하는 값을 보관하는데 사용된다.
대개는 tempx같은 모호하고 이해하기 어려운 이름을 갖는다.
임시 변수는 개발자가 문제를 완벽하게 이해하기 있지 못한다는 신호로 상태 자체가 임시이기 때문에 개발자는 임시 변수를 다른 변수보다 별생각없이 다루게 되어 오류가 발생할 가능성이 높다.
가급적이면 이름을 지어주자.

불린 변수명

전형적인 불린 변수의 이름을 기억한다.
done
무언가가 수행되었다는 것을 가리키기 위해서 사용한다.
이 변수는 반복문이 수행되었거나 다른 연산이 수행되었음을 가리킬 수 있다. 처리되기 전 done을 거짓으로 초기화하고 처리 후 참으로 변경한다.
error
오류가 발생했음을 가리키기 위해서 error를 사용한다. 오류가 발생했을 때, 이 변수는 참으로 설정하라.
found
값이 발견되었다는 것을 가리키기 위해서 found를 사용한다. 값이 발견되지 않았을 때 거짓으로 설정하라.
참이나 거짓의 의미를 함축하는 불린 변수의 이름을 사용한다.
긍정적인 불린 변수명을 사용한다.
notFoundtrue면 찾지 못했다는 부정의 의미가 참이 된다. 의미가 한 번 꼬인다.
단순하게 found로 사용하라.

상수명

상수 이름은 상수가 가리키는 구체보단 상수가 표현하는 추상적인 개념을 표현해야 한다.

3. 이름 규약의 효과

왜 규약이 필요한가?

더 많은 것을 당연하게 받아들인다. 하나의 일관된 흐름을 가지게 되면 조금 더 집중해야하는 부분에 집중할 수 있다.
새로운 프로젝트도 좀 더 빠르게 코드를 배우게 해준다. 일관성있는 코드는 가독성이 좋고 이해하기 쉽다.

이름 규약 예제

변수 이름은 보통 세 가지 정보를 포함한다.
변수의 내용
데이터의 종류
변수의 범위

5. 표준 접두사

표준 접두사는 사용자 정의형 축약어와 의미적 접두사로 구성된다.
사용자 정의형
이름이 있는 객체나 변수의 데이터형을 나타낸다.
그 프로그램에서 사용하기 위해 표준화한 짧은 코드로 기술된다.
의미적 접두사
UDT보다 한 단계 더 나아가 변수나 객체가 어떻게 사용되는지 설명한다.
프로젝트에 상관없이 어느정도 표준이 존재한다.
c(count), g(global) 등이 존재한다.

6. 읽기 쉬운 짧은 이름

짧은 변수명을 사용하고자하는 바람은 구시대 유물이다. 축약어를 사용하면 쉽게 달성할 수 있으나 가급적 사용하지 않는 것이 좋다고 생각한다.
가독성을 떨어트리고 잘못 사용했을때, 그 오해로부터 비롯되는 문제가 클 수 있다.
그렇다고 특정한 영역에만 축약어를 사용하는 것은 일관성을 해치는 행위라고 생각한다. 사용할거면 사용하고 말거면 말아야한다.

7. 피해야 할 변수명

오해의 소지가 있는 이름이나 축약어를 피한다.
유사한 의미가 있는 이름은 피한다.
이름은 유사하지만 의미가 다른 변수를 피한다.
이름에 숫자를 넣는 것을 피한다.
스펠링이 틀리지 않도록 주의한다.
대소문자만으로 변수의 이름을 구분하지 않는다.
여러 가지 자연어를 섞지 않는다.
프로그래밍 언어의 키워드를 사용하지 않는다.
변수가 표현하는 것과 전혀 관련이 없는 이름을 사용하지 않는다.
혼자만 아는 어려운 단어를 피한다.

요점 정리

좋은 변수명은 프로그램의 가독성에 아주 중요한 요소다. 반복문 인덱스와 상태 변수와 같은 특정한 변수들은 각자의 사정을 고려해야 한다.
이름은 가능한 구체적이어야 좋다. 모호하거나 하나 이상의 목적으로 사용될 수 있는 이름은 나쁜 이름이다.
네이밍 컨벤션은 범위를 구분한다. 그리고 클래스, 상수, 열거형, 변수마다 달라야 한다.
변수명 네이밍 컨벤션은 선택사항이 아니다. 어떤 규약을 적용할지는 프로그램 특성마다 다르며 구성원들과 협의 후 결정해야 한다.
축약어는 사용하지 말자. 축약어를 사용해야 한다면 프로젝트 진행 전 축약어를 약속으로 정하거나 표준 접두사 접근 방법을 사용하라.
코드를 작성하는 시간보다 읽는 시간이 훨씬 더 길다. 작성하기 편리한 이름보다 읽기 쉬운 이름을 선택하라.