ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Intellij] Google Java auto-formatting 적용
    Java & Kotlin 2022. 2. 7. 01:06
    반응형

    1) 서론

    여러 사람이 함께 코드를 작성할 때는 다양한 스타일의 코드가 작성됩니다. 같은 목적의 코드라도, 개개인의 스타일은 다를 수밖에 없는데요.

     

    만약 큰 회사 혹은 조직이라면 통일된 코드 스타일을 만들수도 있을 것입니다. 하지만 작은 조직에서는 체계적인 코딩 스타일을 정의하는 것이 쉽지 않을 것입니다. 통일된 코딩 스타일을 정의하는데 시간을 투자하는것 보다, 빠르게 개발해서 비즈니스에 반영하는 것이 우선이라는 이유도 있을 것 같은데요.

     

    그래서 이번에는 인텔리제이 구글 스타일 가이드를 이용해서, 완벽하지는 않지만 손쉽게 코딩 스타일을 통일시킬 수 있는 방법을 기록합니다.


    2) 구글 자바 스타일 가이드 적용 방법

    1. https://github.com/google/styleguide (구글 스타일 가이드 저장소)
    2. intellij-java-google-style.xml 다운로드
    3. intellij - preferences - code style - java
    4. schema - 톱니바퀴 - 다운로드한 파일 import


    3) 스타일 가이드 자동 적용

    기존에 스타일 가이드를 반영하려면, option + command + L 눌러서 직접 변경해야 합니다. 코드를 작성할 때 마다 단축기를 눌러서 변경하는 것이 좀 귀찮습니다. 미처 챙기지 못 한 코드가 commit 되는 경우도 빈번할 것 같습니다.

    3. 1) save시 자동으로 코드 변환

    1. Tools - Actions on save (저장 시 동작)
    2. Reformat code 체크
      • save 시 자동으로 코드의 형태를 변경합니다 (줄 바꿈, 괄호 등)
      • 해당 프로젝트가 버전관리 되고 있다면, 변경된 코드만 적용 가능합니다 (whole files --> changed lines)
    3. Optimize imports 체크
      • 사용되지 않는 import를 자동으로 삭제해줍니다.
    4. Rearrange, Code cleanup 등은 사용하지 않습니다.
      • 메서드 위치 변경, 삭제 등 사이드 이펙트 발생 가능성이 있습니다.

    3. 2) 인텔리제이에서 코드를 save하는 방법

    두 가지 방법이 있습니다.

    • ctrl + S 클릭해서 강제 저장
    • 자동 저장 기능 (기본 15초)
      • Appearance & Behavior --> System Settings
      • save files if the IDE is idel for 15 seconds --> 원하는 시간대로 변경

    4) 구글 자바 스타일 가이드

    구글은 다양한 언어에 대해 스타일 가이드를 작성해뒀는데요. 이번 글에서는 자바 언어에 대해서 알아보려고 합니다. 

     

    참고: https://google.github.io/styleguide/javaguide.html

     

    대략적인 목차와 몇개의 내용을 살펴보겠습니다.

    4. 1) 중괄호

    if, else, for, do, while에 한해서는 메서드 바디에 내용이 없거나, 한 줄만 존재하더라도 중괄호({})를 사용하도록 합니다.

     

    • 중괄호 없이 코드를 작성합니다.
    • 코드 save 시점에 자동으로 중괄호를 생성, 변환합니다.

    4. 2) Nonempty blocks: K & R style

    메서드 body에 내용이 있는 경우에는 K & R 스타일을 따른다고 합니다.

    • 중괄호 시작은 라인을 바꾸지 않습니다.
    • 중괄호 시작 후 라인을 변경합니다.
    • 중괄호 마치기 전 라인을 변경합니다.
    • 구문이 끝나는 경우 중괄호 마친 후 라인 변경합니다.
      • if - else / try - catch 등의 경우에는 끝나지 않기 때문에, 라인 변경하지 않습니다.

     

    4. 3) 100 column 제한

    라인의 column을 100글자(character)로 제한한다고 합니다.

     

    구글이 설명하는 글자는 언어와 관계없이 모든 Unicode의 글자 수 자체를 센다고 합니다. 다만 import, package명 등은 100글자 제한하지 않습니다.

    • 첫 번째 문자열은 100글자가 넘었으므로, 줄 바꿈 됩니다.
    • 두 번째 문자열은 100글자 넘지 않았으므로, 유지합니다.

    5) 커스텀을 해보자

    구글 스타일 가이드의 chained method 기본 설정은 아래와 같습니다.

    • 만약에 길다면 줄 바꿈(wrap) 합니다.
    • 긴 것에 포함되는 메서드만 줄 바꿈 합니다.

     

    아래와 같은 빌더 패턴은 짧기 때문에 그대로 유지됩니다.

     

    개인적으로 chained method는 줄 바꿈 하는 것을 선호하는데요. 기존의 구글 스타일에서 변경해보겠습니다.

     

    • 항상 줄 바꿈(wrap) 합니다.
    • 여러 줄일 때는 일렬로 정렬합니다.

     

    이 외에도 다양한 설정이 존재합니다.


    6) 결론

    구글이라는 따라 할 만한 레퍼런스와 인텔리제이의 자동 변환 기능을 활용한다면, 조금은 간단하게 코딩 스타일을 일관되게 관리할 수 있다고 생각합니다. 특히 약간의 커스텀을 추가한다면, 구글 스타일의 기본 바탕으로 각 조직에 맞는 스타일을 적용할 수도 있을 것입니다.

     

    혹은 혼자서 작성을 하더라도, 귀찮은 줄 바꿈 등을 '저장' 기능 하나로 편하게 사용할 수도 있을 것 같습니다.

     

    다만 여전히 아쉬운 점이 존재합니다.

     

    해당 설정은 개개인의 인텔리제이에 직접 해줘야 합니다. 만약 누군가 설정하지 않거나, 잘 못 설정한다면 마찬가지로 일관성을 유지하기 힘들지 않을까 생각합니다. 또한 메서드명 같은 더 디테일한 부분은 강제하기 어렵습니다.

     

    최종적으로는 github commit 전 사전 검사를 해주는 pre-commit 같은 것을 2차 보안의 역할로 할 수 있을 것 같다는 생각을 합니다.


    7) 참고 문헌

    https://www.jetbrains.com/help/idea/reformat-and-rearrange-code.html#reformat-on-save

    https://google.github.io/styleguide/javaguide.html#s4-formatting

    반응형

    댓글

Designed by Tistory.