📌 형식을 맞추는 목적
코드 형식은 의사소통의 일환으로 중요한 부분 중에 하나이다. 오늘 작성한 코드는 변경될 가능성이 높다. 따라서 오늘 작성한 코드의 가독성은 앞으로 많은 영향을 미칠 수 있다. 즉 유지보수와 확장성에 영향을 미칠 수 있어 코드 형식에 대해 깊게 고민할 필요가 있다. 코드 형식을 생각하지 않고 마구잡이로 개발하다 보면 내가 지금 제대로 하고 있는지 의심만 가득 생길 수 있다.
📌 적절한 행 길이 유지하기
소스 코드 길이가 길수록 이해하기 힘들다. 아무래도 짧은 코드가 이해하기 쉽다. 대다수 신문 기사는 짧은 것을 볼 수 있다. 날짜, 이름, 사실 등 뒤죽박죽 섞은 기사를 읽는다면 금방 읽다가 포기할 것이다. 코드는 신문 기사와 같다. 간단하고 짧게 이루어져야 한다.
대부분의 코드는 왼쪽에서 오른쪽, 위에서 아래로 읽는다. 만약에 글을 읽을 때 문단과 문단에 행이 구분되어 있지 않으면 어떨까? 아무래도 가독성이 매우 떨어질 것이다. 뿐만 아니라 글쓴이가 무엇을 표현하고자 하는지 이해하기가 어려워질 수 있다. 따라서 코드도 빈 행으로 적절하게 구분하는 것이 좋다. 빈 행은 새로운 개념을 시작한다는 것을 시작적으로 표현하기 좋다. 빈 행이 없으면 눈의 초점이 흘려질 수도 있다.
빈 행이 개념을 분리하면 세로 밀집도는 연관성을 뜻한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓아야 한다. 아래 코드를 보면 한눈에(?) 변수가 2개 있고, 메서드가 1개가 있다는 것을 알 수 있다. 왜냐하면 밀접한 부분을 가까이 놓았기 때문이다.
public class User {
private String name;
private int age;
public void hello() {
System.out.println("안녕하세요!");
}
}
변수는 사용하는 위치에 최대한 가까이 위치해야 한다. 쉽게 찾을 수 있기 때문이다.
인스턴스 변수는 클래스 맨 처음에 선언한다. 여러 개의 인스턴스 변수가 있다면 변수 간에 거리를 두지 않아야 한다. C++에서는 인스턴스 변수를 클래스 마지막에 선언한다는 가위 규칙을 적용한다. 자바도 마지막에 선언하든 처음에 선언하든 상관없다. 가장 중요한 것은 많은 사람들이 따르고 있는 쪽을 택하는 것이 맞다고 생각한다.
종속 함수는 한 함수가 다른 함수를 호출하는 것을 말하는데 로직 순서를 따라 배치한다. 대부분 위에서 아래로 읽기 때문에 이렇게 배치해야 자연스럽게 읽히기 때문이다.
📌 가로 형식 맞추기
나는 IntelliJ를 사용하고 있는데 아래 그림에서 오른쪽을 보면 선이 그어져 있는 것을 볼 수 있다. 한 행의 가로길이도 고려해야 한다. 길이가 길어지면 로직이나 행을 적절하게 분리해야 한다. 그래야 읽기 쉬워진다.
가로로는 공백도 적절하게 사용해야 한다. 연산자를 강조하기 위해 앞뒤에 공백을 넣어주면 확실히 왼쪽, 오른쪽 요소가 분리된다. IDE에서 포맷팅 기능을 자주 활용하면 자동으로 정리해준다. 이 기능을 활용하다 보면 나도 모르게 공백을 넣어주는 버릇을 만들 수 있다.
들여 쓰기도 매우 중요하다고 생각한다. 주로 계층을 표현하기 위해 들여 쓰기를 사용한다. 만약에 들여 쓰기가 없다면 이것은 기계가 읽을 수 있는 코드와(?) 비슷해질 수 있다. if, for, while문, 함수에서 들여 쓰기를 생략할 수 있는데 책에선 이를 선호하지 않는다고 한다.
📌 팀 규칙
개발자마다 선호하는 규칙을 가지고 있다. 어떤 사람은 들여 쓰기를 2칸을 선호할 수 있고, 어떤 사람은 4칸을 선호할 수 있다. 하지만 팀에 속한다면 자신의 규칙은 팀 규칙에 따라야 한다. 제각각 선호하는 규칙을 사용하다 보면 하나의 소프트웨어는 일관성을 잃을 수 있기 때문이다.
'책 > CleanCode' 카테고리의 다른 글
✨ Clean Code 7장: 오류 처리 (0) | 2021.01.21 |
---|---|
✨ Clean Code 6장: 객체와 자료구조 (0) | 2021.01.20 |
✨ Clean Code 3장: 함수 (0) | 2020.12.15 |
✨ Clean Code 2장: 의미 있는 이름 (0) | 2020.11.23 |
✨ Clean Code 1장: 깨끗한 코드 (0) | 2020.11.20 |