본문 바로가기
공부정리

깨끗한 코드를 위한 5가지

by 에드박 2020. 7. 19.

예전부터 좋은 코드 , 깨끗한 코드 , 다른사람들이 쉽게 알아볼 수 있는 코드란 무엇인가?

 

그런 코드를 쓰는 사람이 되고싶었습니다. 만약 그럴 수 있다면 협업의 효율이 배는 상승할 테니까요.

 

이미 국비교육 과정에서 팀 프로젝트를 할 때 좋은 코드라는 것을 경험해봤습니다.

 

프로젝트의 주제는 영화관 웹사이트 였습니다.

 

팀원 중 한분이 영화관 자리를 선택하고 1분안에 결제를 완료하지 않으면

 

페이지가 새로고침되면서 처음부터 다시 예약하게 만드는 기능을 만드셨고

대충 이렇게 생김 1

저는 그 팀원분의 코드를 받아서 예약을 DB에 연동시키는 작업을 했습니다.

 

시간이 얼마 없었기에 빨리 로직을 짜고 기능을 구현하는데만 집중했었습니다.

 

구현하면서 계속 느낀것은 "왜 질문할게 없지?" 였습니다.

 

모든 변수와 함수가 이름만으로 어떻게 동작하는지 보였기 때문에 저는 예약기능에만 집중할 수 있었죠.

 

이것은 매우 신기한 경험이었습니다. 마치 그 사람의 생각을 그대로 전달 받은 느낌이었습니다.

 


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

 

제가 경험 했던것처럼 팀으로 일한다면, 좋은 코드는 팀원들이 딱 읽었을 때 

 

읽기만 해도 무엇인지 이해가 되고

 

코드가 무엇을 하는지 물어볼 필요도 없이 이해가 되는것이 가장 이상적인 모습일겁니다.

 

미래의 내가 나의 코드를 봤을 때도 부연설명 없이 이해할 수 있는 그런 코드가 좋은 코드 입니다.

(3개월 6개월 1년 이 지나도 말입니다.)

 

1.  검색이 가능한 이름을 써라

코딩을 하다보면 랜덤하게 값을 추가해야 할 때가 있습니다.

 

예를들어 하루를 초단위로 바꾼 값을 쓴다고 하면 이렇게 쓸 수 있습니다.

 

public class DoSomething {
	setInterval(eatKimchi(), 86400);
}

 

이렇게 쓰는것은 다른사람이 봤을 때 86400 이라는 숫자가 무엇을 의미하는지 모를 수 있습니다.

 

이 코드를 이렇게 바꾼다면 누가보더라도 이해할 수 있을것입니다.

 

public class DoSomething {

    final int SECOND_IN_A_DAY = 86400;
    
    setInterval(eatkimchi(), SECOND_IN_A_DAY);
    
}

 

86400 이라는 숫자를 변수에 넣고 변수의 이름에 이 숫자가 무엇을 의미하는지 적어두는 것으로

 

이해하기 쉬운 코드가 되었습니다.

 

2. 함수명은 반드시 동사를 써라 & 함수는 한가지 기능만 수행해야한다.

 

예를 들어서

 

public void userData() { }

 

라는 메소드는 함수명으로 좋은 이름이 아닙니다.

 

public void loadUserData() { }

 

이렇게 함수명을 정하면 이름을 봤을 때 '아 유저데이터를 불러오는 함수구나' 라고 이해할 수 있습니다.

 

또 이렇게 이름을 지으면 함수가 너무 많은 역할을 하는건 아닌지 알게 되기도 합니다.

 

왜냐하면 함수는 딱 한개만 잘해야 합니다.

 

함수명을 그들이 하는 역할, 동사,액션 중심으로 이름을 짓다보면

 

구분의 필요성을 느끼게 될 수 있습니다.

 

예를 들면 유저 데이터를 불러오는 함수는 "불러오는 역할" 만 해야합니다.

 

유저를 불러오는 함수가 다른 기능도 포함하고 있다면

 

해당 함수를 쪼개야할 수 있는것입니다.

 

