본문 바로가기

독서찰기(讀書札記)/Clean Code

(4)
4장 주석 사실상 주석은 기껏해야 필요악이다. 우리는 코드로 의도를 표현하지 못해, 그러니까 ‘실패’를 만회하기 위해 주석을 사용한다. 주석은 언제나 실패를 의미한다. 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하다. 코드는 변화하고 진화하지만, 불행하게도 주석이 언제나 코드를 따라가지는 못한다. 우리는 (간혹 필요할지라도) 주석을 가능한 줄이도록 꾸준히 노력해야 한다. 주석은 나쁜 코드를 보완하지 못한다 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치우는 데 시간을 보내라! 코드로 의도를 표현하라! 코드만으로 의도를 설명하기 어려운 경우가 존재한다는 생각은 분명히 잘못된 생각이다. 나쁜 예) // 직원이 복지 혜택을 받을 자격이 있는지 검사한다. if ((employe..
3장 함수 작게 만들어라! 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 한 가지만 해라! 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 단계가 나눠져 있더라도, 지정된 함수 이름 아래에서 추상화 수준이 하나라면 한 가지이다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 중이다. 함수 당 추상화 수준은 하나로! 한 함수 내에 추상화 수준을 섞으면 특정 표현이 근본 개념인지 아니면 세부사항인지 구분하기 어려워짐 내려가기 규칙 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 오게 한다. 즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다. Switch 문 본질적으..
2장 의미 있는 이름 의도를 분명히 밝혀라 변수, 함수, 클래스의 이름이 포함하고 있어야 할 정보 존재 이유 수행 기능 사용 방법 예시 int d; bad int daysSinceCreation; good 그릇된 정보를 피하라 목록을 불러오더라도 List 자료형을 사용하는 것이 아니면 이름에 List를 포함시키지 말 것 목록을 List를 이용해 담아오더라도 이름에 List는 안 쓰는게 좋음 흡사한 이름 쓰지 말 것 XYZControllerForEfficientHandlingOfStrings XYZControllerForEfficientStorageOfStrings ‘소문자 L, 대문자 O’ ‘l’은 숫자 1과 헷갈리고 O는 숫자 0과 헷갈림 의미 있게 구분하라 컴파일러/인터프리터만 통과하면 된다는 식으로 작명 X 연속적인 숫..
1장 깨끗한 코드 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. … 나중은 결코 오지 않는다. 기한을 맞추는 유일한 방법은, 그러니까 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다. 나쁜 코드는 나쁜 코드를 ‘유혹’한다! Grady Booch “깨끗한 코드는 잘 쓴 문장처럼 읽힌다.” “캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.” 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다. 변수 이름 하나 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if 문 하나를 정리하면 충분하다.