자바 구글 코드 컨벤션 IntelliJ 적용하는 방법

송진영·2022년 11월 9일
0

Springboot

목록 보기
5/9
post-custom-banner

자바 구글 코드 컨벤션 IntelliJ 적용

우선 intellij-java-google-style.xml 파일을 다운받는다.

IntelliJ File -> Settings -> Editor -> Code Style -> Import Scheme -> IntelliJ IDEA code style XML를 통해서 다운 받은 xml 파일을 적용시켜 준다.

Scheme이 GoogleStyle로 바뀐 것을 확인할 수 있다. 구글은 2로 되어 있지만 요즘은 4로 쓴다고 해서 4로 바꿔줬다.
Code Style -> Java에서 세세한 설정을 할 수 있다.

이렇게 적용시킨 후에 Ctrl + Alt + L 단축키를 사용하면 구글 코드 컨벤션 코드로 정렬된다.

구글 코드 컨벤션

1. 용어

  • 클래스는 class, Enum, Interface, Annotation을 총칭한다.
  • 멤버는 inner class, field, method, constructor을 총칭한다.
  • 주석은 구현주석(일반주석)을 의미하며 문서화 주석은 7. Java Doc에서 따로 다룬다.

2. 소스 파일

  • 파일 이름은 최상위 클래스의 대소문자 구분 이름 + .java 확장자로 한다.
  • 인코딩은 UTF-8로 한다.
  • 줄바꿈 문자(\n) 제외 스페이스(\0x20)가 유일한 공백 문자이며 탭(\t)을 들여쓰기에 사용하지 않는다. 즉, 들여쓰기는 스페이스바로 한다.
    -> IDE에서 탭을 누르면 자동으롤 스페이스바 n개로 바꿔준다.
  • 이스케이프 시퀀스가 있는 모든 문자는 유니코드가 아닌 이스케이프 시퀀스를 사용한다.(\n, \b, \t 등)
  • Non-ASCII 문자의 경우 실제 유니코드 문자 또는 유니코드 이스케이프가 사용된다.
    프로그램이 ASCII 문자를 처리하지 못할 수 있다는 생각에 코드 가독성을 낮추지 마라.

3. 소스 파일 구조

하나의 소스 파일은 아래 순서대로 작성한다. 또 각 섹션은 하나의 빈 줄로 구분한다.

  • (있다면) 라이센스, 저작권 정보
  • package 구문
    • 아무리 길어도 줄바꿈하지 않는다.
  • import 구문
    • 아무리 길어도 줄바꿈하지 않는다.
    • 와일드카드(*)를 사용하지 않는다.
    • static import -> non-static import 순서대로 기재한다.
    • 만약 한 섹션 내에 static과 non-static import가 모두 있는 경우 섹션을 나눈다.
    • 정적 중첩 클래스는 static import로 가져오지 않는다.
  • 하나의 최상위 클래스
    • 클래스의 멤버와 initializer의 순서는 따로 없지만, 논리적인 순서를 따라야 한다. 새 메서드를 끝에 추가하는 것은 시간순이지 논리적인 순서가 아니다.
    • 그러나 같은 동일한 이름의 메서드는 연속적으로 작성한다. 여러 생성자도 마찬가지다.

4. 포맷

중괄호

  • 구현부가 없거나 한 줄의 구문을 포함해도 중괄호를 사용한다.
  • 중괄호는 K&R 스타일을 따른다.
  • 여는 중괄호 뒤와 닫는 중괄호 앞쪽을 줄바꿈한다. 닫는 중괄호 뒤쪽은 구문이 끝나거나 메소드/생성자/이름 있는 클래스의 내용이 끝났을 때만 줄바꿈한다.
  • 빈 블록은 줄바꿈 하지 않고 {}로 사용할 수 있다. 그러나 multi-block(if/else, try/catch/finally)은 할 수 없다.
return () -> {
  while(condition()) {
      method();   //한 줄이어도 중괄호를 사용한다.
  }
}

return () -> {} //빈 블록은 줄바꿈하지 않아도 된다.

return new MyClass() {
	@Override public void method() {
		if(condition()) { //여는 중괄호 뒤쪽을 줄바꿈함
			try {
				somthing();
			} catch (Exception e) {} //잘못된 케이스. 멀티 블록은 {} 로 사용할 수 없다.
		} else if (otherCondition()) { //닫는 줄바꿈 뒤쪽은 구문이 끝나지 않아 줄바꿈하지 않음.
			somethingElse();kfull-width 문자
		} else {
			lastThing();
	}
}; //세미콜론은 줄바꿈하지 않는다.

들여쓰기와 줄바꿈

  • 들여쓰기는 스페이스 2칸씩 늘어난다. -> 대부분 4칸으로 씀
  • 한 줄에는 하나의 명령문만 사용하고 다른 명령문은 줄바꿈한다.
  • 한 줄은 100 문자가 넘어가면 줄바꿈 한다.
    • 문자는 반각문자(1btyes 유니코드)를 말한다. 만약 full-width 문자(2btyes 차지하는 전각문자)를 사용한다면 규칙보다 일찍 개행하는 게 좋다.
    • 이 제한을 준수할 수 업석나(JavaDoc의 긴 URL, 긴 JSNI 메소드 등) package, import문 주석으로 작성한 쉘 스크립트에 복사할 수 있는 커맨드 라인은 예외다.
  • 코드의 길이가 페이지를 넘어갈 때 줄바꿈 하는 것을 Line-wrapping이라고 한다. 공식은 없으므로 상황에 따라 적절하게 사용한다.
    • 메서드 혹은 지역변수로 추출하면 줄바꿈 없이 문제를 해결할 수 있다.
    • 비대면 연산자와 연산자와 유사한 기호(., ::, <T extends Foo & Bar>, catch(Foo Exception e) )는 기호 앞에서 줄바꿈한다.
    • 대입 연산자는 일반적으로 기호 뒤에서 줄바꿈하지만 어느 쪽이든 허용한다. forEch 문의 대입 연산자와 같은 역할을 하는 콜론( : )에도 적용한다.
      -메서드 또는 생성자의 이름은 뒤에 오는 여는 괄호 ( ( )와 붙여 사용한다.(줄바꿈, 띄어쓰기 하지 않는다.)
    • 쉼표( , )는 그 앞에 오는 토큰과 붙여 사용한다.(줄바꿈, 띄어쓰기 하지 않는다.)
    • A line is never broken adjacent to the arrow in a lambda, except that a break come immediately after th arrow if the body lambda consists of a single unbraced expression.
    • 줄바꿈의 목적은 코드를 명확하게 하는 것이다.
    • Line-wrapping 된 문장은 4칸 이상 띄워야 한다.(2번의 들여쓰기) 여러 문장이 연속해서 내려오는 경우 첫 번째 문장과 동일한 들여쓰기를 유지한다.

참고

코딩하는 세상의 족제비

profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.
post-custom-banner

0개의 댓글