Overview
더 나은 코드를 쓰기 위한 태도/습관/실천 목록을 모아둔 핸드북. (책을 읽으며 기억할 포인트 위주로 정리)
Connections
- Software Engineering (MOC)
챕터1 - 코드에 신경쓰기
긍정적인 관점, 건전한 태도
-
의도가 드러나는 코드
-
유지보수가 가능한 코드
-
정확한 코드
-
더 나은 구조를 가진 코드
-
더 나은 테스트 또는 테스트가 가능한 코드
-
더 쉬운 이해가 되는 코드
챕터2 - 정돈된 코드 유지하기
좋은 코드 레이아웃
-
명백하다
-
일관성이 있다
-
주의를 끌거나 초점을 빼앗지 않고 코드의 의도만을 보여준다
-
효율적으로 코딩할 수 있다
-
유지 보수하는 시간이 줄어든다
-
실수를 줄일 수 있다
(누군가)를 위해 코딩하라
- 컴파일러를 위해
- 지금 코딩하고 있는 나를 위해
- 같은 팀의 동료
- 후에 유지보수할 나 또는 동료 누군가
코드를 글처럼 작성하기
- 비슷한 것끼리 묶기
- 다른 것들은 나누기
- 코드에서 빈 줄을 사용해 관련성 있는 코드끼리 나누기
function func() {
// 값 가져오기
...
...
// 값 처리하기
...
...
// 값 반환하기
...
...
}
일관성 가지기
Tip: prettier를 사용하여 코드 포맷팅 자동화하기
들여쓰기, 연산자 옆의 공백, 대소문자, 괄호, 탭과 스페이스, 주석 형태 등
- 상호합의하에 이루어진 레이아웃에 대한 규칙은 협업을 원활하게 할 수 있다
- 정해진 규칙이 없는 경우, 파일에 대한 규칙,라이브러리에 대한 규칙 또는 표준 코딩 스타일 가이드를 사용할 수 있다
이름 짓기
잘 설명할 수 있고, 행동을 명확하게 드러낼 수 있는 이름 짓기
Tip: 좋은 이름은 서술적이고, 정확하고, 관용적이다
- 이름에서 중복으로 설명하는 부분 피하기
- 이름을 짧게 줄이는 것보다 잘 이해되는 이름이 좋다
- 관용어법 지키기(카멜 케이스, 스네이크 케이스, 파스칼 케이스 등)
- 헷갈리게 만드는 이름은 좋지 않다
코드 가다듬기
레이아웃을 다듬는 커밋과 기능을 변경하는 커밋을 분리하면 잘못되는 부분을 쉽게 알아차릴 수 있다
챕터3 - 코드 적게 쓰기
코드를 개선하는 좋은 방법 중 하나는 코드를 제거하는 것이다
코드가 많으면 생길 수 있는 문제
- 불필요한 코드는 그 자체로 비용이다
- 유지보수 비용이 증가한다
- 프로그램을 파악하기 힘들어진다
- 프로그램을 수정하기 어려워진다
- 버그가 생길 가능성이 증가한다
- 중복된 코드는 유지보수가 어렵다
허술한 논리
if문 사용
if(isTrue()) {
return true
} else {
return false
}
return isTrue() ? true : false
return isTrue()
비교
if(isTrue() === true)
if(isTrue())
복잡한 if문
function should_we_pick_bananas() {
if(gorilla_is_hungry()) {
if(banana_are_ripe()) {
return true
} else {
return false
}
} else {
return false
}
}
function should_we_pick_bananas2() {
if(!gorilla_is_hungry()) return false
if(!banana_are_ripe()) return false
return true
}
function should_we_pick_bananas3() {
return gorilla_is_hungry() && banana_are_ripe()
}
로직 최적화
if( a || b )
if( a || ( !a && b ) )
중복
if문 중복
if(a) do_a();
if(a) do_b();
if(a){
do_a();
do_b();
}
if(a) {
if(a && b) {
// do
}
}
if(a) {
if(b) {
// do
}
}
반복 중복
for (let i = 0; i < MAX; i++) {
// do
}
for (let i = 0; i < MAX; i++) {
// do
}
죽은 코드
절대 만족할 수 없는 조건문 안의 코드, 반환문 아래의 코드, 반복될 일이 없는 반복문 등
- 실행되지 않는 코드
- 호출되지 않는 코드
- 선언되었으나 할당되지 않은 변수
- 메서드에 전달되었지만 사용하지 않는 매개변수
- 전혀 사용되지 않는 열거형, 구조체, 클래스, 인터페이스
주석
- 대부분의 코드는 주석을 필요로 하지 않는다
- 주석을 쓰는 것보다 코드를 이해하기 쉽게 바꾸는 것이 나을 수 있다
- 주석이 꼭 필요한 경우가 언제인지 생각해 보아야 한다
- 코드는 언제든 vms를 통해 복구 가능하므로 이전 코드를 남기기 위해 주석을 사용할 필요가 없다
코드 축소
- 장황하게 늘어질 코드를 효율적으로 축소할 수 있다
&&,||,삼항연산자를 사용해 조건문을 줄일 수 있다
나쁜 설계
- 죽은 숲을 갈아엎는 것을 두려워 하지 마라
- 기존의 좋은 라이브러리가 있다면 활용하는 것도 좋은 방법이다
공백
-
적절한 공백을 사용하여 코드를 읽기 쉽게 구분할 수 있다
-
코드를 작성하고 읽기 쉽게 개선
-
작성이 끝난 후 스스로 정리
-
불필요한 코드와 안쓰는 프로그램 제거
챕터 4- 코드 줄여 개선하기
- 코드가 의미를 가질 때만 작성하기
- 코드가 필요할 때만 작성하기
- 작은 기능이라도 구현하는 것보다 필요한지를 먼저 생각하기
- 요구사항은 프로그래머가 아닌 사용자 관점에서 생각해야 한다