2014년 4월 6일 일요일

구글 자바 코딩 규약 업데이트

지난 3월 21일 구글에서 자바 코딩규약이 업데이트 되었다.

오라클에서 발표한 자바 코딩 규약이 널리 사용되고 있기는 하지만 너무 내용이 방대하고 예외를 적용할 수 있는 범위가 넓어 대부분의 기업이나 프로젝트에서는 이를 바탕으로 자신만의 룰을 만들어 사용하는 경우가 많다.

아직 코딩규약을 가지고 있지 않거나 기존 코딩규약에 대해 만족하지 못하고 있다면 구글의 코딩 규약을 참조하는것이 많은 도움이 될 것이다.

Google Java Style


이 규약은 강제력을 가진 룰 로서 구글 전체가 따르도록 되어 있어 아마도 룰을 따르지 않은 코드는 Checkstyle과 같은 자동화된 정적 코드 체커를 통해 에러로서 취급될 것이다.

이클립스를 사용하고 있다면 코드 포메터 임포트하여 편리하게 구글 코딩 스타일을 사용 할 수 있다.

Eclipse용 Google 스타일 코드 포메터


잘못된 네이밍과 관련해서 고민하지 말자.
이클립스를 포함해 대부분의 IDE는
리네임과 같은 편리한 리팩토링 기능을
기본적으로 지원한다.

이 규약은 여섯가지 영역으로 구성되어 있으며 각각의영역에서 다루는 내용은 다음과 같다.

  • 소스코드 기초 - 파일 네이밍, 파일 인코딩, 특수문자, Non-Ascii 문자
  • 소스코드 구조 -  저작권표시, 패키지 설명, 임포트 설명, 클래스 선언
  • 소스 포멧 - 괄호, 인덴트, 서술식, 줄당 문자수, 스페이스, 줄바꿈, 특정구문(Enum, 변수선언, 배열, 스위치문, 어노테이션, 커맨트, 변환자, 숫자)
  • 네이밍 - 패키지, 클래스, 매소드, 상수, 비상수, 파라메터, 지역변수, 타입변수, 대소문자사용
  • 프로그래밍 방법 - Override어노테이션, 예외처리, 정적 맴버변수,  종료자
  • Javadoc - 포멧, 요약단편, Javadoc이 필요한곳


몇가지 특이한 점을 꼽아보자면 다음과 같다.

  • 와일드 카드 임포트 사용 금지 - 이클립스 보급 이후로는 사실상 와일드카드 임포트는 찾아보기 어렵게 되었다.
  • 2스페이스 들여쓰기- 들여쓰기에 있어서 2스페이스냐 4스페이스냐는 프로그래밍 역사상 가장 오래된 논란거리중 하나인데, 어쨌든 구글은 2스페이스 인덴트를 택했다. 모니터가 크면 별 상관이 없지만 노트북으로 작업을 하는경우, 들여쓰기에 의해 코드가 한줄에 안보이게 된다면 은근히 짜증이 난다.
  • 줄당 문자수 - 80 또는 100 문자. 80문자까지 제약하는것은 역시 노트북으로 작업하는 이가 많은 구글의 문화적 특성인 듯 하다.
  • C스타일 배열 선언 사용 금지 - String[] args ○ , String args[] X
  • 스위치문 사용시엔 반드시 default구를 정의할것
  • 지시자의 표기는 다음과 같은 자바언어 사양상의 등장 순서를 지킨다
public protected private abstract static final transient volatile synchronized native strictfp
구글에서는 다른 언어들에 대해서도 코딩 스타일 표준을 가지고 있다.