2장 의미있는 이름

  • 의도를 분명히 밝혀라

좋은 이름을 짓는데는 오랜 시간이 걸릴 수 있지만 좋은 이름으로 절약하는 시간 이 더 많다고 저자는 이야기 한다.

변수, 함수, 클래스 이름은 다음과 같은 질문에 모두 답해야한다.

  • 변수(혹은 함수나 클래스)의 존재 이유는?

  • 수행 기능은?

  • 사용 방법은?

만약 위 질문들을 답하는데 있어 주석이 필요하다면 이름으로 의도를 분명히 드러내지 못했다는 말이다.

발음 하기 쉬운 이름을 사용하라

private Date genymdhms;

private Date modymdhms;

의미가 명확하지 않으며 발음하기가 어렵다. 다른 개발자와 소통할때 이 변수명을 뭐라고 말해야할까?

private Date generationTimeStamp;

private Date modificationTimeStamp;

의미가 명확하며 발음하기 편하다. 다른 개발자와 소통할때 바로바로 해당 변수명이 무엇인지 이해할수있다.

검색 하기 쉬운 이름을 사용하라

for (int j=0; j<34; j++) { s += (t[j]*4)/5; }

단순한 for문 이다. 하지만 각 숫자가 무엇을 의미하는지 왜 저런 연산을 했는지 알기가 어렵다.

int realDaysPerIdealDay = 4;

const int WORK_DAYS_PER_WEEK = 5;

int sum = 0;

for (int j=0; j < NUMBER_OF_TASKS; j++) {

int realTaskDays = taskEstimate[j] * realDaysPerIdealDay; int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK); sum += realTaskWeeks;

}

각 숫자를 상수, 변수로 표현하여 직관적인 코드를 완성했다.

한 개념에 한 단어를 사용하라

하나의 프로젝트에 추상적인 개념 하나에 단어 하나를 선택해서 이를 고수하자.

예를 들어 똑같은 메서드를 다른 클래스 마다 fetch, retrive, get, bring, take 같이 제 각각 부른다면 혼란이 올것이다.

하나의 규칙을 세워놓고 독자적이고 일관적으로 메서드 이름을 짜는것이 좋다.

option 1. 메서드에도 메뉴를 표현

public class MarketplaceService {

public List getMarketplaceList() { ... }

public void saveMarketplace(Marketplace marketplace) { ... }

public void updateMarketplace(Marketplace marketplace) { ... }

public void deleteMarketplace(Integer marketplaceId) { ... } }

option 2. 메서드에는 메뉴를 생략

public class MarketplaceService {

public List getItems() { ... }

public void save(Marketplace marketplace) { ... }

public void update(Marketplace marketplace) { ... }

public void delete(Integer marketplaceId) { ... }

}

필자는 주로 option2 방식을 선호한다. 한눈에 메서드명이 들어와서 후에 코드를 살펴보거나 리팩토링 할때 큰 도움이 됬다.

말장난을 하지 마라

위 주제와 일맥상통 하는 주제인데 add 라는 메서드를 한 프로젝트에서 dto에 어떠한 파라미터 값을 추가 해주는 메서드 라고 예를 들자 그런데 단순히 숫자 두개를 더하는 로직의 메서드 명을 add 라고 칭한다면 문제는 없겠지만 한 단어를 두 가지 목적으로 사용하는 셈이기에 코드의 명확성이 떨어진다고 볼수있다.

의미 있는 맥락을 추가하라

메서드에는 다양한 변수들이 존재한다. 변수들의 이름에 맥락이 있다면 메서드 명을 보지않아도 어떤 메서드 인지 알수있을것이다.

예를 들어, firstName, lastName, street, houseNumber, city, state, zipcode 라는 변수가 있다. 변수를 훑어보면 주소라는 사실을 금방 알아챈다.

만약 firstName, lastName, state 만을 변수로 가지는 메서드라면 주소라는 사실을 알기는 마냥 쉽지 않을것이다.

그럴땐 addr 이라는 접두어를 추가한다면 전보다는 더 맥락이 분명해지는것을 알수있다. 이렇듯 메서드 안에 의미있는 맥락을 추가하는것이 중요하다.

결론

이렇듯 의미있는 이름을 작성한다는것은 꽤나 많은 고민과 노력, 시간이 필요하다. 하지만 후에 완성된 코드를 본다면 그 노력은 분명히 헛되지 않을것이라고 생각되는 글이였다. 실제로 회사에 소스코드를 보면서 명확한 메서드명, 변수명들을 보고 얼마나 코드를 이해하는데 큰 도움을 주는지 많이 느꼈고 내가 전에 했던 프로젝트 들의 다소 불명확하며 그저 그런 고민없이 지은 메서드명, 변수명을 비교해보니 이해도면에서 완전히 차이가 났다. 의미 있는 이름의 중요성을 몸으로 느낀 시간이였다.

Last updated