ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • IntelliJ IDEA: 잘못된 의존을 찾기 위한 옵션(w/layered architecture)
    IntelliJ IDEA 2022. 9. 30. 21:01

    팀프로젝트를 진행하다가 갑자기 포스팅 아이디어가 떠올라서 급히 적어보는 글입니다.

     

    위에 말한 팀프로젝트에서 다음주에 코드리뷰를 진행하기로 했어요. 그래서 피드백을 드릴만한 부분을 이것저것 준비하고 있는데요(제 코가 석자이지만 팀장이기 때문에...🥲). 그러려면 당연하게도 코드를 읽어야겠죠.

    코드를 많이, 계속 읽다보니까 코드리뷰를 위한 요령이 조금 생겨서 공유해보려고 합니다.

     

    💁‍♂️알려드리려는 옵션

    인텔리제이 설정창 >>

    왼쪽 메뉴에서 'Editor' 클릭 >>

    오른쪽 패널에서 'Code Style' 클릭 >>

    왼쪽 메뉴를 보면 현재 토글메뉴 'Code Style'에 커서가 가있을 건데, 토글을 눌러서 펼쳐준다 >>

    토글 메뉴에서 'Java' 선택 >>

    'Imports' 탭 선택 >>

    오른쪽 패널 아래쪽에 있는 Class count to use import with '*'와 Names count to use static import with '*'의 값을 충분히 크게 늘려주기(예: 100)

     

     

    🤔어떤 옵션이냐면

    인텔리제이는 한 패키지에 대한 import 문이 많아지다보면 *로 바꿔주는데요. 이것을 자동으로 바꾸지 않도록 하는 옵션입니다. 예를 들어 Arrays, List, Map과 같은 객체들을 import 하다보면 `import java.util.*`이라고 바꿔주는 옵션인거죠.

     

     

    😤그걸 왜 꺼요

    '바꾸면 코드가 깔끔해지는데 왜 옵션을 끄래?!' 라고 말할 수도 있겠지만, 오늘의 이야기의 주제는 코드 리뷰였으니까요.

     

    코드가 어떻게 동작하는지 보기 위해서 `public class SomeClass { ... `부터 볼 수도 있겠죠. 코드 패턴이라든지 사용하지 말아야 할 타입, 변수명 같은 것들을 확인할 수도 있을 거에요.

     

    하지만 해당 클래스에서 어떤 기능과 동작을 하는지 파악하기 위해서는 사실 import문 부분만 봐도 대강 알 수 있습니다!

    패키지 디자인에 전혀 신경을 쓰지 않았다면 모를까(예: 모든 클래스를 한 패키지에 다 때려넣기...), 최소한 계층형 구조를 지키려고 시도라도 해봤다면 import문을 살펴보는 것은 해당 클래스를 파악하기 매우 유용해요.

     

    예를 들면 이런 것들입니다.

     - Service 클래스에서 Controller를 참조하고 있지는 않은지? (계층 간 의존방향 역주행)

     - 전혀 다른 도메인의 Repository를 마구잡이로 들여오고 있지는 않은지? (도메인 결합도 상승)

     - Entity 클래스에 `import lombok.Setter;` (엔티티 클래스의 상태에 관심을 기울였는지)

     - 예를 들어 Stream과 같은 클래스를 사용중인데, 해당 클래스에서 Stream의 기능을 사용할 일이 없다. (비효율적인 방식의 문제 접근이 있었는지 추정해볼 수 있다, 때로는 오버 테크를 의미하기도 한다)

     - 안 쓰는 import를 제거하지 않고 내버려두는지? (방 청소 좀 해라)

     

     

    🤗마무리

    좋은 품질의 코드란 뭘까 궁금하기도 하고 생각을 자주 하는데요.

    스스로의 코드를 보면서도 만족스러운 품질의 코드라고 생각하진 못하지만, 그래도 꾸준히 노력해야 아주 조금씩, 눈에 띄지 않게 조금씩 발전해나갈 수 있는 부분이라고 생각해요.

     

    아참, 참고로 위의 옵션을 적용하더라도 이미 *로 표시된 import문은 그대로 두기 때문에 처음에 프로젝트 컨벤션을 정할 때에 합의해두어야 쉽게 적용할 수 있겠습니다.

    저는 이번에 코드리뷰를 준비하면서 이 옵션을 발견했기 때문에 일일히 import문을 지워주고 있어요😅

    하지만 다음 프로젝트 때에는 처음부터 적용해볼 의향도 있습니다! 물론 팀원들이 반겨야겠지만요😃

     

    제가 위에 설명드린 예시 외에도 많은 '힌트'들을 얻으실 수 있을 거란 생각이 들어요. 직접 사용해보시고 주변에 공유하는 것도 좋겠죠!

    댓글

Designed by Tistory.