티스토리 뷰

클린 코드(Clean Code)


클린 코드(Clean Code) 란

읽기 쉬운 코드가 "클린 코드(Clean Code)" 이다. 

클린 코드의 가장 중요한 요소는 가독성이다. 즉, 모든 팀원이 이해하기 쉽도록 작성된 코드를 의미한다. 일반적으로 기존 코드를 변경하고자 할 때, 해석하는 시간과 수정하는 비율이 10:1 이라고 한다. 예를 들면, 코드를 변경하기 위해서 걸리는 전체 시간이 10시간이라고 하면, 사전에 코드를 분석하는 시간이 9시간 이상 걸린다는 것을 의미한다. 

 

 

변경 비용과 대응속도에 대한 이상치와 실제 프로젝트에서 발생하는 수치 비교(출처: Clean Code sheet)

 

위의 그래프처럼 변경 비용과 대응 속도에 대한 이상치와 실제 프로젝트에서 발생하는 수치가 차이나는 이유는 프로젝트 초기에 클린코드로 개발하기 보다는 좀 더 빠르고 쉬운 방법을 선택하기 때문이다. 대표적인 것이 'Copy & Paste'이다. 이로 인하여 이상적인 변경 비용과의 차이가 나는 부분이 위의 그래프이다. 

 

Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designers’ intent but rather is full of crisp abstractions and straightforward lines of control.”

Grady Booch, author of ‘Object-Oriented Analysis and Design with Applications’

Grady Booch는 James Rumboaugh Ivar Jacobson과 함께 UML(Unified Modeling Language)을 창시한 사람이다. Grady Booch는 '클린 코드가 단순하고 직접적이다' 라고 말했으며 또한 그렇게 함으로써 결코 '원작자의 의도를 숨기지 않는다' 라고 하였다.

 

 

* 정리

 

클린코드 = "가독성" 이 좋은 코드이다.

"가독성"이 좋은 코드는 표현적 가독성(Legibility)기능적 가독성(Readability)로 나누어서 생각해 볼 수 있다.

 

표현적 가독성이란 눈에 잘들어오는 코드, 읽기 편한 코드를 의미하며 기능적 가독성이란 변수, 함수, 클래스 등이 어떤 역할을 갖고, 어떤 동작을 하며, 서로 어떤 관계를 맺는지 직관적으로 파악할 수 있는 코드를 의미한다. 

 


클린 코드(Clean Code) 작성 주요원칙

 

 

 

1. 네이밍(Naming)

변수, 클래스, 메소드에 의도가 분명한 이름을 사용한다. 

 

✔ Bad Naming

int d; //경과 시간(단위: 날짜)

 

✔ Good Naming

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

 

2. 주석 달기(Comment)

코드를 읽는 사람이 코드를 작성한 사람만큼 잘 이해할 수 있도록 도와야 한다. 하지만 주석은 반드시 달아야 할 이유가 있는 경우에만 작성하도록 하며 코드를 빠르게 유추할 수 있는 경우에는 주석을 사용하지 않는 것이 좋다.  설명을 위한 설명은 달지 않는다.

 

// 주어진 'name'으로 노드를 찾거나 아니면 null을 반환한다.
// 만약 depth <= 0이면 'subtree'만 검색한다.
// 만약 depth == N 이면 N 레벨과 그 아래만 검색한다.
Node* FindNodeInSubtree(Node* subtree, string name, int depth);

 

3. 꾸미기(Aesthetics)

규칙적인 들여쓰기와 줄 바꿈으로 가독성을 향상시킨다. 일관 성 있고 간결한 패턴을 적용하여 줄 바꿈 해주며 메소드를 이용해 불 규칙한 중복 코드를 제거해준다.

 

4. 흐름제어 만들기(Making Control Flow Easy To Read)

✔ 왼쪽에는 변수를 오른 쪽에는 상수를 두어 비교한다.

if(length >= 10)

while(bytes_received < bytest_expected)

 

✔ 부정이 아닌 긍정을 다룬다.

if( a == b ) { // a!=b는 부정
	// same
} else {
	// different
}

 

✔ if/else 를 사용하며 삼항 연산자는 매우 간단한 경우만 사용한다.

✔ do/while 문은 피한다.

 

5.  함수 규칙(Function)

함수는 한번에 하나의 작업만 수행하도록 작성한다.

 

✔ Bad Function

var vote_changed = function (old_vote, new_vote) {
    
	var score = get_score();
    
	if (new_vote !== old_vote) {
		if (new_vote == 'Up') {
			score += (old_vote === 'Down' ? 2 : 1);
		} else if (new_vote == 'Down') {
			score -= (old_vote === 'Up' ? 2 : 1);
		} else if (new_vote == '') {
			score += (old_vote === 'Up' ? -1 : 1);
		}
	}
	set_score(score);
    
};

 

✔ Good Function

var vote_value = function (vote) {
    
    if(vote === 'Up') {
        return +1;
    }
    if(vote === 'Down') {
        return -1;
    }
    return 0;
    
};

var vote_changed = function (old_vote, new_vote) {
    
    var score = get_score();
    
    score -= vote_value(old_vote); // 이전 값 제거
    score += vote_value(new_vote); // 새로운 값 더함
    set_score(score);
};

 


Reference

* 클린코드 작성 예시

 

[네이버클라우드 개발자 스토리] 좋은 코드란 무엇일까?🤔 #클린코드 이야기

📍 “좋은 코드를 짜야 한다”​

medium.com

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함