User Tools

Site Tools


java_스타일_가이드

목차

  1. 소스 파일 기본 사항
  2. 소스 파일 구조
  3. 서식
  4. 이름 지정
  5. 프로그래밍 사례
  6. JavaDoc

1. 소스 파일 기본 사항


* 파일이름

- 소스파일 이름은 대소문자를 구분하는 최상위 클래스의 이름이며 .java확장자를 더한다.

* 파일 인코딩

- 소스 파일은 UTF-8로 인코딩됩니다.

* 특수 문자

1. 공백 문자

- ASCII 수평 공백 문자(0x20)는 소스 파일의 아무 곳이나 나타나는 유일한 공백 문자입니다. 이것은 다음을 의미합니다 :

 문자열 그리고 문자 리터럴 안의 모든 다른 공백 문자는 ASCII문자로 바뀝니다.

2. 특별한 이스케이프 시퀀스

- 특별한 이스케이프 시퀀스가 있는 모든 문자 (\b, \t, \n, \f, \r, \“, \' and \\)는 해당진수(e.g. \012) 또는 유니코드(e.g \u000a) 이스케이프 보다 더 사용합니다.

2. 소스 파일 구조


* Package statement

- 패키지 문은 line-wrapped 하지 않습니다.

* Import statements

1. No wildcard imports

- wildcard imports(여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호)를 사용하지 않습니다.

2. No line-wrapping

- Import문은 line-wrapped을 하지 않습니다.

3. Ordering and spacing

- import문은 구분되어 나누어집니다.

  1. 모든 static imports는 단일 그룹입니다.
  2. com.eyeq imports(소스파일이 com.eyeq 패키지 공간에 있는 경우에만 import할 수 있습니다.)
  3. import문의 첫번째 레벨의 그룹에서 세번째 레벨에 의해 정렬해야 합니다.
    1. ex) android, com. junit, org, sun
  4. java imports
  5. javax imports

* 클래스 선언

1. 정확히 하나의 최상위 클래스 선언

- 자신의 소스파일 안에는 각각의 최상위 클래스가 존재합니다.

2. 클래스 멤버 호출

- 클래스의 멤버는 new연산자를 이용해 호출할 수 있다.

2-1. Overloads

- Class가 여러개의 생성자, 같은이름의 여러개의 메소드를 가지고 있을 때, 연속적으로 작성해야 합니다.

3. 서식


* Eclipse의 기본적인 convention을 따릅니다. (ctrl + shift + f)

* {}

1. {} 사용하는 옵션

- {} 는 if, else, for, do, while에서 사용되며, body가 비어있거나 단 하나의 문장을 포함하는 경우에도 사용됩니다.

2. 비어있지 않은 블록 : K & R style

- 여는 중괄호 전에 줄을 바꾸지 않습니다.

- 여는 중괄호 후에 줄을 바꿉니다.

- 닫는 중괄호 전에 줄을 바꿉니다.

- 닫는 중괄호 후 줄을 바꾸는 경우는 메소드, 생성자의 body가 열릴 때 입니다.

- 닫는 중괄호 후 줄을 바꾸지 않는 경우는 ',' 또는 else 문일 때 중괄호를 다시 열고 줄을 바꿉니다.

public class Eyeq {
 
    public void method() {
        int i = 0; 
        if (i < 3) {
            System.out.println("example");
        } else {
            return;
        }
    }
}

* 블록 들여쓰기 & 라인 길이 제한

- { 앞 뒤의 공백, 블록 안의 들여쓰기는 +4 spaces 입니다.

- 라인의 길이는 화면상에서 벗어나지 않으면 됩니다.

* 라인당 하나의 문장

- 라인당 하나의 문장이 올 수 있습니다. 이 후에는 줄 바꿈을 시행합니다.

* 공백

1. 수직 공백

- 하나의 빈 줄을 추가 :

- 연이은 클래스 의 멤버사이 : fields, constructors, methods, nested classes, static initializers, instance initializers.

- 연속적인 빈 줄은 필요하지 않습니다.

2. 수평 공백

  1. if, for, catch 같은 예약어를 분리 하여 ( 를 사용할 때 한 칸의 공백을 넣어줍니다.
  2. else, catch 같은 예약어를 분리 하여 } 로 닫을 때 한 줄 아래에 넣어줍니다.
  3. 중괄호 전에 소괄호가 있을 때는 사이에 공백을 넣지 않습니다.

@SomeAnnotation({a, b})

   String[][] x = {{"foo"}};
 - &, |, foreach의 : 에 양쪽에 공백을 넣어줍니다.
 - , : ; 후 또는 닫는 괄호 ) 뒤에 문장이 있을 경우 공백을 넣어 줍니다.
 - // 양쪽에 공백을 넣어 줍니다.
 - 타입과 변수 선언 시 : List<String> list
 - 배열 선언 시 : new int[] {5, 6}

* 특정 구조

1. Enum classes

private enum Suit { 
    CLUBS,
    HEARTS, 
    SPADES, 
    DIAMONDS 
}

2. 변수 선언

2-1. 선언당 하나의 변수

- 변수(field or local)선언을 할 때 한꺼번에 여러개의 변수가 아닌 하나의 변수를 선언해야 합니다.

2-2. 필요할 때 가능한 한 빨리 초기화 선언

- 지역변수는 자신의 포함 된 블록 또는 블록과 같은 구조에서 시작할 때 선언됩니다.

- 대신 지역변수는 그 범위를 최소화하기 위해 근처에 그들이 먼저 사용 된 점에 선언되어 있습니다.

- 지역변수의 선언은 선언 직후에 초기화됩니다.

