코딩 컨벤션이란?

읽고, 관리하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약(하나의 작성 표준)

특히 유연한 문법구조를 가진 언어일수록 개발자 간 통일된 규약이 없다면 코드의 의도를 파악하거나 오류를 찾기 어려우며 유지보수 비용이 늘어난다.

다른사람들과 협업하여 개발할 때는 가독성이 중요하기 때문에 코딩 컨벤션이 중요하다.

코딩 컨벤션의 장점 : 가독성, 관리 용이성

  1. 정해진 규칙이 있기 때문에 명칭이나 구조를 빠르고 정확하게 정할 수 있다.
  2. 통일된 규약이 있기 때문에 모든 사람들이 코드를 이해하기 쉽고 편리하다.
  3. 유지보수 비용을 줄일 수 있다.

 

 

java 코딩컨벤션

Code Conventions for the Java Programming Language: Contents

https://naver.github.io/hackday-conventions-java/

Google Java Style Guide

파일

  1. 인코딩 UTF-8으로 통일한다.
  2. 새 줄 문자는 LF (Line Feed)
  3. 파일 마지막에는 LF로 끝난다.

이름

  1. 식별자에는 영문/숫자/언더스코어만 허용한다.
  2. 한국어 발음대로 표기 금지
  3. 대문자로 표기할 약어의 목록 정의하기
  4. 패키지 이름은 소문자 (_나 대문자 쓰지 않는다.)
  5. 클래스, 인터페이스 이름은 대문자 카멜표기법으로 한다.
  6. 클래스이름은 명사나 명사절로 한다.
  7. 인터페이스 이름에는 명사, 형용사 사용한다.
  8. 메서드 이름에 소문자 카멜표기법 적용한다. 메서드 이름은 동사, 전치사로 시작한다.
  9. 상수는 대문자와 언더스코어로 구성된다.
  10. 변수는 소문자 카멜표기법 적용한다.
  11. 임시 변수 외에는 1글자 이름 사용하지 않는다.

선언

  1. 소스파일당 1개의 탑레벨 클래스를 담는다. 탑레벨 클래스는 소스 파일에 1개만 존재해야 한다. 한 파일에 선언해야 한다면 내부클래스로 선언한다.
  2. static import에만 와일드 카드를 허용한다. (*) import할 때 모든 클래스명을 다 쓰도록 한다.
  3. 제한자 선언 순서 지키기protectedabstractfinalvolatilenative
  4. strictfp
  5. synchronized
  6. transient
  7. static
  8. private
  9. public
  10. 한줄에 한 문장으로 한다.
  11. 하나의 선언문에는 하나의 변수만 다룬다. 좋은 예
  12. int base, weight;
  13. int base; int weight;
  14. 나쁜 예
  15. 배열에서 대괄호는 타입뒤에 선언한다.
    String names[];
    좋은 예
  16. String[] names;
  17. 나쁜 예
  18. long 형의 값 마지막에는 L을 붙인다.

들여쓰기

  1. 스페이스 대신 탭을 사용한다. 탭의 크기는 4개의 스페이스!
  2. 클래스, 메서드, 제어문 등 코드 블럭이 생길때 마다 1단계를 더 들여쓴다.

