Book | Clean Code(feat. 노마드 코더)

sik2·2021년 5월 5일
15

리뷰

목록 보기
4/12

아마 개발자라면 한번 쯤은 들어 봤을그 유~명한 양서 '클린코드' 입니다

상당히 두꺼운 책입니다. 책 전체 내용을 모두 적기 보단중요하고 보편적이라고 생각하는 내용 몇가지를 추려

이전에 '정리한 읽기 좋은 코드가 좋은 코드' 처럼

how to 형식으로 정리하였습니다.

(이책 또한 여러 블로그 정리글을 참고하였고 해당 url은 하단에 기입해 두었습니다.)

2020.08

cf)

현재 포스팅은 유튜브 노마드 코더의 Clean Code 영상 내용을 기반으로 작성하였습니다.
노마드클린코드

책 Clean Code는 방대한 영역을 다루고 있습니다.
1회독으로 모든걸 내재화 할 수 없기에 다회독할 예정이며 +) 표시와 함께 내용이 추가될 예정입니다.

현재는 빠져있는 객체 관련 내용은 앞으로 있을 객체지향 포스팅을 진행 후 추가됩니다.

로버트 C. 마틴 저/박재호, 이해영 역 | 인사이트(insight)

<정리>

좋은 코드라는 것은 일단 돌아가기만하면 되는 코드가 아니다.

좋은 코드란 코드 그 자체로 설명이 다 되는 코드이다.

예를 들면 만약 협업을 하는 팀이 있다면 팀원들이 코드를 딱 읽었을 때 읽기만 해도 이해되는 코드

혼자서 일한다면 나중에 코드를 읽을때 3,6,9 개월 후에 이해가 되는 코드

그때 내가하던 고민이 뭔지 코드만으로 이해가 되는 부연설명없이 이해되는 코드

코드가 잘 작동되고 부연설명이 필요 없는 상태

1. 검색 가능한 이름을 사용하기 (Use a searchable name.)

개발하다보면 랜덤하게 값을 추가해야하는 경우가 있다.

그럴 땐 해당 숫자를 변수로 해두는 것이 좋다

다른 사람이 봤을 때 그 함수가 무엇을 하는지 이해를 못할 수 있다

그 숫자가 무엇을 의마하는 지 모른다

변수에 이름을 달면 다른 사람이 읽고 이해할 수 있다

setinterval(hi,86400)

const SECONDS_IN_A_DAY = 86400;
setInterval(hi, SECONDS_IN_A_DAY);

2. 함수명은 반드시 동사로. (Function name should be verbs.)

function userData(){
//...
}

const data = userData();

보다

 function loadUserData(){
//...
}

const data = loadUserData();

이렇게 하면 좋은 점은

함수가 너무 많은 역할을 하는 것은 아닌지 알게된다

함수는 하나만 잘해야한다

동사로 이름을 짓기 시작하면 구분의 필요성을 느끼게 된다

function loadUserData() {
	const value = `; ${document.cookie}`;
	const parts = value.split(`; user_id=`);
	
	if (parts.length ===2 ) {
		const cookie = parts.pop().split(";").shift();
	}
}

const userData = loadUserData();

해당 함수가 로드유저데이터 외에 다른일도 한다면 분리해야할 필요가 있다.

function getCookie() {
	const value = `; ${document.cookie}`;
	const parts = value.split(`; user_id=`);
	
	if (parts.length ===2 ) {
		return parts.pop().split(";").shift();
	}
}

function loadUserData(){
	const cookie = getCookie();
}

const userData = loadUserData();

조언이 2가지

  • 함수명은 동사로 써라
  • 함수는 무조건 한가지 기능만 해야한다

3. 함수의 인수는 3개이하 적당. 많을 경우에는 Object로 정리해서 param 사용.

function makePayment(price, productId, size, quantity, userId){
	// process payment
}

makePayment(35, 5, "xl", 2, "니꼬")

함수가 너무 많은 인수를 필요로하면 다른사람이 봤을때 혼란스러울 수가 있다.

어쩔수 없이 써야한다면 configuration object를 내보내는 것을 추천

function makePayment(price, productId, size, quantity, userId){
	// process payment
}

makePayment({
	price: 35,  
	productId: 5, 
	size: "xl", 
	quantity: 2, 
	userId: 니꼬",
});

이렇게 정리하는 것이 함수의 역할을 파악하기 좋고 총 몇개의 인수가 필요한지 파악하기 좋다

4. 함수의 파리미터에 boolean 을 둬서 액션 2개 이상을 구현하기 보다는, 함수를 2개로 구분하는 것을 추천.

  • boolean 값을 인수로 함수에 보내는 것을 최대한 방지하자
  • 인수에 boolean 값을 보낸다는 것은 함수 안에 if else 문이 있다는 뜻이다
function sendMessage(text, isPrivate){
	if(isPrivate){
		// send private message
	} else {
		// send public message
	}
}

sendMessage("Hello", false)
sendMessage("this is a secret", true)
  • 추천하는 것은 각각 if-else 값을 다른 함수로 분리하는 것이 좋다
function sendPrivateMessage(text){
		// send private message
}

function sendPublicMessage(text){
		// send public message
}

sendPrivateMessage("Hello")
sendPublicMessage("this is a secret")
  • 함수는 단 한개의 액션만 해야한다

5. 변수명은 너무 축약하지 말것. 이해할 수 있는 변수명으로

allUsers.forEach((u, i) => {
	sendEmail(u);
	sendToCount(i);
});
  • 아무도 이해 못하는 u, i 를 쓰지말자
allUsers.forEach((user, currentNumber) => {
	sendEmail(u);
	sendToCount(i);
});
  • 상대방 입장에서 이해할 수 있도록 쓰자
  • 너가 봐도 알겠냐라는 마인드로

[주의] 문제 해결하려는 코딩 초반부에는 우선 동작에 초점 맞춰서 작업 그 후에 깔끔하게 코딩 정리(5개 팁 참고)하는 것을 추천

  • 일을 시작하면 미친 듯이 코딩한다
  • 초기엔 이쁘게 코드를 쓰려하지말자
  • 무언가를 새롭게 만드는 중에 이쁘게 만들기란 어렵다
  • 거지같이 만들었더라도 일단 동작하는 걸 확인하고 이후에 다듬어 주자
  • 일단 동작하게 만들고 이후에 클린코드를 적용하자
  • 코딩에 쓴 시간만큼 대청소의 시간을 갖자

—-

Clean code 101 - Meaningful names and functions

"클린 코드를 다시 읽고"를 읽고

클린 코드를 다시 읽고

깨끗한 코드를 위한 5가지 팁

愚工移山 (우공이산) : 네이버 블로그

https://soojin.ro/blog/naming-boolean-variables

Boolean 변수명 짓는 팁

profile
기록

0개의 댓글