(CleanCode) 의미있는 이름

1. 의도를 분명히 밝혀라


다음코드의 목적은 무엇인가?

public List<int[]> getThem(){
  List<int[]> list1 = new ArrayList<int[]>();
  for(int[] x : theList)
   if(x[0] == 4)
     list1.add(x);
   return list1;
}

====> 코드가 하는 일을 짐작하기 어렵다. 왜일까?
여기서 문제는 코드의 단순성이 아니라 코드의 함축성이다. 코드 맥락이 코드자체에 명시적으로 드러나지 않는다.

1. theList에 무엇이 들었는가?
2. theList에서 0번째 값이 어째서 중요한가?
3. 값 4는 무슨의미인가?
4. 함수가 반환하는 리스트 list1을 어떻게 사용하는가?





2. 그릇된 정보를 피하라

그릇된 단서는  코드 의미를 흐린다.
나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안된다.
예를들어, hp, aix, sco는 변수 이름으로 적합하지 않다. 유닉스 플랫폼이나 유닉스 변종을 가리키는 이름이기 때문이다.

*서로 흡사한 이름을 사용하지 않도록 주의한다. 한 모듈에서XYZControllerForEfficientHandlingOfStrings라는 이름을 사용하고, 조금 떨어진 모듈에서
XYZControllerForEfficientHandlingStorageOfStrings라는 이름을 사용한다면? 두 단어는 겁나게 비슷하다.

*유사한 개념은 유사한 표기법을 사용한다.
자동완성기능 사용!!!

* 주의점 대문자 O와 소문자 l사용 주의 왜냐하면 숫자 0과 1과비슷하다.

* 불용어를 추가한 이름 역시 아무런 정보도 제공하지 못한다.
->Product라는 클래스가 있다고 가정하자. 다른 클래스를 ProductInfo, ProductData라 부른다면 개념을 구분하지 않은채 이름만 달리한 경우다. Info나 Data는 a, an, the와 마찬가지로 의미가 불분명한 불용어다.
a나 the를 사용하지 말라는 소리가 아니다. 모든지역변수는a 모든 함수 인수는 the를 사용해도된다. 요지는 zork라는 변수가 있다고 theZork이라 이름 지어서는 안된다는 말이다.


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

2.2 검색하기 쉬운 이름을 사용하라
->개인적으로 간단한 메소드에서 로컬 변수만 한 문자를 사용한다.
이름길이는 범위 크기에 비례해야 한다. 변수나 상수를 코드 여러곳에서 사용한다면 검색하기 쉬운이름이 바람직하다.

2.3 인코딩을 피하라

*멤버변수 접두어 방식은 구닥다리 방식이다. 재빨리 해독하는 방식을 원한다.


2.4 자신의 기억력을 자랑하지 마라
-> 문자 하나를 사용하는 변수 이름은 문제가 있다. 루프에서 반복횟수를 세는 변수 i,j,k는 괜찮다. (l은 문제가 있다.)


2.5 클래스 이름
-> 클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 동사는 사용하지 않는다.
Manager, Processor, Data, Info 등과 같은 단어는 피한다.

2.6 메소드 이름
-> 동사나 동사구가 적합하다.
예) postPayment, deletePage, save등 이다.
접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 자바 빈 표준에 따라 값 앞에 get, set, is를 붙인다.
생성자를 중복해 정의할 때는 정적 팩토리 메소드 패턴을 사용한다.

Complex fulcrumPoint = Complex.FromRealNumber(23.0);
Complex fulcrumPoint = new Complex(23.0);
위 코드가 아래 코드 보다 낫다.

생성자 제한은 private으로 한다.

2.7 기발한 이름은 피하라
2.8 개념 하나에 단어 하나를 사용하라
2.9 말장난을 하지마라
-> "한 개념에 한 단어를 사용하라"
-> 모든 add 메소드의 매개변수와 반환 값이 의미적 으로 똑같다면 문제가 없다.
예를들어, 지금까지 구현한 add메소드는 모두 기존 값 두개를 더하거나 이어서 새로운 값을 만든다고 가정하자. 새롭게 작성하는 메소드는 집합에 값 하나를 추가한다. 이 메소드를 add라 불러도 괜찮을까? add라는 메소드는 기존 add와 맥락이 달라진다.

2.10 문제영역과 관련있는 이름을 사용하라




ObjectiveC가 네이밍 세계최고
---개발자영어 e 북 구매






댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