객체지향 생활 체조 - 규칙 1: 메서드당 들여쓰기 한 번

Photo by Nick Fewings on Unsplash

한 메서드에 오직 한 단계의 들여쓰기만 한다.

이 규칙이 가지는 의미

이 규칙은 언뜻 보기에는 들여쓰기(indent)에 초점을 두고 있는 것처럼 보입니다. 실제로 내용 자체도 "들여쓰기"의 단계를 제한한다고 정의하고 있습니다. 그렇지만 이 규칙을 적용하다 보면 자연스럽게 만나는 핵심은 "하나의 단락(block)이 한 가지의 일"을 하려고 노력했느냐입니다. 반대로 말하면 들여쓰기가 한번 이상 적용된 단락 즉 중첩된 제어 구조가 있다면 이 단락은 한 가지 이상의 일을 하고 있음을 증명하는 셈이 되어 버립니다. 그렇기 때문에 "메서드당 들여쓰기 한 번"이라는 규칙은 메서드가 가지는 구문 중 한 단락에서는 한 가지의 일만 수행하게 만듦으로써 메서드의 내부의 구조를 평이하게 만드는 효과를 만들어냅니다. 실제로 이 규칙을 적용한 코드들은 이전에 작성된 코드보다 구조 자체가 평이하게 되어 있어 읽기도 쉽고 문제가 발생해도 어디서 문제가 발생했는지 찾기가 쉬워집니다.

예제 코드

적용 전

public class Table {

    ...
    
    public String createView() {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                buffer.append(data[i][j]);
            }
            buffer.append("\n");
        }
        return buffer.toString();
    }
}

적용 후

public class Table {

    ...

    public String createView() {
        StringBuffer buffer = new StringBuffer();
        addRows(buffer);
        return buffer.toString();
    }
    
    private void addRows(StringBuffer buffer) {
        for (int row = 0; row < 10; row++) {
            addColumns(buffer, row);
        }
    }
    
    private void addColumns(StringBuffer buffer, int row) {
        for (int column = 0; column < 10; column++) {
            buffer.append(data[row][column]);
        }
        buffer.append("\n");
    }
}

정리하기

예제 코드에 규칙 적용 전과 후를 보면 "메서드당 들여쓰기 한 번" 규칙을 적용함으로써 중첩 제어문을 메서드로 분리하게 됩니다. 결과적으로 바뀌게 된 메서드 구조는 한 단락은 하나의 일만 하고 동시에 구조가 평이해졌다는 사실을 알 수 있습니다. 또 메서드로 분리되다 보니 메서드 이름을 통해 코드를 이해하기도 전보다 쉬워졌습니다.

 

소프트웍스 앤솔러지 - 객체지향 생활 체조 학습하기
반응형

댓글

Designed by JB FACTORY