클린코드를 위한 의미 있는 이름

의도를 분명히 밝혀라

  1. 변수(혹은 함수나 클래스)의 존재 이유가 무엇인가?
  2. 어떤 일을 수행하는가?
  3. 어떻게 사용하는가?

이름으로 위 세가지가 표현이 안된다면 문제가 있다.

변수의 이름은 범위 크기에 비례해야 한다.

1
2
3
4
5
6
int pricePerLotto = 1000;
int Prizesum = 0;
for (Lotto lotto : lottos) {
prizeSum += pricePerLotto * lotto.getPrize();
}

이름이 길수록 사용되는 범위가 넓다고 생각하자.
예를 들면 for 문의 i는 해당 루프에서만 사용되서 짧아도 된다.
이름이 길수록 검색도 용이하다.

맥락을 추가하라

이름 그 자체로 의미를 분명히 보여주는 변수는 없다.
함수나 클래스에서 맥락을 부여하면 이름을 더 자연스럽게 읽힐 수 있다.
이마저도 힘들면 접두사를 붙일 수 있다. (stateName, 이런 식으로..)

1
2
3
public void printNameAndPosition(String name, String position) {
System.out.println(name + position);
}

name는 어떤 이름을 의미하고, positon는 어떤 위치를 표시하는 건지 도저히 알 수 없다.

이름과 포지션은 사실 자동차의 이름과 자동차의 위치를 말해주는 변수들이다.
그럼 이를 더 잘 알려주기 위해 맥락을 추가해보자.

1
2
3
4
5
6
7
8
public class Car {
private String name;
private int position;

public void printNameAndPosition() {
System.out.println(name + position);
}
}

이제 Car라는 맥락 안에서 이름과 위치를 파악하면 좀 더 의미있게 파악할 수 있다.

불필요한 맥락 제거

그렇다고 불필요하게 맥락을 이름에 붙여주는건 불필요하다.

1
2
3
4
public class Car {
private String carName;
private int carPosition;
}

이미 Car라는 맥락 안에서 쓰이는 이름에 굳이 car를 붙이지 않아도 되지않을까?

Share