Code Convention (JAVA)

파일 공통 요건

파일 인코딩은 UTF-8 [encoding-utf8]

모든 소스, 텍스트 문서 파일의 인코딩은 UTF-8로 통일한다.

이름 (Naming)

식별자에는 영문/숫자/언더스코어만 허용 [identifier-char-scope]

  • 변수명, 클래스명, 메서드명 등에는 영어와 숫자만을 사용한다. 상수에는 단어사이의 구분을 위해 언더스코어(_)를 사용한다.
  • 정규표현식 ‘[^A-Za-z0-9_]'에 부합해야 한다.

한국어 발음대로 표기 금지 [avoid-korean-pronounce]

  • 식별자의 이름을 한글 발음을 영어로 옮겨서 표기하지 않는다. 한국어 고유명사는 예외이다.

    deohagi ()

    plus ()

패키지 이름은 소문자로 구성 [package-lowercase]

  • 패키지 이름은 소문자를 사용하여 작성한다. 단어별 구문을 위해 언더스코어(_)나 대문자를 섞지 않는다.

    package com.megazone.apiGate_way

    package com.megazone.apigateway

클래스/ 인터페이스 이름에 대문자 카멜표기법 적용 [class-interface-lower-camelcase]

  • 클래스 이름은 단어의 첫 글자를 대문자로 시작하는 대문자 카멜표기법(Upper camel case)을 사용한다.

    public class reservation , public class Servicename

    public class Reservation , public class ServiceName

메서드 / 변수 이름에 소문자 카멜표기법 적용 [method-lower-camelcase]

  • 메서드 / 변수 이름에는 첫 번째 단어를 소문자로 작성하고, 이어지는 단어의 첫 글자를 대문자로 작성하는 소문자 카멜표기법을 사용한다.

상수는 대문자와 언더스코어로 구성 [constant_uppercase]

  • 상태를 가지지 않는 자료형이면서 ‘static final'로 선언되어 있는 필드일 때를 상수로 간주한다. 상수 이름은 대문자로 작성하며, 복합어는 언 더스코어(_)를 사용하여 단어를 구분한다.

    public final int unlimited = -1;

    public final String POSTALCODEEXPRESSION = "POST";

    public final int UNLIMITED = -1;

    public final String POSTAL_CODE_EXPRESSION = "POST";

임시 변수외에는 1글자 이름 사용 금지[avoid-1-char-var]

static import에만 와일드 카드 허용[avoid-star-import]

  • 클래스를 import할때는 와일드카드(*)없이 모든 클래스명을 다쓴다.

    import java.util.*;

    import java.util.List;

    import java.util.ArrayList;

문법

한줄에 한문장

  • 문장이 끝나는 ; 뒤에는 새줄을 삽입한다.

    int base = 0; int weight = 2;

    int base = 0;

    int weight = 2;

하나의 선언문에는 하나의 변수만

  • 변수 선언문은 하나의 변수만을 다룬다.

    int base,weight;

    int base;

    int weight;

  • 배열에서 대괄호는 타입 뒤에 선언

    String names[];

    String[] names;

  • long형 값의 마지막에 ‘L' 붙이기

  • long형의 숫자에는 마지막에 대문자 ‘L'을 붙인다. 소문자'l'보다 숫자 ‘1'과의 차이가 커서 가독성이 높아진다.

    long base = 123456789l;

    long base = 123456789L;

들여쓰기 (Indentation)

하드탭 사용

  • 탭 문자를 사용하여 들여쓴다. 탭 대신 스페이스를 사용하지 않는다.

탭의 크기는 4개의 스페이스

  • 1개의 탭의 크기는 스페이스 4개의 크기와 같도록 에디터에서 설정한다.

블럭 들여쓰기

  • 클래스, 메서드, 제어문 등의 코드 블럭이 생길 때마다 1단계를 더 들여쓴다.

중괄호 (Braces)

  • K&R 스타일로 중괄호 선언
    • 클래스 선언, 메서드 선언, 조건/반복문 등의 코드 블럭을 감싸는 중괄호에 적용되는 규칙이다. 중괄호 선언은 K&R 스타일을 따른다. 줄의 마 지막에서 시작 중괄호'{‘를 쓰고 열고 새줄을 삽입한다. 블럭을 마친후에는 새줄 삽입 후 중괄호를 닫는다.
public class SearchConditionParser {

    public boolean isValidExpression(String exp) {

        if (exp == null) {

            return false;

        }

        for (char ch : exp.toCharArray()) {

....

        }

        return true;

    }

}

public class SearchConditionParser {

    public boolean isValidExpression(String exp) {

        if (exp == null) {

            return false;

        }

        for (char ch : exp.toCharArray()) {

....

        }

        return true;

    }
}

닫는 중괄호와 같은 줄에 else, catch, finally, while 선언

아래의 키워드는 닫는 중괄호(}) 와 같은 줄에 쓴다.

  • else

  • catch, finaly

  • do-while 문에서의 while

if(line.startWith(WARNING_PREFIX)){
    return LogPattern.WARN;
}        

else if(line.startWith(DANGER_PREFIX)){
    return LogPattern.DANGER;
}

else{
    return LogPattern.NORMAL;
}

if(line.startWith(WARNING_PREFIX)){
    return LogPattern.WARN;
}

else if(line.startWith(DANGER_PREFIX)){
    return LogPattern.NORMAL;
}
else{
    return LogPattern.NORMAL;
}

try{
    writeLog();
}catch(IOException ioe){
    reportFailure(ioe);
}finally{
    writeFooter();
}

try{
    writeLog();
}catch(IOException ioe){
    reportFailure(ioe);
}finally{
    writeFooter();
}

do{
    write(line);
    line=readLine();
}while(line!=null);

do{
    write(line);
    line=readLine();
}while(line!=null);

주석 (Comment)

주석을 코드 템플릿기능을 사용하여 작성한다. 에디터에서 메서드나 클래스에 주석을 통해 코멘트를 작성할 때 코드템플릿 기능을 사용한다.

클래스 주석

  • import 다음에 기술

  • 블록주석을 사용

  • 각 라인은 *로 시작

  • 해당 클래스에 대한 기능과 용도 기술

/**

* .
*
* @author
* @version 1.0,
* /

메소드 주석

  • 메소드 상단에 위치

  • 블록주석을 사용

  • 메서드 기능 설명은 한, 두 줄로 간결하게

/**

* ..
*
*/

기타 주석처리

  • 코드 내부의 짧은 주석은 // …로 표기
  • 특별한 경우를 제외하고는 주석을 사용하지 않는다.
  • 의문점이나 해결못한 것은 임시주석 사용 /* … */