[클린코드] 코드 형식은 매우 중요하다

jmjgirl·2023년 8월 24일
0

클린코드

목록 보기
4/5
post-thumbnail

Chapter 5. 형식 맞추기

코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다.


형식을 맞추는 목적

코드 형식은 중요하다! 너무나도 중요하므로 융통성 없이 맹목적으로 따르면 안된다. 코드 형식은 의사소통의 일환이다.

오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 지대한 영향을 미친다.


적절한 행 길이를 유지하라

💡 개념은 빈 행으로 분리하자

각 행은 수식이나 절을 나타내고, 일련의 행 묶음은 완결된 생각 하나를 표현한다. 빈 행은 새로운 개념을 시작한다는 시각적 단서다.

💡 세로 밀집도

서로 밀접한 코드 행은 세로로 가까이 놓여야 한다


가로 형식 맞추기

💡 가로 공백과 밀집도

가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.

private void measureLine(String line) {
	lineCount++;
    int linesize = line.length();
    totalChars += lineSize;
    lineWidthHistogram.addLine(lineSize, lineCount);
}

Chapter 6. 객체와 자료 구조

자료 추상화

  • 구체적인 Point 클래스
public class Point {
	public double x;
    public double y;
}
  • 추상적인 Point 클래스
public interface Point {
	double getX();
    double getY();
    void setCartesian(double x, double y);
}

첫번째 코드 (구체적인 Point 클래스)는 구현을 노출한다. 변수를 private으로 선언하더라도 각 값마다 조회 get 함수와 설정 set 함수를 제공한다면 구현을 외부로 노출하는 셈이다.

구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.


자료/객체 비대칭

객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.
자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.

(자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.

하지만 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.

새로운 자료 타입이 필요한 경우에는 클래스와 객체 지향 기법이 적합하고 새로운 함수가 필요한 경우에는 절차적인 코드와 자료 구조가 좀 더 적합하다!


디미터 법칙

잘 알려진 휴리스틱으로, 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.

디미터 법칙을 어기는 코드

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

위와 같은 코드를 기차 충돌이라 부른다. 일반적으로 조잡하다 여겨지는 방식이므로 피하는 편이 좋다.


❗ 출처
📖 클린코드 - 로버트 C. 마틴 저자

profile
개발자로 가는 👣

0개의 댓글

관련 채용 정보