Recent Posts
Recent Comments
Link
06-30 12:53
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA 코딩 컨벤션 본문

DEV&OPS/Java

JAVA 코딩 컨벤션

ALEPH.GEM 2022. 10. 20. 17:37

 

1. 인코딩(Encoding)

1.1. 파일 및 문자 인코딩은 UTF-8 (gerneral_ci)으로 통일한다.

 

 

2. 이름(Naming)

2.1. 변수명, 클래스명, 인터페이스명, 메서드명에는 영어와 숫자만 사용한다. 

public interface AutoClosable{

2.2. 변수명, 클래스명, 인터페이스명, 메서드명 단어 합성시에는 낙타 등 표기법으로 한다.

public interface RowMapper{

2.3. 클래스명, 인터페이스명, 생성자명은 대문자로 시작한다. 

public class WatcherClass{

2.4. 변수명과 메서드명은 소문자로 시작해야한다.

public String setHtmlName(String mode){

2.5. 상수명은 모두 대문자로 하고 단어를 합성할 때는 언더스코어( _ )를 사용한다.

public static final String PATH_RESOURCE = "/lic/resource/";

2.6. 패키지 이름은 소문자로 작성한다. 단어를 합성할 때도 구분을 위해 대문자나 언더스코어( _ )를 섞지 않는다.

package com.navercorp.apigateway

2.7. 클래스명은 명사를 사용한다.

public class HttpURLConnection{

2.8. 인터페이스명은 명사/형용사를 사용한다.

public interface AutoClosable{

2.9. 메서드 이름은 동사/전치사로 시작한다.

toString(); //전치사
readHtml(); //동사+목적어

2.10. 테스트 클래스는 Test로 끝낸다.

public class WatcherTest{

 

 

3. 선언(Declarations)

3.1. 하나의 소스파일(. java)에는 하나의 클래스만 선언한다. (내부 클래스 제외)

public class LogParser {
//내부
}
class LogType {
//하나의 java 소스파일에 두개 이상 클래스를 사용하지 말것
//꼭 사용해야 한다면 주 클래스의 내부에서 사용할 것
}

3.2. import시 와일드카드(*)를 사용해서 import 하지 않는다.

import java.util.*;	//금지
import java.util.ArrayList;

3.3. 클래스/메서드/멤버 변수의 제한자는 Java Language Specification에 명시된 순서로 쓴다.

public protected private abstract static final transient volatile synchronized native strictfp

3.4. Annotation 선언 후 줄 바꿈 한다.

@RequestMapping("/guests")
public void findGuests() {}

3.5. 한 줄에 한 문장을 쓴다. 세미콜론(;)을 여러 번 사용해 한 줄에 여러 문장을 기술하지 않는다.

int base = 0;
int weight = 2;

3.6. 하나의 선언문에는 하나의 변수만 선언한다.

int base = 0;
int weight = 2;

3.7. 배열에서 대괄호는 타입 뒤에 선언 한다. 변수명 뒤에 대괄호를 붙이지 않는다.

String[] names;

3.8. Long형 데이터는 마지막에 대문자 L 을 붙인다. 가독성을 위해 소문자 L을 사용하지 않는다.

long base =  54423234211L;

3.9. 이스케이프 문자는 \b, \f, \n. \r, \t, \\ 등을 사용하고 숫자를 사용한 \u0008 같은 방식을 사용하지 않는다.

 

 

4. 들여쓰기(Indentation)

4.1. 탭(tab)의 크기는 4개의 스페이스이다.

4.2. 탭을 이용하여 들여쓰기를 한다.

 

 

5. 중괄호(Braces)

5.1. 줄의 마지막에 시작 중괄호를 쓰고 블록을 마친후에는 새 줄에서 중괄호를 닫는다.

public static void main(String args[]){
//중략
}

5.2. else, catch, finally, while 은 닫은 중괄호 뒤에 줄을 바꾸지 않고 바로 작성한다.

if("".equals(pmText)){
	isNull = true;
}else{
	isNull = false;
}

5.3. 내용이 없는 빈 블럭의 경우 한 줄에서 열고 닫는 것을 허용한다.

public void close(){}

5.4. 조건문/반복문이 한줄로 끝나더라도 중괄호를 필수로 사용한다. 가독성을 높이기 위함.

if(exp == null) return false; //금지
if(exp == null){
    return false;
}

 

 

6. 줄바꿈(Line-wrapping)

6.1. package, import 는 한 줄로 쓴다.

6.2. 가로로 너무 길어서 보기 어려운 경우 구분하기 편한 위치에서 줄바꿈을 권장한다. 줄바꿈 후에는 들여쓰기를 한다.

    String message = user.getId() + "|" | log.getPrefix()
        + "|" + SUFFIX;

 

 

7. 빈 줄(Blank lines)

7.1. package 선언 후 빈 줄을 삽입한다.

7.2. import시 그룹별로 구분짓기 위해 빈줄을 삽입하는 것을 권장한다.

import java.util.List;

import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

7.3. 메소드 사이에 빈 줄을 삽입한다.

public void setId(int id) {
    this.id = id;
}

public void setName(String name) {
    this.name = name;
}

 

 

8. 공백(Whitespace)

8.1. 대괄호 뒤에 공백 삽입

int[] number = new int[] {0, 1, 2};

8.2. 식별자와 여는 소괄호 사이에 공백 삽입 금지

public String removeEndingDot(String original) {

8.3. 타입 캐스팅에 쓰는 소괄호 내부 공백 삽입 금지

String message = (String)rawLine;

8.4. 제네릭스 공백 처리 예제

public static <A extends Annotation> A find(AnnotatedElement elem, Class<A> type) { // 제네릭스 메서드 선언
    List<Integer> l1 = new ArrayList<>(); // '(' 가 바로 이어질때
    List<String> l2 = ImmutableList.Builder<String>::new; // 메서드 레퍼런스가 바로 이어질 때
    int diff = Util.<Integer, String>compare(l1, l2); // 메서드 이름이 바로 이어질 때
}

8.5. 콤마 뒤에 공백 삽입

display(level, message, i);

8.6. 이항 연산자, 삼항 연산자 앞 뒤에 공백 삽입

finalScore += weight * rawScore - absentCount;
isAbnormal(accessLog) ? AccessPattern.ABUSE : AccessPattern.NORMAL;

8.7. 단항연산자와 피연산자 사이에 공백 금지

++index;
!isMatch;

 

 

 

 

 

 

 

728x90