※ 본 글은 인사이트에서 출간한 로버트 C. 마틴 저자의 『Clean Code(클린 코드) 애자일 소프트웨어 장인 정신』 책을 읽고 작성하였습니다.
2장. 의미있는 이름소프트웨어에서 이름은 어디나 쓰임변수, 함수, 인자, 클래스, 패키지, 소스파일, 심지어 소스파일이 담긴 디렉토리 등등
→ 이렇게나 많이 사용하므로 이름을 잘 지으면 여러모로 편리함.
이름을 잘 짓는 간단한 규칙에 대한 학습을 시-작!!
의도를 분명히 밝혀라좋은 이름으로 절약하는 시간이 훨씬 더 많음.이름을 주의 깊게 살펴 더 나은 이름이 떠오르면 개선할 것.코드를 읽는 사람이 좀 더 행복해 질 수 있음.변수/함수/클래스의 이름은 존재 이유/수행 기능/사용 방법과 같은 질문에 답할 수 있어야 함.그릇된 정보를 피하라그릇된 단서를 남겨서는 안됨널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해도 안됨. (e.g. list)서로 흡사한 이름을 사용하지 않도록 주의할 것유사한 개념은 유사한 표기법을 사용하고 이것도 정보에 해당됨.일관성이 떨어지는 표기법은 그릇된 정보임.의미 있게 구분하라a1, a2, …, aN)은 그릇된 정보를 제공하는 이름도 아니고, 아무런 정보를 제공하지 못하는 이름일 뿐, 저자 의도가 전혀 드러나지 않음.불용어를 추가한 이름 역시 아무런 정보도 제공하지 못함.a나 the같은 접두사이더라도 의미가 분명히 다르다면 사용해도 무방.읽는 사람이 차이를 알도록 이름을 붙여라getctiveAcount(), getctiveAcounts(), getctiveAcountInfo()발음하기 쉬운 이름을 사용하라발음하기 쉬운 이름을 선택하는 것이 좋음.검색하기 쉬운 이름을 사용하라긴 이름이 짧은 이름보다 좋고, 검색하기 쉬운 이름이 상수보다 좋음.이름 길이는 범위 크기에 비례해야 하며, 변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직함.인코딩을 피하라자신의 기억력을 자랑하지 마라자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 않음.루프에서 반복 횟수를 세는 변수는 문자 하나만 사용해도 괜찮음.클래스 이름클래스 이름과 객체 이름은 명사나 명사구가 적합함.Customer, WikiPage, Account, AddressParserManager, Processor, Data, Info 등과 같은 단어.메서드 이름메서드 이름은 동사나 동사구가 적합.
- 좋은 예 :
postPayment,deletePage,save등- 접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는
javabean 표준에 따라 값 앞에get,set,is를 붙임.
생성자(Constructor)를 중복정의(overload)할 때는 정적 팩토리 메서드를 사용함.
→ 메서드는 인수를 설명하는 이름을 사용함.
기발한 이름은 피하라명료한 이름을 선택하라.한 개념에 한 단어를 사용하라
- 예를 들어, 객체를 사용하면 그 객체가 제공하는 메서드 목록을 보여줌.
- 하지만 목록은 보통 함수 이름과 매개변수만 보여줄 뿐 주석은 보여주지 않음.
메서드 이름은 독자적이고 일관적이어야 함.말장난을 하지 마라대충 훑어봐도 이해할 코드 작성이 목표임.해법 영역에서 가져온 이름을 사용하라전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등은 사용해도 괜찮음.문제 영역에서 가져온 이름을 사용하라문제 영역에서 이름을 가져올 것.우수한 프로그래머와 설계자라면 해법 영역과 문제 영역을 구분할 줄 알아야 함.의미 있는 맥락을 추가하라불필요한 맥락을 없애라Gas Station Deluxe) 라는 애플리케이션을 짠다고 가정.GSD로 시작하게 된다면 IDE에서 G를 입력하고 자동완성 키를 누르는 순간 모든 클래스를 열거하기 때문에 현명하지 못함.의미가 분명한 경우에 한해 짧은 이름이 긴 이름보다 좋음.accountAddress와 customerAddress는 Address 클래스의 인스턴스로는 좋은 이름이나, 클래스 이름으로 적합하지 못함.마치면서설명 능력이 뛰어나야 하고 문화적 배경이 같아야 함좋은 이름을 선택하는 능력은 기술, 비즈니스, 관리 문제가 아닌 교육 문제임