본문 바로가기

IT/클린코드

[클린코드] 1장 깨끗한코드

안녕하세요 남갯입니다.


오늘은 클린코드를 읽고 정리한 내용을 적어보려고 합니다.



우리는 코드를 더 좋은 품질의 코드를 짜기위해 항상 고민하고 있다. 이 책의 저자는 말한다. 


이 책을 읽는 이유의 두가지는

1. 프로그래머라서,

2. 더 나은 코드를 짜기 위해


나도 매번 내 코드를 보면서 반성하고 더 나은 코드를 짜기위해 노력한다.  이번 클린코드 스터디를 통해 더 나은 프로그래머가 되었으면 한다.


1장을 시작해 보겠습니다.


1장. 깨끗한코드


- 코드는 존재하리라.

코드는 사라지지 않을것이다. 왜냐하면 코드는 요구사항을 상세히 표현 하는 수단이기 때문이다.


- 나쁜코드

우리는 오랫동안 나쁜코드에 시달려왔기 때문에 좋은코드가 중요하다는 사실을 안다.

출시에 바빠 코드를 마구 짠 회사의 제품은 출시주기가 증가하고 버그도 남아서 결국 망했다.

우리는 이런저런 핑계로 코드를 짠후에 나중에 고치겠다고 생각한 경험이 있다 

이런 코드들은 대충 짠 프로그램으로서 동작하는것에 안도하게 되지만 

안돌아가는 프로그램보다 돌아가는 쓰레기를 좋다고 위로한 경험이 있습니다. 르블랑의 법칙에 대로 나중은 다시 오지 않는다고 합니다.

* 르블랑의 법칙 : 나중은 결코 다시 오지 않는다.


- 나쁜 코드로 치르는 대가

나쁜 코드의 문제점은 코드를 고칠떄마다 엉뚱한곳에서 문제가 발생한다. 이번 회사 프로젝트에서도 하드코딩때문에 후에 그게 변경되면서 의도치 않게 사이드 이펙트가 발생했다. 후에 나쁜코드가 쌓인다면 생산성도 떨어지게 되고 마침내 0에 근접하게 된다고 한다.

생산성이 떨어지면 인력을 추가하여 복구를 시도하지만 문제는 더욱 심각해진다.


- 원대한 재설계의 꿈

코드를 재설계하자며 새로운 팀이 꾸려진다. 그리고 오래걸리는경우 엉망이되는데 결국 깨끗한 코드를 만드는 노력 자체가 비용을 절감하는 방법이다.


- 태도

코드가 엉망이라 하나만 고치면 되리라 예상했다가 수백개를 건드린 경험이 있듯이 우리는 여러가지의 핑계를 대며 요구사항이 변경되었다. 일정이 빠듯했다 라는 식의 핑계를 대게 된다. 결국 이런 태도들은 프로그래머의 문제이다


- 원초적 난제

기한을 맞추는 유일한 방법은 언제나 코드를 최대한 개끗하게 유지하는 습관이다.


- 깨끗한 코드라는 예술?

- 깨끗한 코드가 무엇인지 모른다면 작성할 수 없으니 알아야 한다.


- 깨끗한 코드란?


비야네 스트롭스트룹 :  우아하고 효율적인 코드 , 철저한 오류처리


그래디 부치 :  가독성을 강조


큰토마스 : 작성자가 아닌사람도 읽기 쉽고 고치기 쉬운코드, 테스트 케이스가 존재, 의미있는 이름이 존재


마이클 페더스 :  : 언제나 누군가 주의 깊게 짰다는 느낌을 주는코드


론 제프리스 : 중복을 피하라, 한가지 기능만을 수행해라, 제대로 표현하라, 작게 추상화하라


워드 커닝햄 : 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 된다.


밥아저씨 생각 : 깨끗한 변수이름, 깨끗한 함수, 깨끗한 클래스 


- 보이스카우트 규칙

잘짠 코드가 전부는 아니고, 시간이 지나도 언제나 깨끗하게 유지해야한다. 시간이 지나면서 엉망으로 전락하는 코드가 한둘이 아니다.

그러므로 우리는 적극적으로 코드의 퇴보를 막아야한다.


우리는 체크아웃할 때보다 조금 더 깨끗한 코드를 체크인 한다면 코드는 나빠지지 않는다. 한번에 많은 노력을 투자하지 않고

변수 이름 하나를 개선하고 조금 긴 함수 하나를 분할하고 중복을 제거하고 복잡한 if문 하나를 정리하면 더 나은 프로젝트가 될 수 있다


-결론

예술책을 읽는다고 예술가가 되는건 아니지만 이책을 읽는다고 뛰어난 프로그래머가 된다는 것은 아니다.

하지만 좋은 정보들로 가득하고 좋은코드와 나쁜코드를 소개하며 나만의 기준을 가지고 나쁜코드를 좋은 코드로 바꾼다면

더 나은 프로그래머가 될거라고 생각한다.

'IT > 클린코드' 카테고리의 다른 글

[클린코드] 6장 객체와 자료구조  (0) 2020.02.04
[클린코드] 5장 형식  (0) 2020.02.03
[클린코드] 4장 주석  (0) 2020.01.29
[클린코드] 3장 함수  (0) 2020.01.28
[클린코드] 2장 의미 있는 이름  (1) 2020.01.15