68. 일반적으로 통용되는 명명 규칙을 따르라

자바의 잘 정립된 명명 규칙을 따르는 것은 코드의 가독성유지보수성을 높이는 데 매우 중요합니다. 규칙을 어기면 코드를 이해하기 어렵고 오해를 불러일으켜 오류로 이어질 수 있습니다.

✍️ 철자 규칙 (Spelling Conventions)

철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드, 타입 변수 등의 이름을 어떻게 표기할지에 대한 규칙입니다. 특별한 이유가 없는 한 반드시 따라야 합니다.

  1. 📦 패키지 및 모듈 (Packages and Modules):

    • 각 요소를 점(.) 으로 구분하는 계층적 구조

    • 모든 요소는 소문자 알파벳 또는 (드물게) 숫자로 구성

      • org.example.project.util

    • 외부 공개용 패키지: 조직의 인터넷 도메인 이름을 역순으로 사용

      • com.google.common, org.hibernate

      • 표준 라이브러리(java.*)와 선택적 패키지(javax.*)는 예외.

    • 나머지 요소는 패키지를 설명하는 짧은 단어

      • (8자 이하 권장)나 의미 있는 약어 사용

      • util, io, awt

  1. 🏛️ 클래스 및 인터페이스 (Classes and Interfaces)

    • 하나 이상의 단어로 구성되며, 각 단어의 첫 글자를 대문자로 시작 (PascalCase)

      • Stream, FutureTask, LinkedHashMap.

    • 약어 사용 최소화

      • 널리 통용되는 약어(예: URL, HTTP)는 사용 가능.

    • 약자 표기

      • HttpUrl처럼 첫 글자만 대문자로 하는 것을 권장 (HTTPURL보다 가독성 좋음).

  1. ⚙️ 메서드 및 필드 (Methods and Fields):

    • 클래스 명명 규칙과 유사하나, 첫 글자는 소문자로 시작

    • camelCase: remove, groupingBy, ensureCapacity

  1. 🔒 상수 필드 (Constant Fields):

    • static final 필드이면서 값이 불변인 경우

      • 기본 타입 또는 불변 참조 타입

    • 모든 단어를 대문자로 작성하고, 단어 사이는 밑줄(_) 로 구분

      • 스네이크 케이스, SNAKE_CASE: MIN_VALUE, NEGATIVE_INFINITY.

    • 밑줄은 상수 필드 외에는 거의 사용하지 않음

  2. 📝 지역 변수 (Local Variables):

    • 메서드/필드와 유사한 규칙 적용

    • 짧은 이름이나 약어 사용 가능

      • 문맥상 의미 파악 가능 시: i, denom, houseNum.

  3. 타입 매개변수 (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