난관에 부딪혔을 때 옳은 문 뒤에 있으려면 장인 정신이 필요
장인 정신을 익히는 과정
1. 이론 = 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식 습득
2. 실전 = 열심히 일하고 연습해 지식을 몸과 마음으로 체득
르블랑 법칙 : 나중은 결코 오지 않는다.
- 자신이 개발한 쓰레기 같은 코드를 나중에 수정해야겠다고 다짐하지만 그 날은 돌아오지 않는다...
나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
비야네 스트롭스트룹의 깨끗한 코드
- 우아하고 효율적인 코드 => 우아하다 : 외양이나 태도가 기품있고, 단아하며 보기에 즐거운;
- 논리가 간단한 코드 => 버그가 숨지 못함
- 의존성을 최대한 줄인 코드 => 유지보수가 쉬워짐
- 오류(메모리 누수, race condition 등)는 명백한 전략에 의해 철저히 처리
- 성능을 최적으로 유지 => 원칙없는 최적화로 코드를 망치려는 유혹에 빠지지 않음
∴ 깨끗한 코드는 한 가지를 제대로 한다. (한가지에 집중한다.)
그래디 부치의 깨끗한 코드
- 단순하고 직접적인 코드 => 잘 쓴 문장처럼 읽혀야 함 (가독성)
- 설계자의 의도를 숨기면 안됨
- 명쾌한 추상화와 단순한 제어문으로 가득한 코드
큰 데이브 토마스의 깨끗한 코드
- 작성자가 아닌 다른 사람도 읽고 고치기 쉬운 코드
- 단위 테스트 케이스와 인수 테스트 케이스가 존재
- 의미있는 이름이 붙어 있음
- 특정 목적을 달성하는 방법은 오직 1개
- 의존성은 최소한으로, 각 의존성을 명확하게 정의
- API는 명확하되 최소로
테스트 주도 개발 (Test Driven Development)
마이클 페더스의 깨끗한 코드
- 주의깊게 짰다는 느낌을 주는 코드
- 이미 모든 사항을 고려했으므로 고치려고 살펴봐도 딱히 손 댈 곳이 없는 코드
론 제프리스의 깨끗한 코드
- 켄트 백이 제안한 단순한 코드 규칙을 따름
-- 모든 테스트를 통과하는 코드
-- 중복이 없는 코드
-- 시스템 내 모든 설계 아이디어를 표현하는 코드
-- 클래스, 메서드, 함수 등을 최대한 줄인 코드
메서드 추출(Extract Method) 리펙터링 기법 : 기능을 명확히 기술하는 메서드 하나와 기능을 실제로 수행하는 메서드 여러개
워드 커닝햄의 깨끗한 코드
- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행하는 코드
로버트 마틴(저자)의 깨끗한 코드
- 새 코드를 짜면서 기존 코드를 끊임없이 읽으므로 => 읽기 쉽게 코드를 짜야 함
- 잘 짠 코드가 전부가 아님 => 시간이 지나도 언제나 깨끗하게 유지 필요 (코드의 퇴보를 막아야 함)
=> 시간이 지날수록 좋아지는 코드
[ 이 책을 통해 알 수 있는 것들 ]
- 좋은 코드와 나쁜 코드를 구분하는 방법
- 좋은 코드를 작성하는 방법
- 나쁜 코드를 좋은 코드로 바꾸는 방법
- 좋은 이름, 좋은 함수, 좋은 객체, 좋은 클래스를 작성하는 방법
- 가독성이 높아지도록 코드 형식을 맞추는 방법
- 코드 논리를 흩뜨리지 않고서 오류 처리를 완벽하게 구현하는 방법
- 단위 테스트와 테스트 주도 개발을 적용하는 방법