개발자 키우기

클린코드 본문

Book

클린코드

개발자 키우기 2023. 10. 1. 15:46

의미 있는 이름 만들기

 

의도를 분명히 밝혀라.

 

나는 여태 아래에 있는 방식으로 코드를 짜고 있었다.

 

결괏값만 중요하니 7이란 숫자에 굳이 변수를 지정하지 않은 게 메모리상 이점이 있다고 생각했지만

 

메모리상의 이점보다 결국 나중에 7의 의미를 파악하기 위한 유지보수에 비용이 더 많이 들기 때문에

 

아래처럼 다른 사람이 보더라도 어떤 일을 하고 있고 7이 어떤 의미가 숫자인지 밝혀야 좋은 코드가 된다.

 

public class Main {
   public static void main(String[] args) {

      int days = 500;

      int weeks = days / 7;

      System.out.println("weeks = " + weeks);

   }
}
public class Main {
   static int DAYS_IN_WEEK = 7;

   public static void main(String[] args) {

      int inputDays = 500;

      int weeks = inputDays / DAYS_IN_WEEK;

      System.out.println("weeks = " + weeks);

   }
}

그릇된 정보를 피하고 의미 있게 구분하라.

 

List 형식이 아닌데 List라는 변수명을 붙이는 것은 혼돈을 초래하고

 

쉽게 List1, List2, List3은 어떤 값을 담기 위한 것인지 알기 어려우며

 

getCustomInfo와 getCustomData는 고객의 정보를 가져오지만 어떤 정보를 가져오는지 알 수 없기 때문에

 

어떤 함수를 사용할지 알 수가 없다. 좀 더 디테일하게 변수명 와 메서드명을 정하자.

 

String[] wordList = {"a", "b"};

List<String> wordList1 = new ArrayList<>();
List<String> wordList2 = new ArrayList<>();
List<String> wordList3 = new ArrayList<>();

getCustomInfo();
getCustomData();
getCustoms();

함수와 주석

 

함수는 한 가지 일만 수행해야 하며 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 오도록 설계해야 한다.

 

A함수 안에 있는 B함수는 A함수보다 더 구체적이어야 함.

 

 

함수의 코드 추상화 수준은 동일해야 한다.

 

A함수 안에 ID와 패스워드를 구분하는 B함수와 카운트를 늘리는 수가 있다면 추상화 수준이 다름.

 

 

Swich문은 추상팩토리에 숨기고 다형성을 활용하여 클래스를 만들어 실행하도록 설계해야 함.

 

 

함수의 인수는 적을수록 좋다.

 

 

IF문과 ELSE를 사용한 오류제어보다 Try/Catch 문을 활용하는 게 더욱 좋다. 또한 각 블록을 별로 함수로 뽑아내어 구성하자.

 

if문안에서 다시 if 문과 else 그리고 다시 else 문은 중복이 많다.

 

코드를 반복하여 중복시키는 행위는 유지보수와 가독성이 떨어진다.

 

 

코드로 의도를 표현하여 최대한 주석을 달지 않도록 해야 한다.

 

좋은 코드는 코드만으로 어떤 행위와 동작을 이해 시킬 수 있다.

회사규정, 법적, 경고, 강조, TODO, Javacos 주석은 제외

 

 

주석이 필요할 경우 정보를 명확하게 전달해야 한다.

 

주석을 보고 다시 코드를 봤을 때 주석의 내용이 이해가 안 되거나 코드를 다시 뜯어보게 되면 쓸모없는 주석이다.

 


객체와 자료구조, 오류 처리

 

시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 적합하다.

 

하지만 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 적합하다.

 

메서드로 null을 전달하지 마라. 컬랙션의. emptyList와 같은 읽기 전용 객체를 전달하자

 


경계

 

외부 라이브러리를 사용할때 호출하는 테스트를 수행하자.

 

안전하다고 생각하고 사용해서 오류가 나면 외부 라이브러리 문제인지 내 모듈이 문제인지 아니면 둘 다인지 찾는데 

 

시간이 더 걸린다. 따라서 외부 라이브러리를 호출하는 테스트를 수행하는 것이 좋다.

 

 

경계를 줄여서 결합도을 낮추자.

 

외부 라이브러리를 사용할때 너무 외부 라이브러리에 의존적으로 코드를 작성하면 외부 라이브러리가 변경되었을 때

 

수정해야 하는 코드 수가 많아진다. 따라서 어뎁터 패턴을 활용하여 인터페이스를 만들어서 결합도를 낮추고 코드를

 

우리 모듈에 의존하는 것으로 만들어야 한다.

 

 

 

 

 

- 참고 ( 클린코드 )