만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/backend&devOps

[intelliJ] Google Style guide intelliJ 적용법

D36choi 2021. 6. 14. 16:30
728x90

코드 스타일

모든 개발자들이 진행하는 프로젝트들은 각자의 코드 스타일이 존재한다.

변수명은 camelCase 로 해야한다던지... PascalCase 로 해야한다던지...

들여쓰기 간격은 4회여야한다. 2회여야한다 등등 여러 사람이 협업하는 프로젝트에서

코드의 스타일 규칙은 중요하다.

 

이런 규칙을 만드는 사람이 일일이 정하긴 힘드니 주로 사용하는 것이 바로

'Google Style Guide' 이다. (https://github.com/google/styleguide)

 

구글이 정해놓은 스타일 가이드라인대로 개발을 하면 여러 명이 하나의 프로젝트를 개발하더라도 일관성있고 가시성이 좋은 코드의 모습이 나올 수 있을 거다. 내로라하는 똑똑한 분들이 정해놓은 규칙이니까.

 

적용법

그럼 이런 코드 스타일의 규약들을 모두 외울 필요없이 IDE의 도움을 받아 적용할 수 있는 방법은 없을까.

intelliJ 에서는 Code Style을 xml 형식으로 저장해놓으면 이 스타일대로 코드가 작성될 수 있게 도와준다.

 

1. 코드 스타일이 정의된 xml 파일을 다운 받는다.

https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml

 

google/styleguide

Style guides for Google-originated open-source projects - google/styleguide

github.com

2. intelliJ 를 열고 Preference를 연다. (맥 기준 단축키: cmd + ,)

3. search 에 code style 을 검색한다.

4. Scheme 옆 톱니바퀴 버튼에서 Import Scheme -> IntelliJ IDEA code style XML 선택

 

5. 다운 받은 XML 파일을 선택한다. 그러면 Scheme 에 Google Style 이 추가되었을 것이다.

6. 해당 Scheme 을 선택하고 우측 하단 Apply, OK 를 누르면 내 프로젝트의 스타일이 구글 스타일 대로 변경된다.

 

 

스타일을 비교해보자

default (intellij)

public class Foo {
    public int[] X = new int[]{1, 3, 5, 7, 9, 11};

    public void foo(boolean a, int x, int y, int z) {
        label1:
        do {
            try {
                if (x > 0) {
                    int someVariable = a ? x : y;
                    int anotherVariable = a ? x : y;
                } else if (x < 0) {
                    int someVariable = (y + z);
                    someVariable = x = x + y;
                } else {
                    label2:
                    for (int i = 0; i < 5; i++) {
                        doSomething(i);
                    }
                }
                switch (a) {
                    case 0:
                        doCase0();
                        break;
                    default:
                        doDefault();
                }
            } catch (Exception e) {
                processException(e.getMessage(), x + y, z, a);
            } finally {
                processFinally();
            }
        }
        while (true);

        if (2 < 3) {
            return;
        }
        if (3 < 4) {
            return;
        }
        do {
            x++;
        }
        while (x < 10000);
        while (x < 50000) {
            x++;
        }
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
        }
    }

    private class InnerClass implements I1, I2 {
        public void bar() throws E1, E2 {
        }
    }
}

google style

public class Foo {

  public int[] X = new int[]{1, 3, 5, 7, 9, 11};

  public void foo(boolean a, int x, int y, int z) {
    label1:
    do {
      try {
        if (x > 0) {
          int someVariable = a ? x : y;
          int anotherVariable = a ? x : y;
        } else if (x < 0) {
          int someVariable = (y + z);
          someVariable = x = x + y;
        } else {
          label2:
          for (int i = 0; i < 5; i++) {
            doSomething(i);
          }
        }
        switch (a) {
          case 0:
            doCase0();
            break;
          default:
            doDefault();
        }
      } catch (Exception e) {
        processException(e.getMessage(), x + y, z, a);
      } finally {
        processFinally();
      }
    }
    while (true);

    if (2 < 3) {
      return;
    }
    if (3 < 4) {
      return;
    }
    do {
      x++;
    }
    while (x < 10000);
    while (x < 50000) {
      x++;
    }
    for (int i = 0; i < 5; i++) {
      System.out.println(i);
    }
  }

  private class InnerClass implements I1, I2 {

    public void bar() throws E1, E2 {
    }
  }
}

가장 큰 차이는 클래스 시작 줄과 변수 사이 개행이 존재하는지 여부와 tap size 크기인 것으로 보인다.

tap 의 간격이 default = 4, google style 의 경우 2 이기 때문에 코드의 깊이가 깊어질수록 구글 기준이 더보기 편한걸 알 수 있다.

 

 

이렇게 간단히 구글에서 제공하는 google style guide 를 XML 형식으로 intelliJ 에 적용해보았다.