본문 바로가기
Server Etc.

Clean Code, Early return 얼리 리턴 사용 이유와 활용 방법

by Super Santj 2023. 7. 26.

Early Return 빠른 반환..?

회사에서 Batch Job 을 개발해야하는 일이 생겼는데, 의도치 않게 반복문이 여러번 등장하고 반복문 안에서 continue 가 여러차례 사용해야하는 일이 생기게 되었다.

  1. 기존 코드
//
List<UserModel> users = userRepository.select();
for(int i = 0; i < loopCount; i++){
    UserModel user = users.get(i);
    String userId = user.getId();
    PostModel post = postRepository.select(userId);
    if(!post){
        continue;
    }
    ...
    if(sampleCondition){
        continue;
    }
    ...
}
//

위와 같은 형태로 코드가 작성이 되었을때 조건이 너무 많고, 로직을 이해하기가 까다로울 수 있어 Early Return 형태의 함수로 작성하는게 어떻겠냐는 선임 개발자 분의 피드백이 있었다.

반드시 그래야 하는것도 아니고, 무조건적인 부분은 아니나 권장하는 방법이라며 조심스럽게 말씀을 주셨고, 당시의 나는 early return 이 대체 뭐지? 라는 생각으로 찾아보게 되었다.

추가로 java 에 foreach 형태의 함수도 제공하고 있다는 의견도 주셔서 적극 반영을 하게 되었고, early return 을 적용한 코드는 아래와 같다.

  1. 개선 코드
//
private void checkUserCondition(UserModel user){
    String userId = user.getId();
    PostModel post = postRepository.select(userId);
    if(!post){
        return;
    }
    ...
    if(sampleCondition){
        return;
    }
    ...
}

// 반복문 안에서 continue의 조건을 확인 해가며, 로직을 전부 이해 하지 않아도 된다.
List<UserModel> users = userRepository.select();
for(UserModel user : users){
    checkUserCondition(user);
}
//

차이점

  1. 반복문 내부에 여러 조건이 있는 로직을 기재하게 된다면 다른 작업자가 해당 코드를 확인할때 내부 로직을 이해하기 번거롭거나 덜 직관적일 수 있다.
  2. 반복문이 있는 함수는 반복문만 하도록 단일 정체성을 갖게 하는것이 다음 작업자의 이해를 도울 수 있다.
  3. 비즈니스 로직을 별도로 두어, 반복문과 연관이 있는 continue 를 생각할 필요 없이 validation 의 역할을 별도의 함수 내부에 갖추는게 이해하거나 재사용할때 도움이 될 가능성이 높아 보인다.
  4. 결국 가독성과 재사용성, 그리고 함수명을 이용한 직관적인 의미 전파를 위해 사용을 하게 되는 것 같다.

'Server Etc.' 카테고리의 다른 글

nginx 기본 명령어 및 버전 확인  (0) 2023.01.07

댓글