좋은 이름으로 절약하는 시간이 많다...
예를들면 날짜 변수라면
int d;
이딴식으로 짓지 말고
int elapsedTimeInDays;
int daySinceCreation;
이렇게 짓자. 이렇게 이름을 통해 정보를 제공하면 코드의 단순성(연산자 수, 상수 수 등)은 똑같더라도 코드가 더욱 명확해진다.
나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안된다. 예를들어 직각삼각형의 빗변(hypotenuse)를 hp라고 하면...오해의 소지가 있다. 그냥 int 변수를 어쩌구_List 이렇게 짓는 것도 피하자. 헷갈릴 여지가 다분한, 서로 흡사한 이름도 피하는게 좋다. 대문자 O는 숫자 0처럼 보인다. 피하자.
a1,a2,a3...같은 무지성 작명은 의도적인 이름과 정반대다. 변수가 어떤 역할을 하는지에 따라 적절한 이름을 붙여주자.
변수에 굳이 타입명 붙이는 짓도 하지 말자. NameString
보단 Name
이 낫다.
그냥 컴파일러만 통과하려는 목적으로 getActivieAccount()
, getActiveAccounts()
이렇게 비슷비슷하게 짓는것도 별로다. 읽는 사람이 차이를 알도록 이름을 짓자.
발음하기 어려우면 토론하기도 어렵다...
int a
이런 애들은, 위에서 언급한 문제점도 있지만...에디터상에서 검색하기도 쉽지 않다. 한 문자짜리를 쓰고 싶다면...로컬 변수로 쓰자. 이름 길이는 범위 크기에 비례해야 한다.
인코딩=암호화
그러니까 맴버변수를 선언한다고, m_어쩌구
이런식으로 이름 지을 필요 없다. 요즘은 세상이 좋아져서 IDE가 색깔 등으로 구분해준다.
독자가 코드를 읽으면서 변수명을 자기가 아는 이름으로 변환해야한다면...그건 바람직하지 못한 이름이다. 명료함을 신경쓰자.
클래스 이름은 명사가 적절하다. 동사는 잘 사용하지 않는다.
확실히 지금까지 읽어온 클래스명들은 거의 다 명사였던 듯...
메서드 이름은 동사나 동사구가 적합하다. 접근자, 변경자, 조건자는 각각 값앞에 get
,set
,is
를 붙인다.
재미난 이름보단 명료한 이름이 낫다.
예를 들어, 똑같은 메서드를 클래스마다 getch,retrieve,get으로 제각각 부르면 혼란스럽다. 헤더를 살피며 시간소모하는 것을 피하기 위해 통일해서 부르자. 일관성 있는 어휘를 사용하자!
지금까지 만들어진 모든 add 메서드는 모두가 기존 값 두개를 더해 새로운 값을 반환한다고 가정하자. 새로 작성하는 메서드는 집합에 값 하나를 추가한다. 이 새로운 메서드를 add라고 부른다면 말장난이 된다. insert나 append가 더 적절한 이름이다.
프로그래머가 잘 알만한 알고리즘 이름, 수학 용어 등을 사용하는게 좋다. 코테 대비할때 솔루션 코드를 보면 dfs()
등의 함수명이 나오는 것도 같은 맥락인듯?
적절한 프로그래머 용어가 없다면 문제영역에서 이름을 가져온다. 그러면 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있다.
firstName, lastName, street, houseNumber, city, state 라는 변수들이 한꺼번에 제공되면, 주소라는 사실을 금방 알아챌 수 있다. 하지만 state 라는 변수 하나만 제공된다면? 주소라는 사실을 알기 어렵다. addr 이라는 접두어를 추가해, addrState
등으로 이름을 지어 큰 맥락을 파악할 수 있도록 하자
그렇다고 모든 변수에 접두사를 무지성 추가하지는 말자. 고급 휘발요 충전소(Gas Station Deluxe)라는 앱을 개발할때, 모든 클래스 이름을 GSD로 시작할 필요는 없다.