3. 배열

3-1. 배열 초기화 : “블록 같이” 할 수 있습니다.

new int[] {
    0, 1, 2, 3
}

3-2. No C-style array declarations

- 대괄호의 위치는 타입의 뒤에 위치해야 합니다 : String[] args

4. Switch 문

- break문이 없으면 Fall-through 가 됩니다.

int input = 2;
 
switch (input) {
    case 1:
    case 2:
        prepareOneOrTwo();
        // fall through
    case 3:
        handleOneTwoOrThree();
        break;
    default:
        handleLargeNumber(input);
}

5. Annotations

- Annotations은 클래스, 메소드 또는 생성자에 적용되는 문서 블록 바로 뒤에 쓰여진다. (한 줄에 하나의 Annotations이다.)

@Override
@Nullable
public String getNameIfPresent() {
    ....
}

6. Comments

* 한 줄 주석은 / / 으로 두 줄 이상 주석은 /* … */ 으로 작성합니다.

// 한 줄 주석
 
/*
 * 여러줄 
 * 주석
 */

7. Numeric Literals

- long 타입의 값은 숫자와의 혼동을 피하기 위해 l 대신 L 로 사용합니다.

long exam = 300000000L;

4. 이름 지정


* 식별자 타입의 규정

1. Package names

- Package이름은 모두 소문자로, 연속단어도 단순히 그대로 연결합니다. 예를 들어 :

com.example.deepspace

2. Class names

- Class 는 UpperCamelCase로 작성합니다.

- Class 이름은 명사 또는 명사구입니다. interface 이름도 명사 또는 명사구 ex) List, 때로는 형용사 또는 형용사구 ex) Readable 일 수도 있습니다.

3. Method names

- Method 는 lowerCamelCase로 작성합니다.

- Method 이름은 동사나 동사구입니다. ex) sendMessage 또는 stop

4. Constant names

- 상수 이름은 밑줄로 구분된 단어를 사용하고 모두 대문자로 작성합니다.

- 상수 이름은 보통 명사 또는 명사구입니다.

- 모든 상수는 static final field입니다. 하지만 static final field가 모두 상수인 것만은 아닙니다.

- 상수인 경우 선택하기 전에 정말로 상수로 쓰여질 것인지 생각을 해봐야 합니다.

// Constants
static final int NUMBER = 5;
static final SomeMutableType[] EMPTY_ARRAY = {};
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
 
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final String[] nonEmptyArray = {"these", "can", "change"};

5. Non-constant field names

- 상수가 아닌 필드 이름은 lowerCamelCase로 작성합니다.

- 필드 이름은 명사 또는 명사구입니다.

6. Parameter names

- 매개 변수는 lowerCamelCase로 작성합니다.

- 하나의 문자로 된 매개 변수 이름은 피해야합니다.

7. Local variable names

- 지역 변수는 lowerCamelCase로 작성합니다. 다른 유형보다 더 자유롭게 단축할 수 있습니다.

- 하나의 문자로 된 이름은 looping 변수를 제외하고는 피해야합니다.

- 상수로 간주되지 않으며, 상수 스타일로 사용해서는 안됩니다.

5. Programming Practices


* @Override: 항상 사용

- Method는 superclass Method를 override하는 class method, interface method를 implementing하는 class method, superinterface method를 다시 명시하는 interface method에 @Override 어노테이션이 사용됩니다.

- 예외 부모 method가 @Deprecated인 경우 @Override를 사용하지 않습니다.

* Caught exceptions: not ignored

- catch exception이 발생하면 아무것도 하지 않는 경우가 드물지만 맞는 코드입니다.

- catch block안에 타당한 이유를 comment로 달아줘야 합니다.

try {
    int i = Integer.parseInt(response);
    return handleNumericResponse(i);
} catch (NumberFormatException ok) {
    // it's not numeric; that's fine, just continue
}
return handleTextResponse(response);

- 예외

이름이 expected이면 예외 발생은 comment 없이 무시될 수 있습니다.

try {
    emptyStack.pop();
    fail();
} catch (NoSuchElementException expected) {
 
}

6. JavaDoc


* 서식

1. 일반적인 형식

/**
 * JavaDoc 텍스트의 여러라인이 여기에 기록됩니다.
 * 일반적으로 wrapping됩니다.
 */
public int method(String p1) {
    ... 
}

2. 단락

- 단락과 단락 사이의 *으로 하나의 비어있는 라인을 넣어줍니다.

3. @-조항

- 표준 @-조항은 @param, @return, @throws, @deprecated 순서대로 사용되어 나타냅니다. 그리고 이 네개의 유형은 비어있는 설명이면 표시되지 않습니다.

- 설명이 한 줄을 넘어가면 다음 줄은 @로 부터 +4 spaces 위치에서 작성합니다.

* The summary fragment

- JavaDoc는 각 class 그리고 member가 시작할 때 짧은 요약입니다. 이것은 명사구 또는 동사구문이 아닌 완전한 문장입니다.

/** 
 * Returns the customer ID. 
 */

* JavaDoc을 사용하는 위치

- 최소한, JavaDoc은 모든 public 클래스에서 존재해야 합니다. 그리고 몇가지 예외를 제외하고 public, protected 클래스 위에 명시 되어있어야 한다.

- 예외 : self-explanatory methods, overrides

- method 이름이 자신을 설명하여 나타내는 경우

- JavaDoc은 항상 상위타입 클래스의 메소드를 override한 메소드를 나타내지 않습니다.

java_스타일_가이드.txt · Last modified: 2015/05/15 11:17 by nmaruchi