클린코드를 읽었을때 내용이 기억나지 않아 읽고 여기에 정리하고자 한다.
1장 깨끗한 코드
- 나중에 개선하겠다 하고 지금 나쁜코드를 작성하지만 나중은 결코 오지 않는다.
- 깨끗한 코드를 작성하기 위해서는 코드감각이 필요하다. 이를 통해 좋은 코드와 나쁜 코드를 구분한다. 코드감각이 없는 사람도 나쁜 코드를 구분만하고 코드감각이 있는 사람은 나쁜 코드를 어떻게 개선해야될지 안다.
- 주변 코드를 읽지 않으면 새 코드를 작성할 수 없기 때문에 코드를 깨끗하게 작성해야 한다.
전문가들이 생각하는 깨끗한 코드의 특징
- 꼼꼼하게 처리하는 코드, 특히 오류 처리 중요
- 가독성
- 단위 테스트, 인수 테스트가 존재
- 의미있는 이름이 존재
- 다른 사람이 고치기 쉽다
- 중복이 없다.
- 주의 깊게 작성한 코드
2장 의미 있는 이름
- 의도를 밝혀라 : 좋은 이름이 있으면 절약하는 시간이 크다. 더 나은 이름이 있으면 개선하자
- 그릇된 정보를 피해라 : 유사한 개념은 유사한 표기법을 사용해라. 일관성이 떨어지면 안된다.
- 의미 있게 구분하라 : 클래스명 뒤에
Info, Data
는 의미가 불분명한 불용어라서 사용하지 말자. ex) ProductInfo, ProductData
- 검색하기 쉬운 이름을 사용하라 : 변수명이 짧으면 검색하기가 쉽지 않다. 이름 길이는 범위 크기에 비례해서 짓자.
- 멤버 변수 접두어는 사용하지 마라.
m_dsc
와 같이 m_
접두어는 의미가 없다.
- 클래스이름 : 명사, 명사구를 사용하고 동사는 쓰지마라
- 메서드 이름 : 동사, 동사구가 적합, javabean 표준에 맞춰서 정의하자. 생성자가 여러개면 정적 팩토리 메서드를 사용해라.
- 한 개념에 한 단어만 사용해라 : 동일한 역할을 수행하는데, 클래스마다
get, fetch, retrieve
로 사용하면 혼란스럽다. 이름을 일관성있게 가져가라
- 해법 영역에서 가져온 이름을 써라 : 모든 이름을 도메인 영역에서만 가져오지 말고 해법 영역에서도 가져와라. 코드를 읽는 사람이 개발자이기 때문에
JobQueue
와 같은 이름을 써도 된다.
- 문제 영역에서 가져온 이름을 써라 : 적절한 프로그래밍 용어가 없으면 문제 영역에서 이름을 가져와라
느낀점
깔끔한 코드를 작성하고 싶었는데, 이 부분에 대해 크게 노력은 안했던거 같다. 클린코드를 읽으면서 여기서 소개하는 방법들을 의식적으로 적용을 해봐야겠다. 좋은 이름을 짓는것에 대해서는 평소 인지하고 있었지만 검색하기 쉬운 이름, 한 개념에 한 단어만 사용하라는 이야기는 생각을 크게 못했다. 이번주에 적용할 수 있으면 적용해봐야겠다.
나만의 생각 및 질문
- 프로젝트 기한 + 운영이슈 등 회사에서 일정이 여유롭지 않은데, 코드를 깨끗하게 작성하는 것과 프로젝트 기한중에 회사의 성공을 위해 프로젝트 기한이 더 중요하다고 생각이 든다. 코드를 작성할때 최대한 깨끗하게 작성하고, PR을 올릴때 한번 읽어보면서 부족했던 부분을 수정하면 좋을거 같다.
- 지속적인 훈련을 통해 나중에는 한두번 작성으로 깨끗한 코드를 작성할 수 있는지도 궁금하다
- 저자는 인터페이스에
IShapeFactory
와 같이 I
접두어 붙이지 말라고 했는데, I
가 있으면 인터페이스라는걸 직관적으로 알아서 좋았음
- 생성자가 여러개면 정적 팩토리 메서드를 사용하라고 주장하는데, 지난주 팀내에서도 의견이 나왔는데, 문법으로 생성자를 제공하는데, 정적 팩토리 메서드를 써야되는지 고민됨. 팀내에서 구체적으로 이야기해봐야겠다.