복잡한뇌구조마냥

[JAVA] Effective Java - 일반적으로 통용되는 명명 규칙을 따르라 (68) 본문

BE/JAVA

[JAVA] Effective Java - 일반적으로 통용되는 명명 규칙을 따르라 (68)

지금해냥 2025. 9. 1. 03:27

요약

  • 자바 명명 규칙은 **철자 규칙(Spelling)**과 문법 규칙(Grammatical) 두 가지로 나뉜다.
  • 특별한 이유가 없다면 반드시 지켜야 하며, 규칙을 어기면 가독성·유지보수성이 떨어지고 버그가 생기기 쉽다.
  • 철자 규칙은 강제적, 문법 규칙은 유연하되 널리 쓰이는 전통을 존중해야 한다.
  • 가장 중요한 원칙: 일관성 유지.

📌 철자 규칙 (Spelling Conventions)

 

대상 규칙 예시
패키지 전부 소문자, 도메인 이름 역순 com.example.project
클래스/인터페이스 파스칼케이스, 각 단어 대문자 시작 ArrayList, HashMap, WordProcessor
메서드/필드 카멜케이스, 첫 글자 소문자 getName, computeHash, count
상수(static final) 대문자 + 언더스코어 MAX_VALUE, DEFAULT_SIZE
지역변수/매개변수 메서드/필드와 동일 (카멜케이스) size, index, name
타입 매개변수 한 글자: T, E, K, V, X, R / 여러 개면 T1, T2 <T>, <E>, <K, V>
enum 상수 상수 필드와 동일 (대문자 + 언더스코어) RED, BLUE, DARK_GREEN
약어 널리 쓰이는 약어만 대문자 URL, HTML, XmlParser (X: XMLParser)

📌 문법 규칙 (Grammatical Conventions)

대상 규칙 예시
클래스 이름 인스턴스화 가능 → 단수 명사, 불가 → 복수 Thread, Timer, Collectors
인터페이스 이름 클래스와 동일하거나 형용사(-able, -ible) Runnable, Comparable, Readable
어노테이션 이름 제약 적음: 명사/동사/형용사 모두 가능 @Override, @Inject, @Nullable
메서드 이름 동사/동사구 append, delete, getName
boolean 메서드 is, has, can, should + 형용사/동사 isEmpty, hasNext, canRead, shouldRetry
속성 접근자 getXxx (getter), setXxx (setter) getSize(), setName()
변환 메서드 toType() toString(), toArray()
뷰 반환 메서드 asType() asList(), asReadOnlyBuffer()
기본타입 변환 typeValue() intValue(), longValue()
정적 팩터리 from, of, valueOf, getInstance, newInstance, getType, newType Integer.valueOf("10"), List.of(1,2,3)

📌 추가 팁

  • boolean 필드 이름: 필드는 보통 empty, visible처럼 단순히 명사/형용사로, getter에서 isEmpty(), isVisible()로 표현.
  • 헝가리안 표기법 금지: strName, iCount처럼 타입을 이름에 넣지 말 것.
  • 테스트 메서드 이름: methodName_state_expectedBehavior 형태를 쓰면 명확하다. (pop_emptyStack_throwsException)
  • 일관성이 최우선: 팀 내에서 합의한 규칙이 있다면 반드시 따를 것.

✅ 결론

자바 명명 규칙은 API 설계에서 가장 기본적이지만 중요한 원칙이다.

  • 철자 규칙은 직관적이고 명확하므로 반드시 지켜야 한다.
  • 문법 규칙은 더 유연하지만, 널리 쓰이는 전통을 존중하고 일관성 있게 적용해야 한다.
  • 무엇보다 중요한 건 코드를 읽는 사람이 혼란 없도록 하는 것이다.
LIST