아마 개발자라면 한번 쯤은 들어 봤을그 유~명한 양서 '클린코드' 입니다
상당히 두꺼운 책입니다. 책 전체 내용을 모두 적기 보단중요하고 보편적이라고 생각하는 내용 몇가지를 추려
이전에 '정리한 읽기 좋은 코드가 좋은 코드' 처럼
how to 형식으로 정리하였습니다.
(이책 또한 여러 블로그 정리글을 참고하였고 해당 url은 하단에 기입해 두었습니다.)
2020.08
cf)
현재 포스팅은 유튜브 노마드 코더의 Clean Code 영상 내용을 기반으로 작성하였습니다.
노마드클린코드
책 Clean Code는 방대한 영역을 다루고 있습니다.
1회독으로 모든걸 내재화 할 수 없기에 다회독할 예정이며 +) 표시와 함께 내용이 추가될 예정입니다.
현재는 빠져있는 객체 관련 내용은 앞으로 있을 객체지향 포스팅을 진행 후 추가됩니다.
로버트 C. 마틴 저/박재호, 이해영 역 | 인사이트(insight)
좋은 코드라는 것은 일단 돌아가기만하면 되는 코드가 아니다.
좋은 코드란 코드 그 자체로 설명이 다 되는 코드이다.
예를 들면 만약 협업을 하는 팀이 있다면 팀원들이 코드를 딱 읽었을 때 읽기만 해도 이해되는 코드
혼자서 일한다면 나중에 코드를 읽을때 3,6,9 개월 후에 이해가 되는 코드
그때 내가하던 고민이 뭔지 코드만으로 이해가 되는 부연설명없이 이해되는 코드
코드가 잘 작동되고 부연설명이 필요 없는 상태
개발하다보면 랜덤하게 값을 추가해야하는 경우가 있다.
그럴 땐 해당 숫자를 변수로 해두는 것이 좋다
다른 사람이 봤을 때 그 함수가 무엇을 하는지 이해를 못할 수 있다
그 숫자가 무엇을 의마하는 지 모른다
변수에 이름을 달면 다른 사람이 읽고 이해할 수 있다
setinterval(hi,86400)
const SECONDS_IN_A_DAY = 86400;
setInterval(hi, SECONDS_IN_A_DAY);
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가지
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: 니꼬",
});
이렇게 정리하는 것이 함수의 역할을 파악하기 좋고 총 몇개의 인수가 필요한지 파악하기 좋다
function sendMessage(text, isPrivate){
if(isPrivate){
// send private message
} else {
// send public message
}
}
sendMessage("Hello", false)
sendMessage("this is a secret", true)
function sendPrivateMessage(text){
// send private message
}
function sendPublicMessage(text){
// send public message
}
sendPrivateMessage("Hello")
sendPublicMessage("this is a secret")
allUsers.forEach((u, i) => {
sendEmail(u);
sendToCount(i);
});
allUsers.forEach((user, currentNumber) => {
sendEmail(u);
sendToCount(i);
});
—-
Clean code 101 - Meaningful names and functions