[객체지향 생활체조 원칙] 규칙 1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다.
본문 바로가기
OOP

[객체지향 생활체조 원칙] 규칙 1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다.

by IYK2h 2022. 11. 5.
728x90

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

for 또는 while 반목문 안에 if문이 있으면 들여 쓰기가 두 단계가 된다.

정확히 한 가지 일을 하는 메서드들로 작업을 하면 코드가 달라지기 시작한다. 애플리케이션의 각 단위가 더 작아짐에 따라 재사용의 수준은 기하급수적으로 상승하기 시작한다.

인용 : https://developerfarm.wordpress.com/2012/01/26/object_calisthenics_2/

아래 구구단을 보자

public static void TimesTable(String[] args) {
    for (int i = 2; i < 10; i++) {
        System.out.println(i + "단을 출력 합니다.");

        for (int j = 1; j < 10; j++) {
            System.out.println(i + " x " + j + " = " + i * j);
        }
        System.out.println();
    }
}

이렇게 들여쓰기가 2번된 경우, 한 메서드에서 2가지 일을 하고 있을 가능성이 있다.

2~9단을 반복하는 for문에서 n단을 출력하는 함수로 뽑아낸다.

public static void TimesTable(String[] args) {
    for (int i = 2; i < 10; i++) {
        printNumTimes(i);
        System.out.println();
    }
}
private static void printNumTimes(int i) {
    for (int j = 1; j < 10; j++) {
        System.out.println(i + " x " + j + " = " + i * j);
    }
}

장점

이처럼 메서드 구조를 분리함으로써 한 단락은 하나의 일만 하도록 설계된다. 로직이 잘게 쪼개질수록 메서드간의 로직적 결합도는 낮아지고, 응집도는 높아지게 된다. 이러한 코드는 재사용성이 높다. 메서드명은 기능 기반으로 작성되어 가독성도 높다.

예외

메서드 분리, 가독성을 높여 유지보수를 쉽게 하기 위함이지 제한된것은 아니다.

순회도중 early return을 해야 하는 경우

private static void printNumTimes(int i) {
    for (int j = 1; j < 10; j++) {
          if( i == 5) return;
        System.out.println(i + " x " + j + " = " + i * j);
    }
}
728x90

댓글