클린코드에 대해 스터디 하기 시작했다!
그래서 그 내용을 한번 정리해보려고 한다.
사실 1장은 가벼운 이론 느낌이여서 간단하게만 정리해보려고 한다.
📌 코드가 존재하리라
📌 나쁜 코드
- 좋은 코드는 중요하다
- 킬러 앱 하나를 구현하는 회사가 있는데 출시에 바빠 코드를 마구 짰다가 엉ㅁ아이 되어 회사가 망한 사례가 있다. -다시 돌아와 나중에 정리하겠다고 다짐해도 나중은 결코 오지 않는다.
📌 나쁜 코드로 치르는 대가
- 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 그러다가 마침내 0에 근접한다. -> 새로운 인력 추가 -> 새로운 인력은 시스템을 배워야하지만 나쁜 코드로 인해 이해하지 못한다 -> 나쁜 코드 양상
🍀 원대한 재설계의 꿈
- 혐오스러운 코드로는 더 이상 일을 못하겠다며 재설계 요구 -> 새로운 타이커 팀 구성
-> 원래 팀과 새로운 팀의 경주 시작 -> 기존 것을 따라잡고 설계를 위해 경주는 아주 오랫동안 이어짐 -> 나쁜 코드 양상 -> 기존 시스템을 따라잡을 즈음 초장기 타이거 팀원들은 팀을 모두 떠났고 새로운 팀원들은 새 시스템 설계 요구
🍀 태도
- 나쁜 코드 일수록 한줄만 고치면 되리라 예상을 했다가 모듈을 수백 개 건드린 경험이 생긴다.
- 좋은 코드가 나쁜 코드로 전략 되는 순간
- 요구 사항이 변했다고 불평
- 일정이 촉박하다고 한탄
- 하지만 잘못은 전적으로 프로그래머에게 있다.
- 좋은 코드를 사수하는 일은 바로 프로그래머들의 책임
🍀 원초적 난제
- 나쁜 코드를 양산하면 기한을 맞추지 못함
- 기한을 맞추는 유일한 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관
🍀 깨끗한 코드라는 예술?
- 깨끗한 코드를 어떻게 작성할까?
- 그림을 그리는 행위와 비슷
- 깨끗한 코드를 작성하려면 청결이라는 히벽ㅂ게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요
- 열쇠는 코드 감각
📌 깨끗한 코드란?
비야네 스트롭스트룹
- 우아하고 효율적인 코드를 좋아한다.
- 논리가 간단해야 버그가 숨어들지 못한다.
- 의존성을 최대한 줄여야 유지보수가 쉬워진다.
- 오류는 명백한 전략에 의거해 철저히 처리한다.
- 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다.
- 깨끗한 코드는 한가지를 제대로 한다.
🍀 그래디 부치
- 깨끗한 코드는 단순하고 직접적이다.
- 깨끗한 코드는 잘쓴 문장처럼 읽힌다.
- 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
- 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
📌 큰 데이브 토마스
- 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
- 단위 테스트 케이스와 인수 테스트 케이스가 존재한다.
- 깨끗한 코드에는 의미있는 이름이 붙는다.
- 특정 목적에 달성하는 방법은 하나만 제공한다
- 의존성은 최소이며 각 의존성을 명확히 정의한다.
- API는 명확하며 최소로 줄였다.
- 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기에 코드는 문학적으로 표현해야 마땅하다.
🍀 마이클 페더스
- 언제나 누군가 주의 깊게 짰다는 느낌을 준다.
- 고치려고 봐도 딱히 손 댈 곳이 없다.
🍀 론 제프리스
- 모든 테스트를 통과한다.
- 중복이 없다.
- 시스테 ㅁ내 모든 설계 아이디어를 표현한다.
- 클래스, 메서드, 함수 등을 최대한 줄인다.
🍀 워닝 커닝햄
- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드이다.
- 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드이다.
📌 우리는 저자다
우리는 저자다. 저자에게는 독자가 있다.
저자에게 독자와 잘 소통할 책임도 있다.
- 코드를 짤 때는 자신이 저자라는 사실을 여러분이 노력을 보고 판단을 내릴 독자가 있다는 사실을 기억해라
📌 보이스카우트 규칙
잘짠 코드가 전부는 아니다.
시간이 지나도 언제나 깨끗하게 유지해야한다.
- 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다.
- 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if 문 하나를 정리하면 충분하다.
📌 결론
- 예술에 대한 책을 읽는 다고 예술가가 된다는 보장은 없다.
- 책은 단지 다른 예술가가 사용하는 도구와 기법, 그리고 생각하는 방식을 소개할 분이다.
-> 세세한 정보들을 제공하고 나머지는 여러분에게 달렸다!!