본문 바로가기
카테고리 없음

[Java] 깔끔한 조건문(if) 작성법 - Bubble Style vs Gateway Style

by 꼬마낙타 2020. 9. 3.
반응형

코딩을 하다보면 특정 로직에 대한 조건들이 달라붙으면서 조건문이 굉장히 지저분하고 가독성떨어지게 만들어지는 경험을 하게 됩니다. 조건문(분기문)을 조금만 다른 관점으로 접근하면 가독성일 훼손하지 않으면서도 동일한 로직을 구현할 수 있습니다.

조건문과 관련된 다음과 같은 글을 발견하게 되었습니다.

 

Unconditionally: Refactoring Nested If-Statements for Cleaner Code • WPShout

There's a lot to say about writing clean code: Earth's smartest people have spent a hundred or so years discussing the topic, and it doesn't look like

wpshout.com

 

condition1 조건이 붙어 있던 조건문에 condition2, condition3가 추가되었다고 가정해보겠습니다. 그러면 아마도 다음과 같은 코드가 만들어질겁니다.

if (condition1) { 
    if (condition2) { 
        if (condition3) { 
            return "All condition is true"; 
        } 
        return "Condition3 is false"; 
    }
    return "Condition2 is false"; 
}
return "Condition1 is false";

이런 형태의 코드를 '버블 스타일(Bubble Style)' 코드라고 합니다. 겹겹이 둘러쌓인 조건문의 형상이 마치 거품같기 때문입니다. 중요한건 이런 스타일의 코드는 정확한 로직을 한눈에 앞아보기 힘들다는 것입니다.

같은 동작을 하는 이 로직을 다른 스타일로 구현해보겠습니다.

if (!condition1) { 
  return "Condition1 is false"; 
} 

if (!condition2) { 
  return "Condition2 is false"; 
} 

if (!condition3) { 
  return "Condition3 is false";
} 

return "All condition is true";

 

버블 스타일의 코드가 대부분은 값의 유무 확인과 null 체크, 필수값 체크 등으로 구성되어 있습니다. 이런 경우 조건을 반대로 생각해서 조건이 만족되지 않으면 통과시키지 않는 스타일로 코드를 작성할 수 있습니다.

마치 문지기가 다음 로직으로 통과시키지 않는 것처럼 코드를 작성했다해서 '게이트웨이 (Gateway)' 스타일이라고 합니다.

코드에서 인덴트 깊이는 최대한 줄이는게 좋다고 하는데요. 만약 버블 스타일로 작성되어 있는 코드가 있다면 게이트웨이 스타일로 변경해보는 것도 좋은 리팩토링 시도인 것 같습니다.

반응형

댓글