규칙 1 : 한 메서드에 오직 한 단계의 들여쓰기만 한다. (Only one level of indentation in a method)
BEFORE 기존 코드
void saveDiary() {
if (diary == null) {
if (locationManager?.authorizationStatus == LocationAuthorizationStatus.authorizedAlways ||
locationManager?.authorizationStatus == LocationAuthorizationStatus.authorizedWhenInUse) {
setWeatherInfo();
} else {
createDiary();
}
} else {
editDiary();
}
}
위 saveDiary
method는 한 번에 세 가지 역할을 수행합니다:
기존 일기의 존재 여부를 확인합니다.
기존 일기가 없는 경우, 위치 권한을 확인하여 날씨 정보를 설정하거나 새 일기를 생성합니다.
기존 일기가 있는 경우, 해당 일기를 수정합니다.
즉, 위 method는 코드 내에서 두 번의 조건문 중첩(2단계의 들여쓰기)하며, 여러 작업(일기 저장, 권한 확인, 날씨 정보 설정 등)을 처리하고 있습니다.
AFTER 리팩토링 코드
// Some code
void saveDiary() {
if (_isDiaryNew()) {
_handleNewDiary();
} else {
editDiary();
}
}
bool _isDiaryNew() => diary == null;
void _handleNewDiary() {
if (_hasLocationPermission()) {
setWeatherInfo();
} else {
createDiary();
}
}
bool _hasLocationPermission() {
final status = locationManager?.authorizationStatus;
return status == LocationAuthorizationStatus.authorizedAlways ||
status == LocationAuthorizationStatus.authorizedWhenInUse;
}
이 원칙은 단순히 들여쓰기를 줄이는 것이 목적이 아니라, 메서드를 분리하여 각각이 단일한 책임을 가지도록 설계하는 데 중점을 둡니다.
작업 분리의 이점: 작업을 세분화하면 모듈 간의 결합도가 낮아지고, 각 모듈의 응집도가 높아집니다.
결과: 이렇게 구성된 코드는 재사용성이 높아지고, 수정이나 디버깅이 훨씬 용이해집니다. 따라서 메서드는 하나의 주요 역할만 수행하도록 설계하는 것이 이상적이며, 이를 통해 유지보수성과 가독성을 크게 개선할 수 있습니다.
Last updated