3. 인수(argument)

 

함수는 몇개의 인수를 가져야 적당할까요?

 

가장 좋은 숫자는 3개 혹은 그 이하라고 합니다.

 

만약 너무 많은 수의 인수를 필요로 하면, 다른 사람이 봤을 때

 

그 인수가 무엇을 하는지 알수 없게됩니다.

 

public void makePayment(int price, int productId, int size, String quantity, String userId) {

}

makePayment(1000, 1, 95, 2, "park");

 

만약 자바의 생성자에서 너무 많은 숫자의 인수를 필요로 하면

 

자바의 빌더(Builder) 패턴을 이용하는게 좋습니다.

 

public class Book {
	private int id;
	private String name;
    private int page;
    private String theme;
    private String paper;
    
    public static class Builder {
    	...
    }
    ...
}

Book book = new Book.Builder().id(1)
                    .name("java")
                    .page(300)
                    .theme("programming")
                    .paper("GoodPaper")
                    .build();

 

2~3개의 인수까지는 이해하기 좋지만 그 이상은 복잡해집니다.

 

4. boolean 값을 인수로 함수에 보내는 것을 최대한 방지하도록 하자!

 

boolean 값은 참 혹은 거짓을 의미하는 데이터 타입입니다.

 

boolean 값을 함수에 보낸다는 것은, 

그 함수 안에 if, else 가 있다는 뜻입니다.

 

public void sendMessage(String text, boolean isPrivate) {
    if (isPrivate) {
    	// send private message
    } else {
    	// send public message
    }
}

sendMessage("hello", false);
sendMessage("this is secret message", true);

 

 

추천 하는것은 if-else 값을 다른 함수로 분리하는것이 좋습니다.

 

public void sendPrivateMessage(String text) {
	// send private message
}

public void sendPublicMessage(String text) {
	// send public message
}

sendPublicMessage("hello");
sendPrivateMessage("this is a secret");

 

2번에서 언급했듯이 함수는 단 한개의 액션만 하는것이 좋습니다.

 

따라서 함수를 분리하는것이 좋은 방법입니다.

 

5. 짧은 변수명이나(아무도 이해하지 못하는) 축약어를 피하자

 

예를들어 user -> u 로 한다던지 email -> e 로 제멋대로 줄여쓰는 것입니다.

 

팀원이 관심법으로 본다면 괜찮겠지만 u 나 e 만 보고는 그것이 무엇인지 알 수 없을 겁니다.

 

sendE(u);
addToCount(i);

 

함수만 보면 무슨 기능인지 전혀 알 수 없습니다.

 

sendEmail(user);
addToCount(currentNumber);

 

이렇게 u 대신 user 로 E 대신 Email 로 써주면 훨씬 이해하기 좋은 코드가 됩니다.

 

 

하지만 아직 좋은 코딩을 하는 습관이 되어있지도 되어 있다고해도

 

코드를 짜는 순간은 브레이크를 잡기 어려우므로 우리는 초기 시작점에서 코드를 이쁘게 쓰려고 할 필요는 없습니다.

 

일단 못생겨도 코드를 쓴다음 작동이 되는것을 확인하고 그다음 클린 코드로 다듬어 주면 됩니다.

 

처음부터 이쁜 코드로 짜는건 힘듭니다. 뭔가 처음 쓸 때는 새롭게 만들고 있는 단계이기 때문에

 

동시에 이쁜코드를 짜려면 혼돈이 찾아올겁니다.

 

그래서 정상적인 작동을 확인하고 이후에 다듬어주는 과정을 거쳐서 좋은 코드로 만들어 주는것이 좋습니다.

 


좋은 코드로 다른 분들에게도 제가 느꼈던 경험을 느낄 수 있게 하고 싶지만

 

실천하는건 더욱 어렵습니다. 제 코드는 청소해야 할곳이 많거든요.

 

이 내용은 다음 영상에서 볼 수 있습니다.

 

https://www.youtube.com/watch?v=Jz8Sx1XYb04

니콜라스 선생님..

 

댓글