"이론과 실전은 다르다."
자전거 타기의 물리적인 지식을 다 익혀도 처음타면 100% 넘어지고, 이는 체득하지 않으면 의미가 없다. 자전거가 몸의 일부처럼 움직이듯 책을 활용하면 좋을것이다.
“모든 프로그램의 기본 단위는 ‘함수’이며 좋은 함수를 만드는 것이 중요하다.”
“함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.”
많은 추상화 수준과 중첩 if문을 사용하면 함수의 의도를 파악하기 힘들다. 오른쪽과 같이 함수의 추상화 수준(들여쓰기 수준)을 통일시키면 몇 줄만 읽어도 함수의 의도 파악이 훨씬 쉬우니 습관을 들여야 한다.
함수를 작게 만드는 습관이 클린코드를 만든다고 한다.(저자의 경험)다음은 세가지 액팅을 가지는 하나의 함수를 줄여나가는 과정이다.
명령과 조회는 두가지 액팅이므로 분리해야한다. 한 함수에 두가지 이상의 기능을 수행할 경우 함수를 사용할 때 혼란을 초래한다.
서술적인 이름을 사용해 함수의 의도를 명확하게 하라!
서술적인 이름을 사용해 함수의 의도를 명확히 하면 설계가 뚜렷해지고 이후 코드를 재구성하기도 쉬워진다. testableHtml 보다 html의 시작과 종료를 포함해 렌더링을 수행한다를 한눈에 이해할 수 있게 된다.
모듈 내에서 쓰이는 함수 이름을 일관성 있게 붙인다면 '짐작하는 대로' 다른 함수들이 존재하기 때문에 찾기 쉽다.
서술적인 이름을 사용해 함수의 의도를 명확하게 하라!
함수의 이상적인 인수 개수는 0개 이며 3개 이상은 지양하는 편이 좋다. 인수를 사용할 경우 현 시점에서 중요하지 않은 세부사항 new PageContent를 알아야 한다. 또 인수가 많은 함수에서 테스트 코드를 작성한다면 각각 인수의 조합으로 함수를 검증해야 하므로 개발비용이 늘어난다.
플래그 인수를 지양하라. 플래그 인수는 호출하는 쪽에서 실행할 로직을 선택하기 위해 전달하는 인수인데, 로직이 여러개인 함수는 여러가지를 처리하는 함수일 가능성이 높기 때문에 지양해야 한다.
인수를 꼭 써야하는 경우 예)동사/명사 가 쌍을 이루는 형태
Re: 함수는 한가지를 해야한다.
반복되지 않게 함수를 짜는 것은 가독성에 도움을 준다.
SOLID(객체지향 설계)도 중복을 제거하기 위한 노력들이 반영되며 지지를 받아왔다.
알고리즘을 변경할 경우 반복되는 여러 곳을 손봐야하며 에러가 발생된 확률이 늘어난다.
“소프트웨어를 짜는 행위는 글짓기와 비슷하다. 프로그래밍은 결국 언어로 더 풍부하고 표현력이 강한 문장을 만들어 이야기를 풀어나가는 행위이다.“ 함수
“나쁜 코드에 주석을 달지 마라. 새로 짜라.”
-브라이언 w.커니핸, p.j.플라우거-
보통 코드로 의도를 표현하지 못하기 때문에, 실패를 만회하기 위해 주석을 선택한다. 하지만 주석은 나쁜 코드를 보완해주지 않는다.
코드로 의도를 표현하라. 좋은 코드에는 주석이 필요없다.
코드는 변화하고 진화하는데 주석이 이를 언제나 따라갈 수 없으며, 시간이 지날수록 주석이 아예 그릇될 가능성이 높아진다. 부정확한 주석은 아예 없는 것보다 훨씬 나쁘다.
좋은 주석은 거의 없다.
법적인 주석
// Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved
정보를 제공하는 주석, 의도를 설명하는 주석, 의미를 명료하게 밝히는 주석
// 테스트 중인 Responder 인스턴스를 반환한다.
protected abstract Responder responderlnstance();
결과를 경고하는 주석, 중요성을 강조하는 주석
// 여유 시간이 충분하지 않다면 실행하지 마십시오.
public void _testWithReallyBigFile()
String listItemContent = match.group(3).trim();
// 여기서 trim은 정말 중요하다. 문자열에 시작 공백이 있으면 다른 문자열로 인식되기 때문이다.
대다수의 주석이 다 나쁜 주석에 속한다.
“결국 코드로 의도를 표현하는 법이 주석을 다는 것보다 좋다.”