직장 동료의 추천을 받아 이 책을 읽게 되었다.
클린 코드와 이 책 2권을 추천 받았는데, 빨리 읽을 수 있는 이 책 먼저 읽기로 했다.
두께도 두껍지 않고, 내용도 술술 읽히는 편이므로 시간이 난다면 한번쯤 읽어두길 추천한다.
이 포스팅에서는 내가 나중에 다시 볼 용도로써 책에서 제시하는 핵심 아이디어만을 간략하게 나열했다!
개요
우리가 코드를 작성할 때 가장 핵심이 되는 원칙은 다음과 같다.
- 코드는 이해하기 쉬워야 한다.
- 코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식으로 작성되어야 한다.
아래는 위 두가지 원칙을 지키기 위한 단계이다.
- 표면적 수준에서의 개선
- 루프와 논리를 단순화하기
- 코드 재작성하기
- 선택된 주제들
표면적 수준에서의 개선
표면적 수준에서의 개선은 좋은 이름을 짓고, 좋은 설명을 달고, 코드를 보기 좋게 정렬하는 행위를 의미한다. 이는 코드를 리팩토링하거나 프로그램이 동작하는 방식을 바꾸지 않고 수정할 수 있으므로 반영이 쉽다.
1. 이름에 정보를 담아내라.
- 특정한 단어 고르기
- 보편적인 이름 피하기 (혹은 언제 그런 이름을 사용해야 하는지 깨닫기)
- 추상적인 이름 대신 구체적인 이름 사용하기
- 접두사 혹은 접미사로 이름에 추가적인 정보 덧붙이기
- 이름이 얼마나 길어져도 좋은지 결정하기
- 추가적인 정보를 담을 수 있게 이름 구성하기
2. 재치 있는 이름보다 명확하고 간결한 이름이 더 좋다.
3. 본인이 지은 이름을 "다른 사람들이 다른 의미로 해석할 수 있을까?"라는 질문을 던져보며 철저하게 확인해야 한다.
4. 일관성 있는 스타일은 올바른 스타일보다 더 중요하다.
5. 주석의 목적은 코드를 읽는 사람이 코드를 작성한 사람만큼 코드를 잘 이해하게 돕는 데 있다.
6. 코드에서 빠르게 유추할 수 있는 내용은 주석으로 달지 말라.
7. 주석은 높은 "정보 대 공간" 비율을 갖춰야한다.
루프와 논리를 단순화하기
머릿속 정신적 짐의 무게는 복잡한 루프, 거대한 표현, 많은 변수를 만날때 마다 늘어나는데 이것을 분리하고 단순화해 읽기 좋은 코드를 만든다.
1. 흐름을 제어하는 조건과 루프 그리고 여타 요소를 최대한 '자연스럽게' 만들도록 노력하라. 코드를 읽다가 다시 되돌아가서 코드를 읽지 않아도 되게끔 만들어야한다.
2. 줄 수를 최소화하는 일보다 다른 사람이 코드를 읽고 이해하는 데 걸리는 시간을 최소화하는 일이 더 중요하다.
3. 수정해야 하는 상황이라면 여러분의 코드를 새로운 관점에서 바라보라. 뒤로 한걸음 물러서서 코드 전체를 보라.
4. 거대한 표현을 더 소화하기 쉬운 여러 조각으로 나눈다.
5. '영리하게' 작성된 코드에 유의하라. 나중에 다른 사람이 읽으면 그런 코드가 종종 혼란을 초래한다.
6. 변수가 적용되는 범위를 최대한 좁게 만들어라.
7. 변수값이 달라지는 곳이 많을수록 현재값을 추측하기 더 어려워진다.
코드 재작성하기
이 부분에서는 함수 수준에서 코드를 재작성해 가독성을 높인다.
- 프로그램의 주된 목적과 부합하지 않는 '상관없는 하위문제'를 추출하라.
- 코드를 재배열하여 한 번에 한 가지 일만 수행하게 하라.
- 코드를 우선 단어로 묘사하고, 이 묘사를 이용하여 깔끔한 해결책을 발견하도록 하라.
1. 한 번에 하나의 작업만 수행하게 코드를 구성해야 한다.
2. 가장 읽기 쉬운 코드는 아무것도 없는 코드다.
선택된 주제들
이 부분에서는 효과적이고 읽기 쉬운 테스트를 작성하는 방법을 알아본다.
1. 다른 프로그래머가 수정하거나 새로운 테스트를 더하는 걸 쉽게 느낄 수 있게 테스트 코드는 읽기 쉬워야한다.
- 덜 중요한 세부 사항은 사용자가 볼 필요 없게 숨겨서 더 중요한 내용이 눈에 잘 띄게 해야 한다.
2. 가능하면 가장 간단한 입력으로 코드를 완전히 검사할 수 있어야한다.
3. 필요한 작업을 수행하는 범위에서 가장 명확하고 간단한 테스트 값을 선택하라.
반응형
'📦 ETC > 그냥 쓰고 싶어서요' 카테고리의 다른 글
최근에 포스팅을 못한 이유 (0) | 2021.10.31 |
---|---|
원티드 New Start Package를 받았습니다 (0) | 2021.08.28 |
주니어 개발자의 2020년 회고 (0) | 2021.01.01 |
[if(kakao) 2020] JUnit5를 시작하며 (0) | 2020.12.25 |
[우아콘 2020] 우아한테크콘서트 2020 후기 (0) | 2020.12.24 |