중괄호

  1. 줄의 마지막에서 시작 중괄호{를 쓰고 열고 새줄을 삽입한다. 블럭을 마친후에는 새줄 삽입 후 중괄호를 닫는다.
  2. 닫는 중괄호와 같은줄에 else, catch, finally, while 선언한다.
  3. 빈 블럭은 새줄없이 중괄호 닫기 허용한다.
  4. 조건, 반복문에 중괄호 필수 사용한다. 한줄이더라도...

줄바꿈

  1. package, import 선언문은 한줄로 한다. (글자수를 초과하더라도)
  2. 줄바꿈 후 추가 들여쓰기를 추가한다.
  3. 줄바꿈 허용 위치
    • extends 선언 후
    • implements 선언 후
    • throws 선언 후
    • 시작 소괄호(() 선언 후
    • 콤마(,) 후
    • . 전
    • 연산자 전
      • +, -, *, /, %
      • ==, !=, >=, >,⇐, <, &&, ||
      • &, |, ^, >>>, >>, <<, ?
      • instanceof

import 선언 순서

  1. static imports
  2. java.
  3. javax.
  4. org.
  5. net.
  6. 8~10을 제외한 com.*
  7. 16, 810을 제외한 패키지에 있는 클래스
  8. com.nhncorp.
  9. com.navercorp.
  10. com.naver.

빈 줄

  1. package 선언 후 빈 줄 삽입한다.
  2. import 그룹별로 빈줄을 삽입한다. 같은 그룹 내에서는 알파벳 순으로 정렬한다.
  3. 메서드 사이에 빈 줄 삽입한다.

공백

  1. 공백으로 줄을 끝내지 않는다.
  2. 대괄호 뒤에 다른 선언이 올 경우 공백을 삽입한다.
  3. 중괄호 시작 전, 종료 후에 공백 삽입한다.
  4. 제어문 키워드와 여는 소괄호 사이에 공백 삽입한다.
  5. 이항, 삼항 연산자 앞 뒤에 공백 삽입한다.
  6. 단항 연산자와 연산대상 사이에는 공백 삽입하지 않는다.
  7. 식별자와 여는 소괄호 사이에 공백을 삽입하지 않는다.
  8. 타입캐스팅을 위해 선언한 소괄호의 내부에는 공백을 삽입하지 않는다.
  9. 제네릭스 선언에 쓰이는 산괄호<,> 주위의 공백 처리는 아래와 같다.
    • 제네릭스 메서드 선언 일 때만 < 앞에 공백을 삽입한다.
    • < 뒤에 공백을 삽입하지 않는다.
    • > 앞에 공백을 삽입하지 않는다.
    • 아래의 경우를 제외하고는 >뒤에 공백을 삽입한다.
      • 메서드 레퍼런스가 바로 이어질 때
      • 여는 소괄호('(')가 바로 이어질 때
      • 메서드 이름이 바로 이어질 때

 

 

 

 

IntelliJ에서 포맷터 적용하기

IntelliJ는 XML으로 작성된 포맷터를 적용할 수 있다.

자신이 사용하는 언어와 IDE 환경에 맞는 파일을 다운 받아서 적용시킬 수 있다.

적용 방법

  1. 위 링크에서 IntelliJ용 XML 포맷터를 다운로드 받는다.
  2. IntelliJ IDEA - Preferences > Editor > Code Style 로 간다.
  3. Scheme 우측 톱니바퀴 > Import Scheme > IntelliJ IDEA code style XML 클릭
  4. 다운로드 받은 XML 포맷터를 찾아 OK를 누른다.

 

 

 

컨벤션 적용 단축키

  • 윈도우 : Ctrl + Alt + L
  • 맥 : Cmd + Alt + L

 

 

 

 

코딩 컨벤션 적용하기

위 방법으로 import 하여 적용하였다.

적용 전 코드

public class Main {
    public static void main(String[] args) {System.out.println("Hello world!");}
}

적용 후 코드

public class Main {

  public static void main(String[] args) {
    System.out.println("Hello world!");
  }
}

 

 

 

 

 

TIL

현업에서도 코드 작성자가 계속해서 유지보수를 하지 않기 때문에, 이후의 유지보수를 위해서는 가독성과 통일성이 중요하다고 생각한다.

다른 사람들이 나의 코드를 읽고 이해하는 데 문제가 없도록 작성해야 협업을 잘 할 수 있다.

항상 코드를 다른사람들과 공유한다는 마음을 가지고 정해진 규칙에 맞게 코드를 짜는 것이 중요하다는 것을 배웠다. 내가 깔끔하다고 생각하는 것에 그치지 않고 코딩 컨벤션에 따라야 하는 것이다. XML 파일으로 바로 적용시키는 방법도 알게 되었다.

코딩컨벤션 규칙이 정확히 규정되어 있다는 것을 알게 되었고, 코딩 컨벤션 규칙에 준수하도록 노력해야 겠다.