Book
[Book] Clean Code
이예짜니
2021. 4. 27. 00:40
1. 깨끗한 코드
- 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이다.
- 회사가 망한 원인은 바로 나쁜 코드 탓이었다.
- 나중은 결코 오지 않는다.
- 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.
- 일정에 쫓기더라도 대다수 관리자는 좋은 코드를 원한다.
- 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다.
- 깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다.
- 깨끗한 코드는 한 가지를 제대로 한다.
- 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
- 깨끗한 코드란 다른 사람이 고치기 쉽다고 단언한다.
- 깨끗한 코드는 주의 깊게 작성한 코드다.
- 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기
- 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if 문 하나를 정리하면 충분하다.
2. 함수
- 작게 만들어라
- 한 가지만 해라!
- 함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.
- Switch 문
- 다형성 polymorphism을 이용하여 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는다.
- 추상 팩토리에 꽁꽁 숨긴다.
- 서술적인 이름을 사용하라!
- 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
- 함수 인수
- 무항이 좋다.
플래그 인수 절대 안됨- 인수 객체 생성 (인수가 2~3개 필요하면)
- 부수 효과를 일으키지 마라!
- 때로는 예상치 못하게 클래스 변수를 수정한다.
- 때로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.
- 어느쪽이든 교활하고 해로운 거짓말이다!
- 명령과 조회를 분리하라!
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다.
- 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다.
- 오류 코드보다 예외를 사용하라!
- 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 미묘하게 위반한다.
- 반면 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.
- Try/Catch 블록 뽑아내기
- 반복하지 마라!
- 중복은 코드 길이가 늘어날 뿐 아니라 알고리즘이 변하면 여러 곳을 수정해야 한다.
- 중복을 없애니 모듈 가독성이 크게 높아짐
- 중복은 소프트웨어에서 모든 악의 근원이다.
- 구조적 프로그래밍
- 함수를 어떻게 짜죠?
- 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 먼저 생각을 기록한 후 읽기 좋게 다듬는다.
초안은 대개 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다. - 함수를 짤 때도 마찬가지다.
- 처음에는 길고 복잡하다. 들여쓰기 단계도 많고 중복된 루프도 많다. 인수 목록도 아주 길다. 이름은 즉흥적이고 코드는 중복된다. 하지만 나는 그 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다.
- 그런 다음 나는 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.
- 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 먼저 생각을 기록한 후 읽기 좋게 다듬는다.
- 결론
- 대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.