요약

Java Language Specification에서 권장하는 키워드 정렬 순서는 다음과 같다.

  1. Annotations
  2. public
  3. protected
  4. private
  5. abstract
  6. static
  7. final
  8. transient
  9. volatile
  10. synchronized
  11. native
  12. strictfp

checkstyle의 수식어 순서 경고

다음과 같은 메소드를 작성했다고 하자.

//                 ↓ 여기에 경고
final synchronized protected void hello() {
  System.out.println("Hello, World!");
}

그리고 checkstyle을 돌려보면 다음과 같이 protected가 JLS에서 권장하는 modifier 순서에 맞지 않는다는 경고를 띄운다. (google_checks 사용)

'protected' modifier out of order with the JLS suggestions.

JLS를 찾아보자

JLS는 "Java Language Specification"을 의미한다. 여기에서 봐야 하는 곳은 8.1.1, 8.3.1, 8.4.3 절이다.

8.1.1. Class Modifiers

A class declaration may include class modifiers.

ClassModifier:
  (one of)
  Annotation public protected private
  abstract static final strictfp

8.3.1. Field Modifiers

FieldModifier:
  (one of)
  Annotation public protected private
  static final transient volatile

8.4.3. Method Modifiers

MethodModifier:
  (one of)
  Annotation public protected private
  abstract static final synchronized native strictfp

모두 조합해보면 다음과 같이 정리할 수 있다.

Annotations, public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp