Java - 코드 컨벤션 가이드

손지민·2023년 10월 21일

Java 기초

목록 보기
6/13
post-thumbnail

1. 개요

Java 코드 컨벤션 가이드

  • 프로그래머 사이에서 약속한 코드 작성 양식입니다. 참고 자료를 읽으며 기억하고자 하는 부분만 기록하고자합니다.
  • 목적
    • 가독성
    • 협업 시 일관된 코드 스타일 유지
  • 단축키
    • 이클립스에선 ctrl + shift + f
    • 인텔리제이에선 ctrl + alt + L
  • 참고자료

2. 소스 파일들의 기본

2.3.1 공백 문자

  • Tab (x)
  • +4 스페이스(o)

2.3.2 이스케이프 특수문자

  1. \n: 줄 바꿈 문자를 나타냅니다. 이는 문자열 안에서 새로운 줄로 이동하고 다음 텍스트가 다음 줄에서 시작됨을 의미합니다.

  2. \t: 탭 문자를 나타냅니다. 이는 문자열 내에서 수평 탭을 나타냅니다.

  3. \: 백슬래시 문자 자체를 나타냅니다. 백슬래시는 이스케이프 문자의 접두어로 사용되므로 문자열 안에서 백슬래시 자체를 나타내려면 두 번 사용해야 합니다.

  4. ": 이중 인용부호 문자를 나타냅니다. 이는 문자열 내에서 이중 인용부호 문자를 나타냅니다.

  5. ': 작은따옴표(홑따옴표) 문자를 나타냅니다. 이는 문자 상수 (char) 내에서 작은따옴표 문자를 나타냅니다.

  6. \r: 캐리지 리턴 문자를 나타냅니다. 이는 줄의 시작 위치로 이동함을 나타냅니다.

  7. \b: 백스페이스 문자를 나타냅니다. 이는 커서를 하나 뒤로 이동함을 나타냅니다.

  8. \f: 폼 피드 문자를 나타냅니다. 이는 페이지를 바꿈을 나타냅니다.


3. 소스 파일 구조

3.4.2 클래스 본문 순서

  • 논리적 순서를 따라야 합니다.

4. 포매팅

4.2 블록 들여쓰기

  • +2 스페이스
  • 단, 메서드 블록은 +4 스페이스

4.4 열 제한 : 100

  • 예외
    • URL, 패키지 및 import 문, 주석 등

intelliJ에서 100자 제한 설정 가능

  • IntelliJ IDEA에서는 "Code Style" 설정을 통해 문장의 최대 길이를 설정할 수 있습니다. 설정은 "File" -> "Settings" (또는 macOS에서는 "IntelliJ IDEA" -> "Preferences")로 이동한 다음 "Editor" -> "Code Style" 아래의 해당 언어를 선택하고 "Right margin (columns)" 또는 "Hard wrap at" 설정을 변경하여 최대 길이를 설정합니다.

자동 줄바꿈 기능(Soft Wraps)

  • File - Settings - Editor - General - Soft Wraps - *로 하면 모든 파일 자동 줄바꿈

