본문 바로가기

Jbee/서평&영화&자격증

읽기 좋은 코드가 좋은 코드다 / 저스틴 보즈웰, 트레버 파우커 , 임백준 옮김 / 한빛미디어


개발 관련 서적 중에는 워낙 유명한 책이라 길게 소개하지 않겠다.
안 읽어보면 왠지 놓치는 것이 있을 것 같아서 읽어봤다.
그리고 역시 놓치고 있는 것이 있었고, 많은 것을 배울 수 있었다.
하지만 주로 쓰는 언어가 아닌 언어로 쓰여진 내용에 대해서는
깊은 공감을 불러일으키지 못했다.
물론 이 부분은 코드 작성 전반적인 내용을 간결하게 다루고 있는 책이기에 존재하는
어쩔 수 없는 한계인 것 같다.
맞는 말을 하고 있고, 모든 개발자가 이대로만 한다면,
우리는 더 없이 행복해질 수 있다.
조건은 같은 프로젝트에 참여하는 '모든' 개발자이다.
한 명이라도 다른 방향으로 코드를 작성하게 되면,
그렇게 작성된 코드를 다시 바꾸는 데 드는 비용이 더 들기 때문이다.
'약속'은 지키라고 있는 것이기에, 중요한 것 같다.
절대적인 약속보다는 함께하는 사람들끼리의 약속이 더 중요하다.

이 책의 구성은 다음과 같다.
1부. 코드는 이해하기 쉬워야 한다.
2부. 루프와 논리를 단순화하기
3부. 코드 재작성하기
4부. 선택된 주제들.


가장 좋았던 구절이다.
코드는 다른 사람이 그것을 이해하는데 들이는 시간을
'최소화'하는 방식으로 작성되어야 한다.

그리고 책에서 언급된 내용들 중에서,
좋았던 내용들 그리고 한 번 생각해보면 좋은 부분들을 개인적인 관점에서 정리해보았다.

> 좋았던 부분
이름에 정보를 담아내라
구체적인 이름 사용하기 : 어떻게 구체적으로 할 것인가에 대한 부분을 명확히 해야할 것이다.
접두사 or 접미사 사용하기 : 둘 중 하나를 선택하는 것이 중요하다.
추가적인 정보를 담기 : 이 또한 방법이 여러 가지가 존재하기 때문에 하나로 통일하는 것이 중요하다.

미학적으로 보기 좋으면 당연히 가독성도 함께 좋아진다.

열거할 때는 의미있는 순서로 나열하자.
예를 들면 화면에 출력될 순서라든지
중요한 순서 -> 덜 중요한 순서라든지
알파벳 순서대로라든지

주석에 대한 기본 원칙
코드에서 빠르게 유추가 가능한 내용은 불필요한 주석이다.
최대한 변수명과 메소드명으로 해당 변수, 메소드가 무슨 역할을 하는지 나타내라.
주석에는 코드에 있는 결함, 성능, 앞으로 해결해야 하는 사항 등을 적자.
상수를 설명하는 주석을 달자.
코너케이스를 설명해주는 입/출력 예를 사용하라
코드의 의도를 명시하라

변수명에 대한 내용
변수가 시간의 양이나 바이트의 수와 같은 측정치를 담고 있다면 변수명에 단위를 포함시킨다.
변수의 사용범위가 넓을수록 긴 이름을 사용해야 한다.

조건문, 반복문, 부등식에 대한 내용
삼항 연산자는 매우 간단할 때만 사용하고 if/else를 사용하자.
적어도 한번은 실행되는 do/while 루프를 피하라
왼쪽 : 값이 더 유동적인 ‘질문을 받는’ 표현
오른쪽 : 더 고정적인 값, 비교 대상으로 사용되는 표현

지당한 말씀,
함수는 하나당 하나의 역할만 수행해야 한다.
두 가지 역할을 수행할 경우 나중에 재사용성에 영향을 끼치게 되고,
또 유지보수하는데 있어서 버그를 만들어낼 수 있다.


> 한 번, 생각해볼 부분
같은 tmp 더라도 무엇을 저장하고 있는지 명시하면 좋다.
-> 글쎄, 바로 다음 줄에서만 사용될 변수를 굳이 긴 변수 명으로 명시해야 할까

중첩 반복문이 존재할 때, i,j,k … 보다는 array1Name_i, array2Name_i, array3Name_i
-> 이미 i,j,k가 더 간결하고 convention 처럼 받아들여지고 있지 않은가

조건문에서 부정이 아닌 긍정을 다루자. ex if(debug)
-> '해당 값이 존재하지 않는다면' 이라는 의미로 방어코드를 작성한다면?
-> default 값이 false 인 경우에도 규칙에 맞추기 위해 initial value를 지정해줘야 하는가?

경계값을 포함하는 한계값은 min과 max
경계값을 포함하는 범위는 first, last / begin, end
-> 옮겨 적으면서도 무슨 의미인지 파악이 잘 안됬는데, 아직 와 닿을만한 경험이 없어서 인 것 같다.