68. 일반적으로 통용되는 명명 규칙을 따르라
자바의 잘 정립된 명명 규칙을 따르는 것은 코드의 가독성과 유지보수성을 높이는 데 매우 중요합니다. 규칙을 어기면 코드를 이해하기 어렵고 오해를 불러일으켜 오류로 이어질 수 있습니다.
✍️ 철자 규칙 (Spelling Conventions)
철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수 등의 이름을 어떻게 표기할지에 대한 규칙입니다. 특별한 이유가 없는 한 반드시 따라야 합니다.
📦 패키지 및 모듈 (Packages and Modules):
각 요소를 점(.) 으로 구분하는 계층적 구조
모든 요소는 소문자 알파벳 또는 (드물게) 숫자로 구성
org.example.project.util
외부 공개용 패키지: 조직의 인터넷 도메인 이름을 역순으로 사용
com.google.common
,org.hibernate
표준 라이브러리(
java.*
)와 선택적 패키지(javax.*
)는 예외.
나머지 요소는 패키지를 설명하는 짧은 단어
(8자 이하 권장)나 의미 있는 약어 사용
util
,io
,awt
🏛️ 클래스 및 인터페이스 (Classes and Interfaces)
하나 이상의 단어로 구성되며, 각 단어의 첫 글자를 대문자로 시작 (PascalCase)
Stream
,FutureTask
,LinkedHashMap
.
약어 사용 최소화
널리 통용되는 약어(예:
URL
,HTTP
)는 사용 가능.
약자 표기
HttpUrl
처럼 첫 글자만 대문자로 하는 것을 권장 (HTTPURL
보다 가독성 좋음).
⚙️ 메서드 및 필드 (Methods and Fields):
클래스 명명 규칙과 유사하나, 첫 글자는 소문자로 시작
camelCase:
remove
,groupingBy
,ensureCapacity
🔒 상수 필드 (Constant Fields):
static final
필드이면서 값이 불변인 경우기본 타입 또는 불변 참조 타입
모든 단어를 대문자로 작성하고, 단어 사이는 밑줄(_) 로 구분
스네이크 케이스, SNAKE_CASE:
MIN_VALUE
,NEGATIVE_INFINITY
.
밑줄은 상수 필드 외에는 거의 사용하지 않음
📝 지역 변수 (Local Variables):
메서드/필드와 유사한 규칙 적용
짧은 이름이나 약어 사용 가능
문맥상 의미 파악 가능 시:
i
,denom
,houseNum
.
타입 매개변수 (Type Parameters):
보통 한 글자 대문자 사용.
T
: 임의의 타입 (Type)E
: 컬렉션 요소 타입 (Element)K
: 맵 키 타입 (Key)V
: 맵 값 타입 (Value)X
: 예외 타입 (Exception)R
: 메서드 반환 타입 (Return)임의 타입 시퀀스:
T, U, V
또는T1, T2, T3
철자 규칙 요약표:
패키지, 모듈
org.junit.jupiter.api
, com.google.common.collect
소문자, 점(.) 구분, 계층적, (도메인 역순)
클래스, 인터페이스
Stream
, FutureTask
, LinkedHashMap
, HttpClient
파스칼 케이스 (첫 글자 대문자)
메서드, 필드
remove
, groupingBy
, getCrc
카멜 케이스 (첫 글자 소문자)
상수 필드
MIN_VALUE
, NEGATIVE_INFINITY
대문자 스네이크 케이스 (밑줄 구분)
지역 변수
i
, denom
, houseNum
카멜 케이스, 약어 허용
타입 매개변수
T
, E
, K
, V
, X
, R
, U
, V
, T1
, T2
한 글자 대문자 (T, E, K, V 등)
📖 문법 규칙 (Grammatical Conventions)
철자 규칙보다 더 유연하며, 논란의 여지가 있을 수 있습니다.
클래스 (객체 생성 가능)
보통 단수 명사나 명사구
Thread
,PriorityQueue
,ChessPiece
인터페이스
클래스처럼 짓거나
Collection
,Comparator
-able
또는-ible
로 끝나는 형용사Runnable
,Iterable
,Accessible
애너테이션
특정 규칙 없이 명사, 동사, 전치사, 형용사 등 다양하게 활용
@BindingAnnotation
,@Inject
,@ImplementedBy
,@Singleton
메서드 (동작 수행): 동사 또는 동사구
append
,drawImage
메서드 (boolean 반환)
보통
is
또는has
로 시작하는 명사/명사구isDigit
,hasSiblings
메서드 (특수 목적):
toType
: 객체 타입을 변환하여 다른 타입의 새 객체 반환toString
,toArray
asType
: 객체의 내용을 다른 타입의 뷰(view)로 제공asList
typeValue
: 객체의 값을 기본 타입(primitive type)으로 반환intValue
정적 팩터리:
from
,of
,valueOf
,instance
,getInstance
,newInstance
,getType
,newType
등을 흔히 사용
필드: API에서 직접 노출되는 경우가 적어 규칙이 덜 중요함.
boolean
필드: 접근자 메서드(getter) 이름에서is
를 뺀 형태initialized
,composite
다른 타입 필드: 명사 또는 명사구 (
height
,digits
,bodyStyle
).
지역 변수: 필드와 유사하게 짓지만, 좀 더 느슨하게(약어 등) 지을 수 있습니다.
✨ 핵심 정리 ✨
표준 명명 규칙을 체화하여 자연스럽게 사용하세요! 👨💻👩💻
자바의 표준 명명 규칙은 코드의 가독성과 유지보수성을 크게 향상시킵니다.
철자 규칙은 비교적 명확하므로 반드시 따르는 것이 좋습니다.
문법 규칙은 더 유연하므로, 기존에 널리 사용되는 규칙과 충돌한다면 맹목적으로 따르기보다 상식에 따라 판단하세요.
궁극적인 목표는 코드를 읽고 이해하기 쉽게 만드는 것입니다.
Last updated