본문 바로가기
Review

[클린 코드] 클린 코드 4~8

by r4bb1t 2021. 10. 3.
반응형

4

코드는 복사, 붙여넣기, 이동 등등을 통해 자주 변하지만, 주석은 코드를 따라가지 않는다. 주석을 최대한 줄이자. 

4.1 코드에 설명이 필요하면 주석을 달기보다는 설명이 필요없이 명확한 코드로 고치면 된다. 
 
4.2 코드의 의미를 주석으로 설명하기보다는 함수를 분리하거나 이름을 잘 붙여서 코드만 봐도 의미가 파악되도록 하자. 
 
4.3 법적인 이유로 다는 주석은 꼭 필요하다. 정보를 제공하는 주석, 의도를 설명하는 주석, 의미를 명료하게 밝히는 주석 등은 유용하지만 최대한 줄이면 좋다. 결과를 경고하는 주석, TODO, 중요성을 강조하는 주석은 합리적일 수 있다.  
 
4.4 코드만 봐도 알 수 있는 내용, 너무 당연한 내용을 주석으로 설명하지 말자. 잘못된 내용을 주석으로 달지 말자. 수정 이력도! git같은 버전 관리 시스템을 쓰자. 코드를 잘 개편해 주석의 내용을 코드로 표현하도록 노력하자. 쓰지 않는 코드를 주석으로 남겨놓지 말자.

 

5

5.1 당장 돌아가는 코드를 짜는 것보다 형식을 맞추어 가독성 좋은 코드를 짜는 것이 훨씬 중요하다. 
 
5.2 각 개념을 빈 행으로 분리하자. 빈 행으로 구분된 각 코드 묶음은 하나의 완결된 생각을 나타낸다. 연관성 있는 코드는 가까이 있는 것이 읽기 좋다. 비슷한 동작을 수행하는 코드도! 
 
5.3 가로 정렬.. 코드 포맷팅 도구를 쓰기 때문에 잘 와닿지 않았지만 들여쓰기를 무시하지 말 것, 길이를 80~120자로 자를 것 등등 
 
5.4 팀 간의 코드 규칙을 정하고 그것을 꼭 지키자.

 

6

6.1 객체에서, private 변수를 선언하고 난 후 구현을 외부로 노출하지 않도록 퍼블릭 메소드는 추상적인 개념으로 표현하자. 변수를 private로 만드는 것은 구현을 외부로 노출하지 않기 위해서인데, getter, setter를 public으로 만들면 의미가 있나?
 
6.2 절차적안 코드는 새로운 자료 구조를 추가하기 어렵고, 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 
 
6.3 디미터 법칙: 다른 객체가 어떤 자료를 가지고 있는지 몰라야 한다.
클래스 C의 메소드 f는 다음 객체의 메소드만 호출해야 한다
- 클래스 c
- f가 생성한 객체
- f 인수로 넘어온 객체
- C 인스턴스 변수에 저장된 객체 
 
자료 구조와 객체를 섞어서 잡종 구조를 만들지 말자 
 
6.4 공개 변수만 있고 함수가 없는 자료 구조체를 DTO(자료 전달 객체)라고 한다. (TS에서는 인터페이스나 타입 같은데.. 잘 모르겠음)

 

7

7.1 함수를 호출한 즉시 오류를 확인하는 것은 번거로우니 오류가 발생하면 예외를 던지는 것이 깔끔하다. 
 
7.2 try-catch-finally문부터 작성하며, 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트에 통과하는 코드를 작성해 예외 유형을 좁힌다. 
 
7.3 확인된 예외는 상위 블록에서 하위 함수가 던지는 예외를 처리해야 하므로 캡슐화가 깨진다. 미확인된 예외를 사용하자. 
 
7.4 오류 메세지에 정보를 담자. 실패한 연산 이름과 실패 유형을 언급하자. 
 
7.5 외부 API를 사용하면서 오류를 캐치해야 항 때는 해당 클래스를 감싸는 클래스를 만들어 예외들을 잡아 하나로 묶어서 던져준다. 
 
7.6 예외를 처리하지 않고 클래스를 만들거나 객체를 조작해 특수 사례를 처리해버리면 코드가 더 깔끔해진다. 
 
7.7 메소드가 null을 반환하지 않도록 하자. 대신 빈 리스트 등 특수 사례 객체를 반환하자. 
 
7.8 메소드로 null을 전달하는 코드도 피하자.

 

8

8.1 경계 인터페이스를 여기저기 넘기지 말자. 
 
8.2 프로그램에서 사용하려는 방식대로 외부 API를 호출해보고 테스트해본다. 
 
8.4 학습 테스트는 성과가 크다. 또 실제 코드와 동일한 방식으로 인터페이스를 사용하는 테스트 케이스가 필요하다. 
 
8.5 아직 존재하지 않는 API를 사용하기 위해 우리가 필요한 인터페이스를 미리 정의하고, 나중에 어댑터 패턴을 사용해 간극을 메우고 API가 바뀔 때 수정할 코드를 모아놓는다. 
 
8.6 외부 패키지를 직접 호출하는 코드를 줄여서 경계를 관리하자. 경계를 감싸거나 어댑터 패턴으로 우리가 원하는 인터페이스를 변환하자.

반응형

댓글