4.5.1 줄 언제 바꾸는지

  1. 높은 문법 레벨에서 줄 바꿈: 코드의 문법 구조를 따라 줄 바꿈을 수행하여 가독성을 향상시킵니다.

  2. non-assignment 연산자에서 줄 바꿈이 일어날 경우 바꿈은 기호 이전에 위치한다: 연산자와 비슷한 "operator-like" 기호 (예: dot (.), 2개의 콜론 (::), 타입 바운딩의 앰퍼센드 기호 (<T extends Foo & Bar>), catch 블록의 파이프 (catch (FooException | BarException e)) 등)에서는 줄 바꿈이 기호 이전에 위치합니다.

  3. 줄 바꿈이 assignment 연산자에서 일어나면 기호 다음에 위치하지만 바뀌어도 상관없다: 할당 연산자 (예: =)를 사용할 때, 줄 바꿈이 기호 다음에 위치하면 됩니다. 그러나 이 규칙을 엄격하게 따르지 않아도 됩니다.

  4. 함수나 생성자의 이름에 여는 괄호가 있을 때: 함수 또는 생성자 이름 다음에 여는 괄호가 나타날 때 줄 바꿈을 수행합니다.

  5. 콤마 앞에 오는 토큰에 연결되어 있을 때: 여러 인수 또는 요소를 가지는 구조에서 콤마(,) 앞에 토큰이 연결되어 있을 때 줄 바꿈을 수행합니다.

  6. 람다식: 람다식에서 일반적으로 람다 식의 인수 뒤에 줄 바꿈을 위치시킵니다. 그러나 람다의 몸체가 한 줄로 간결하게 표현되면 몸체 뒤에 줄 바꿈을 위치시키는 것도 가능합니다.

4.5.2 줄바꿈 들여쓰기

  • 줄바꿈을 하고 나면 최초 행보다 최소 4자를 들여쓰기 한다.

    질문
    Q. 블록 들여쓰기는 +2 하라했는데 '줄바꿈 시 들여쓰기는 또 최초행보다 최소 4자를 들여쓰기한다.' 라고 되어있다. 이해가 필요하다.

4.8.2 변수 선언

  • 모든 변수 선언은 하나의 한개만
    • int a, b; 는 사용하지 않는다.
    • (for문 헤더에선 예외)
  • 필요할 때 선언
    • 지역 변수는 습관적으로 블록의 시작 부분에 선언되는 경향이 있다. 하지만 지역 변수의 범위를 최소화 하기 위해 처음 사용되는 지점에 가깝게 선언한다.

4.8.7 제어자(Modifiers), 접근 제한자(Access Modifiers) 순서

클래스와 멤버의 modifiers는 다음과 같은 순서로 작성하는 것이 권장된다.

  • public protected private abstract default static final transient volatile synchronized native strictfp

5. 네이밍

5.1 모든 식별자에 대한 공통 내용

  • 식별자는 ASCII 숫자와 문자만을 쓴다. 그리고 어떤 일부 경우 언더 스코어( _ )를 쓰기도한다. 그러므로 유효한 식별자 이름은 정규식 \w+와 매칭된다.
  • 구글 스타일에선, 특정 접미사나 접두사는 사용하지 않는다.

5.2.1 패키지 이름

  • 전부 소문자로 단순히 서로 뭍여서 연속된 단어로 이루어져 있다. (언더스코어 없음)
  • 예를들어 com.example.deepspace같은 형식이다.
    com.example.deepSpace혹은com.example.deep_space 는 잘못되었다.

5.2.2 클래스 이름

  • UpperCamelCase로 작성한다.
  • 클래스 이름은 전형적으로 명사나 명사 구이다. 예를들어, Character 혹은 ImmutableList 처럼 말이다. 인터페이스의 이름은 명사나 명사구가 될 수 있다. 예를들어 List. 그러나 가끔은 형용사나 형용사구가 대신 쓰이기도 한다 (예를들어 Readable)
  • 테스트 클래스들은 테스트하려는 클래스의 이름이 앞에오고 끝에 Test를 붙여준다. 예를들어 HashTest 혹은 HashIntegrationTest

5.2.3 함수 이름

  • lowerCamelCase로 작성한다.
  • 함수 이름은 전형적으로 동사 혹은 동사 구이다. 예를들어, sendMessage 나 stop이다. 언더스코어는 JUnit 테스트에서 논리적 컴포넌트를 분리시키기 위해 각각을 lowerCamelCase로 변경시켜 나올수 있다. 하나의 전형적인 패턴은_ 이다. 예를들어 pop_emptyStack. 테스트 메소드를 작성하는 하나의 정확한 방법은 없다.

5.2.4 상수 이름

  • CONSTANT_CASE로 작성한다.: 모두 대문자이고 각 단어는 하나의 언더스코어로 구분하는 형식.

