티스토리 뷰

BOOK

[Clean Code] 2장. 의미있는 이름

MIA_DAHAE 2019. 12. 8. 00:25

유명한 로버트 C 마틴 클린 코드 책을 이제야 읽었다 읽는데 총 한 달이라는 시간이 걸린 것 같다. 책의 1장 "깨끗한 코드"에서는 클린 코드를 작성하지 못해 회사가 망한 사례 등 부정적인 영향들을 언급하며 클린 코드의 중요성을 되새겨 준다. 또한 클린 코드를 작성하려면 다음과 같이 하라고 말을 해준다. "중복을 줄여라, 한 가지 기능을 제대로 해라, 표현력을 높여라, 작게 추상화하라" 이 4가지만 준수해도 클린 코드를 작성할 수 있다고 말해준다. 그래서 해당 페이지를 볼 때 계속 소리 내서 읽어보면서 달달 외웠다. 클린 코드 책을 읽으면서 각 장마다 기억해야 하는 부분을 요약하고 정리해 보았다. 참고로 이 책은 정말 자바 개발자한테 필독서 중 하나인 것 같아서 꼭 한 번 읽어보기를 추천한다.


[2장] 의미 있는 이름

이 장에서는 변수나 함수 클래스 명의 이름을 의미 있게 정하는 것이 얼마나 중요한지 이야기 한다.

1. 의도를 분명히 밝혀라

변수나 함수 클래스 명의 사용 용도만 분명히 이름에 밝혀도 코드가 충분히 가독성이 좋아진다.

2. 그릇된 정보를 피하라

예를 들어 List가 아닌데 list라는 단어가 포함, 흡사한 이름을 사용, l과 O와 같은 변수명을 사용하여 1과 0과 헷갈리게 하는 경우들을 말한다.

3. 의미 있게 구분하라

accountInfo, accountData 이 두 개의 변수처럼 의미가 모호하면 안 된다 결국 Info나 Data둘다 의미가 비슷하여 각각이 무엇을 나타내는지 알 수 없기 때문에다. 따라서 모든 이름은 의미 있게 구분해야 한다.

4. 발음하기 쉬운 단어를 사용하라

발음하기 쉬운 단어를 사용해서 이름을 지어야 한다 아니면 개발자들끼리 서로 의사소통하기도 불편해진다.

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

e가 들어가는 이름은 검색하기 어렵다. 영어 알파벳 중에 가장 많이 쓰이는 단어이기 때문이다 또한 5 대신 WORK_DAYS_PER_WEEK과 같이 이름을 지으면 검색하기 훨씬 쉬워진다.

6. 인코딩을 피하라

더 이상 변수 앞에 타입이 무엇인지 인코딩할 필요가 없어졌으므로 인코딩 단어를 피하자 또한 멤버 변수 접두어도 피하자. 예를 들어 m_variables과 같이 앞에 m 접두어를 붙이는 건 옛날 방식이다.
Interface 클래스를 보면 ICustomerService와 같이 앞에 I 가 붙는 경우를 많이 볼 것이다. 하지만 이것 역시 옛날 방식이며 너무 많은 정보를 나타내고 있다. 그렇기 때문에 인터페이스와 구현 체중 하나를 명확히 해야 한다면 IUserService보다 차라리 구현체를 UserServiceImpl 혹은 CUserService라고 구현하자.

7. 자신의 기억력을 자랑하지 마라.

루프 같은 경우 i, j, k(l제외)를 사용하는 것은 괜찮다. 그것이 정통적인 방식이고 많이 사용하기 때문이다 하지만 그 외에 a, b가 이미 사용되므로 c 이런 식으로 이름을 정하는 것은 매우 안 좋다. 해당 이름이 무엇을 뜻하는지 기억할 수 있으면 좋겠지만 대부분 그러지 못하는 경우가 많다.

8. 클래스

명사나 명사구가 적합. 다만 Manager 나 Processor, Data, Info 같은 명사는 피하자.

9. 메서드

동사구가 적합. 접근자, 변경자, 조건자는 javabean 표준에 의해 get, set, is를 접두어로 붙인다.

10. 기발한 이름은 피하라

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

예를 들어 똑같은 메서드가 클래스마다 get, retrieve, fetch 등으로 정의되어 있으면 매우 헷갈릴 것이다. 그렇기 때문에 개념이 같은 메서드는 동일한 단어를 사용하라.

12. 말장난을 하지 마라

기존에 add 가 들어간 메서드는 인자 값 두 개를 더해 새로운 값을 return 한다고 가정하자 만약 집합이 있고 그 집합에 값을 하나 더하는 것도 add라는 이름을 사용하면 혼란을 가져올 것이다 이때는 insert나 append를 사용해야 한다.

13. 해법 영역/문제 영역에서 가져와라

JopQueue와 같이 기술적인 용어가 있는 이름인 경우 해당 용어를 사용하자. 그렇지 않다면 문제 영역에서 가져오자.

14. 의미 있는 맥락을 추가하라

이름 그 자체만으로 의미가 있는 경우도 있지만 대부분 그렇지 않기 때문에 클래스나 변수 등으로 맥락을 잡아 의미를 명확하게 해 준다. 예를 들어 Address클래스의 state변수가 그와 같은 경우이다.

15. 불필요한 맥락을 없애라

만약 Gym 이관한 애플리케이션을 만든다고 모든 클래스에 Gym이라는 접두어를 붙이는 건 무의미하다. 또한 customerAddress나 accountAddress는 인스턴스 이름으로 괜찮으니 클래스 이름으로는 부적절하다 클래스 이름으로는 Address가 더 적절하다.

'BOOK' 카테고리의 다른 글

객체지향의 사실과 오해  (0) 2021.03.28
[Clean code] 5장 형식맞추기  (0) 2019.12.15
[Clean code] 4장. 주석  (0) 2019.12.14
[Clean code] 3장. 함수  (0) 2019.12.09
댓글