Upload
totodeung
View
97
Download
4
Embed Size (px)
Citation preview
코드의 품질CODE QUALITY
Created by / Ironhee @이철희
명품이라 불리는 제품들은 공통점이 있습니다.
잘 동작합니다. 또한,
부품 하나하나에는정성과 철학이 담겨있고,
그러한 부품들의 결합은예술로 느껴지기까지 합니다.
우리는 품질이 높다고 말합니다.
소프트웨어는 어떨까요?
GMAIL
STARCRAFT
이러한 소프트웨어들에도 공통점이 있습니다.
코드가 잘 동작할 뿐만 아니라잘 정돈되어 있습니다.
즉 코드의 품질이 높습니다.
코드를 제대로 짜지 않는다면...
코드를 수정하거나 추가하기 힘들어집니다.
코드를 이해하기 힘들어집니다.
팀원들에게 비난받을수 있구요.
당신의 코드를 본 팀원은 질문을 할 겁니다.
그리고 야근을 합니다.
코드의 품질을 높이는 방법
반복하지 않기Don't Repeat Yourself
같은 코드가 중복된다면,수정도 여러번해야 한다.
Example Data<ul> <li class="item" data-id="5">Lee</li> <li class="item" data-id="3">Kim</li> <li class="item" data-id="15">Hong</li></ul>
BADfunction removeItem (id) { $('.item[data-id="' + id + '"]').remove();}
function updateItemText (id, text) { $('.item[data-id="' + id + '"]').html(text);}
GOODfunction getItem (id) { return $('.item[data-id="' + id + '"]');}
function removeItem (id) { getItem(id).remove();}
function updateItemText (id, text) { getItem(id).html(text);}
한가지만 하기Do One Thing
함수는 한 가지를 해야한다.그 한가지를 잘해야 한다.그 한가지만을 해야 한다.
BAD// ... some codeisEdible: function () { if (this.expirationDate > Date.Now() && this.approvedForConsumption === true && this.inspectorId !== null) { return true; } else { return false; }}
GOOD// ... some codeisEdible: function () { return this.isFresh() && this.isApproved() && this.isInspected();}
의미있게 이름짓기Reasonable Naming
BAD// ... some codes
function checkData ( b, c ) {
return a[ b ][ c ].booleanData1 === true;
}
GOOD// ... some codes
function getCell( map, x, y ) {
return map[ x ][ y ];
}
function hasBomb ( cell ) {
return cell.hasBomb === true;
}
지뢰찾기에서 사용되는 코드입니다. Game Options Help
나쁜 주석 피하기Avoiding Bad Comment
나쁜 코드에 주석을 달지 마라.새로 짜라.
BAD/*
이것은 지뢰찾기 맵에서의 한 방에 지뢰가 있는지 없는지를 확인하는 함수입니다.
======Arguments======a: 지뢰찾기 맵입니다.b: 방의 가로 좌표입니다.c: 방의 세로 좌표입니다.
*/
function checkData ( a, b, c ) {
return a[ b ][ c ].booleanData1 === true;
}
GOODfunction getCell( map, x, y ) {
return map[ x ][ y ];
}
function hasBomb ( cell) {
return cell.hasBomb === true;
}
라이브러리 사용하기Using Library
우리가 구현하려는 대부분의 기능은이미 라이브러리로 구현된 경우가 많다.
또한 문서화가 잘 되어있어,학습비용도 줄어든다.
유지보수 또한 활발하게 이루어진다.
개발, 문서화, 학습 비용을 상당히 아낄 수 있다.
코딩 스타일Coding Style
많은 사람이 코드를 작성했더라도마치 한 사람이 작성한 것처럼 보여야 한다.
JQUERY JAVASCRIPT STYLE GUIDE// Badvar foo = true;var bar = false;var a;var b;var c;
// Goodvar a, b, c, foo = true, bar = false, arr = [ a, b, c ];
Full
AIRBNB JAVASCRIPT STYLE GUIDE// badvar items = getItems(), goSportsTeam = true, dragonball = 'z';
// goodvar items = getItems();var goSportsTeam = true;var dragonball = 'z';
Full
자신의 팀에 맞는,하나의 코딩 스타일 가이드를 선택합시다.
테스트 주도 개발Test-Driven Development
테스트를 먼저 짜고, 코드를 작성하는 개발 방법.
자세한내용은 켄트벡의 TDD 검색하기!
보이스카우트 규칙Boy Scout Rule
캠프장은 처음 왔을 때보다더 깨끗하게 해놓고 떠나라.
코드를 Pull 했을 때 보다,더 깨끗하게 해놓고 Push 하라.
단순한 설계규칙 지키기simple design
단순한 설계규칙 4가지1. 모든 테스트를 실행한다.2. DRY원칙에 따라 중복을 제거한다.3. 프로그래머 의도를 표현한다.4. 클래스와 메서드 수를 최소로 줄인다.
한 Commit 에는 하나의 변경사항만 있어야 한다.
코드의 품질을 어떻게 측정하죠?
코드 품질을 측정하는 유일한 척도 = 분당 내지르는 WTF! 횟수
(WTF: What The F**k)
팀에게 존경받는 개발자가 되고싶나요?
팀에게 고통을 주고싶나요?
당신에게 달려있습니다.
감사합니다
참고자료켄트벡의 구현패턴익스트림 프로그래밍클린 코드테스트 주도 개발