Code Convention: Java

Google style guide를 참고한 code convention입니다.

0. 명명규칙

  • 클래스 (PascalCase)
    - ex: AuthController.java
    - implementation: Interface를 구현하는 클래스는 interface이름+Impl을 규칙으로 함
  • 메소드 (camelCase)
    - 기능적 행위보단 달성하려는 목적을 나타내도록 명명(그래야 목적 달성을 위해 부족한 부분이 좀 한 눈에 보일 것 같습니다)
    ex: findAndUpdateUserPointByUserId → updateUserPoint
    - 맥락상 행위의 대상이 명확한 경우 대상 클래스 이름은 포함하지 말 것.
    ex: UserService.class에서 CRUD작업시 User에 대한 메소드임이 명확하다. 이때 User를 넣어 명명하는 것은 의미가 없다.
  • 메서드 이름 명명 팁(권장)
    - 보통 동사/전치사(다른 타입으로 전환 or 빌더패턴 적용)로 시작합니다.
    - 같은 행위는 가능한 같은 동사로 통일해 쓰는 것이 좋습니다.
    (ex: 데이터 수정 — update, replace, modify… 처럼 여러가지보단 하나로)
  • 변수 (camelCase)
    - 길이: 의도가 불분명한 짧은 이름보다는 의미있는 맥락이 있는 긴 이름이 낫다.
    - 변수 이름 길이가 대략 10~16일 때 디버깅하기 위해 들이는 노력을 최소화할 수 있다고 합니다..!
    - 단 맥락상 대상이 명확하다면 너무 구체적으로 명명하지 않는 것이 가독성이 더 좋다.
    - 변수 이름에 자료형은 지양한다. 다른 자료형을 써야하는 경우 변수명을 변경해야해서 번거롭다.
의도가 불분명한 짧은 이름보다는 의미있는 맥락이 있는 긴 이름
맥락상 대상이 명확하다면 너무 구체적으로 명명하지 않는다.
변수 이름에 자료형은 지양한다.
  • for문의 i
    -
    제한된 블럭 내에서 사용하는 임시값으로 다음과 같은 상황에만 사용한다.
    - 일반적인 루프 카운터, 배열 인덱스
  • boolean
    - 접두어 is, has를 사용한다.
    - 어떤, 모든을 나타내려면 any, all(each)를 활용한다.
    - 긍정적인 boolean 변수 이름을 사용한다.
  • 상수(UPPER_SNAKE_CASE)
  • 패키지(소문자 사용)
    - ex: config, core, domain, service등..
    - (회사 도메인).(프로그램 이름), 소문자 사용
    회사 이름 또는 도메인 등은 유니크하므로 사이트명으로 많이 사용함
    ex: groupId: io.snplab.myd, artifactId: myd

1. 제어문

  • 제어문 (if, while 등)이 너무 길거나 최대 길이를 넘긴 경우, 각 조건을 새로운 줄에 두세요. 논리 연산자는 줄의 시작부분에 있어야 합니다.
  • 블록 형식
    코드가 한 줄이라면
    - 한 줄에 쓰되 중괄호를 쓰지 않거나
    - 여러줄의 블록 처럼 중괄호를 씁니다.
    - 코드가 여러 줄 이라면 중괄호를 씁니다.

2. 열 제한

  • 100열 제한을 초과하면 개행 삽입(주석 포함)
  • 예외
    1. 긴 URL
    2. package 및 import문
    3. shell에 cut&paste할 수 있는 주석의 명령 줄

3. 개행

  • 클래스 첫 줄에 개행 있음, 메소드의 첫 줄에 개행 없음
  • 선언된 필드 사이, 필드와 메소드 사이, 메소드와 메소드 사이에 개행 삽입
  • 반환문 이전 개행 삽입
  • 각각의 줄에는 최대한 하나의 선언문(statement)만 사용하도록 한다.

4. 들여 쓰기

  • 들여쓰기: tab이용
  • tab 크기는 space 4개와 같지만 space 4개로 tab을 대신할 수 없습니다.
  • tab은 많은 줄을 들여쓰기에도 편리하다

5. 공백

  • 연산자 사이에 공백 넣는다.
  • 중괄호 앞에 공백 넣는다.
  • 메서드 체이닝
    - chaining이 가능한 메서드는 한 줄에 적기보단 여러 줄로 나눠주는 것는 것이 좋다.
    - 체인메서드는 최대 2개 연결 후 개행으로 분리
    - 마침표는 맨 앞에 쓴다.
  • { } 사용
    - { 위치: {사용하는 구문과 같은 행
    - } 위치: 구문이 끝나면 개행 후 } 작성

6. 주석(Comments)

  • 한 줄: // 한 칸 띄고 쓸 것.
  • 여러 줄: /** … */ 로 쓸 땐 *을 이전 행과 열을 맞춰 추가해줄 것. (// 로 여러줄 주석도 가능)
  • 주석 활용하기(javadoc)
    - 클래스 1~2줄 이내로 어디에 쓰이는지 설명하기
    - @author : 클래스 작성자
    - 현재 개발 흐름 상 한 사람당 최소 한개의 모듈을 담당하고 개발하고있는 것으로 보입니다.
    - 이 주석을 보면 팀에 합류하는 사람이 코드를 처음 봤을 때 클래스가 어디에 쓰이는지 대략 파악할 수 있고, 질문이 생기면 누구에게 물어봐야할지 알기 쉽습니다.
  • [선택] 주석 활용하기2 (TODO, FIXME)
    - TODO: 작업해야할 부분(버그, 재설계 등)
    - FIXME: 고장난 부분
    - 팀원 또는 자기 코드에서 에러 발견이나 재작업이 필요할 때 light하게 표시할 수 있습니다.
    - 코드를 마무리하기 전에 플래그를 검색해보면 꼼꼼하게 작업이 가능합니다.
    (Tip :vscode의 extension인 Todo Tree를 같이 쓰면 모듈별로 TODO, FIXME 확인이 가능합니다!)

7. Lombok

  • @Data 는 지양(bad)하자
    - @Data는 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor을 한번에 사용하는 강력한 어노테이션
    - but 무분별하게 Setter 남용됨(자동으로 @Setter 지원하므로 문제가 생김)
    - 의도가 분명하지 않고 객체를 언제든지 변경할 수 있음 → 안정성 보장이 어렵다.

온-디바이스 마이데이터 앱

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store