우리가 프로그래밍의 로직을 만들때 대부분 로직의 첫부분은 로직이 올바르게 작동하기 위한 사전 조건들을 체크하게됩니다.
( 변수의 선언 및 할당, 파라미터의 유효성, 참조하는 객체의 올바른 생성 등등.. )

사전 조건들을 체크하기 위한 여러 방법들이 있지만 간단하고 보편적으로 사용되는 방법은 if.. else.. 조건문이나 switch case 조건문등을 활용해서 처리됩니다.

다만 사전 조건들이 많은 경우에 if..else 를 사용하다보면 코드의 중첩단계가 깊어져
가독성이 떨어지고 점차 추후 유지보수에 큰 걸림돌이 될 가능성이 있습니다.

물론 if..else 로 처리해야하는 경우도 있겠지만, 굳이 if..else 문을 중첩하여 사용할 필요가 없다면. guard clause로 처리하는것이 좋습니다.

guard clause 란?

사전 조건이 거짓이라면 ( 다음 단계로 진행하기 위한 올바른 실행 조건이 아니라면 ) 예외처리를 하여 더이상 다음 단계가 실행되지 않도록 하는것입니다.

예를 들어보겠습니다.

<?php
// if.. else
function doUserCoinMinus() {
    if ($user != null) {
        if ($user->grant()) {
            if ($user->coin >= 1000) {
                $user->coin = $user->coin - 1000;
                return true;
            } else {
                throw new Exception ('보유한 적립금이 부족합니다.');
            }
        } else {
            throw new Exception ('해당 권한이 없습니다.');
        }
    } else {
        throw new Exception ('로그인이 필요합니다.');
    }
}

// guard
function doUserCoinMinus() {
    if ($user == null) {
        throw new Exception ('로그인이 필요합니다.');
    }
    if (!$user->grant()) {
        throw new Exception ('해당 권한이 없습니다.');
    }
    if ($user->coin < 1000) {
        throw new Exception ('보유한 적립금이 부족합니다.');
    }

    $user->coin = $user->coin - 1000;
    return true;
}

간단한 코드이지만 if..else 문 중첩과 guard clause를 사용했을 경우 가독성이나
추후 유지보수의 용이함을 느끼실 수 있을것입니다.

꼭 if..else 문읠 중첩해야하는 코드가 아니라면 guard clause을 사용해서
사전 조건들을 체크하고 유지 보수에 용이한 코드를 만들어보는건 어떨까요?

감사합니다. 😄