5.2.5 상수가 아닌 필드 이름(static 같은)

  • lowerCamelCase로 작성한다.

5.2.6 파라미터 이름

  • lowerCamelCase로 작성한다.
  • public 메서드에서 한 개의 문자를 가진 파라미터는 피해야 한다.

5.2.7 지역변수 이름

  • lowerCamelCase로 작성한다.
  • final, immutable 이더라도 지역변수는 상수로 생각하지 않는다.

5.2.8 타입 변수 이름

  • 대문자 한글자, 거기에 숫자 하나는 옵션으로 E, T, X, T2
  • 혹은 클래스 이름을 사용하는데, 거기에 T를 붙인다. RequestT , FooBarT

5.3 Camel Case : 기정의 된 것들

  • IPv6 나 IOS를 Camel Case 하려면?
  1. 문장을 순수 ASCII 코드 로 바꾸고 아포스트로피 ' 를 제거한다.
    "Müller's algorithm" -> "Muellers algorithm"
  2. 1의 결과물을 구두점 및 - 과 공백을 기준으로 단어들로 나눈다.
  3. 2의 결과물을 전체 소문자(약자도 포함!)로 바꾸고, 각 단어의 첫글자를 대문자로 바꾼다.
  4. 한 단어로 이어 붙인다.
    "XML HTTP request" → XmlHttpRequest
    "new customer ID" → newCustomerId
    "inner stopwatch" → innerStopwatch
    "supports IPv6 on iOS?" → supportsIpv6OnIos

6. 프로그래밍 연습

6.1 @Override 는 항상 사용하라 (부모 메소드가 Deprecated 인 경우엔 생략하라)

6.2 예외잡기 : 생략하지 말 것

  • catch 블록은 비워놓지 않는다.
  • 만약 비워놓는 것이 의도된 동작이라면, 주석을 활용한다.
  • 예외적으로 테스트에선 Exception 이름을 expected라고 작명함으로써 비워놓아도 된다.

6.3 static 멤버

  • static 멤버는 클래스 이름을 활용하여 호출하라.
Foo aFoo = ...;
Foo.aStaticMethod(); // 좋음
aFoo.aStaticMethod(); // 나쁨
somethingThatYieldsAFoo().aStaticMethod(); // 아주 나쁨

7. Javadoc

  • 일반 주석과 다릅니다.

  • JavaDoc 주석은 Java 프로그램의 소스 코드에 추가되는 특수 주석 형식입니다. JavaDoc 주석은 코드의 가독성을 향상시키고, API 문서를 자동으로 생성하기 위한 목적으로 사용됩니다. JavaDoc 주석은 클래스, 메서드, 필드 등의 코드 요소에 대한 설명과 문서화 정보를 제공하며 HTML 태그와 특수 태그를 사용하여 API 문서를 생성하는 데 도움을 줍니다.

  • 규칙

  1. JavaDoc 주석은 /**로 시작하며 */로 끝납니다.
  2. JavaDoc 주석은 HTML 태그와 일반 텍스트를 혼합하여 사용할 수 있습니다.
  3. JavaDoc 주석은 클래스, 메서드, 필드, 생성자, 인터페이스 등과 같은 코드 요소 위에 위치합니다.
  4. JavaDoc 주석은 코드 요소에 대한 설명, 매개변수 설명, 리턴 값 설명, 사용 예제, 예외 설명 및 기타 정보를 제공할 수 있습니다.
/**
 * 이 클래스는 예제를 위한 간단한 클래스입니다.
 */
public class ExampleClass {
    /**
     * 이 메서드는 두 개의 정수를 더한 결과를 반환합니다.
     *
     * @param a 첫 번째 정수
     * @param b 두 번째 정수
     * @return a와 b의 합
     */
    public int add(int a, int b) {
        return a + b;
    }
}
profile
Developer

0개의 댓글