[자바] 코드 컨벤션

2020. 4. 6. 22:20TIL/자바

협업을 하다보면 코드를 구현하는 시간보다 동료의 코드를 이해하는 시간이 더 오래 걸릴 때가 있다.

코드 컨벤션은 기본적으로 언어마다 지켜야 할 규칙이 있지만 그 이외의 부분에서는 팀원들과 상의하여 규칙을 모두 정해야 한다.

코드 컨벤션 규칙을 정하고 협업을 시작하면 유지보수 하는데에도 상대적으로 적은 시간이 걸릴 것이다.

매우 상세한 내용보다는 내가 프로그래밍을 하면서 스스로 신경써야겠다고 생각한 부분들에 대해 먼저 적어두려고 한다.

 

1. 클래스 명은 대문자로, 메소드 명은 소문자로 시작하기

: 앞글자만 보고도 클래스인지 메소드인지를 구분할 수 있게 된다.

 

2. 패키지 명은 소문자로 시작하며, 가급적 한 단어로 구성한다.

: 두 단어가 필요하다는 생각이 드는 순간 잘못된 이름으로 생각하자. 

  굳이 두 단어를 이용해야 한다면 패키지 안에 패키지를 추가하자.

예) buylotto 라면 buy패키지안에 lotto패키지를 만들어서 buy.lotto 로 접근한다.

 

3. 메소드 분리

1) 한 메소드에는 최대한 한 가지의 작업만 하도록 구현하고, 작업과 관련된 이름으로 메소드의 이름을 설정한다.

2) 메소드 안의 코드는 top-down 방식으로 구현한다. 코드의 흐름이 위에서 아래로 자연스럽게 흘러가도록 해야 한다.

3) 메소드의 이름은 서술적으로 지어야 한다. 메소드 내의 여러 작업이 있다면 and와 같은 단어를 사용해도 된다. 

    다만, 여러 동작을 하는 메소드라면 그 메소드를 더 작게 나눌 수는 없을지 고민해 봐야한다.

4) 메소드의 인자는 0개인 것이 이상적이다. 1~2개는 일반적이며 3개는 가급적 피해야 하고, 4객부터는 불가능하다고 생각하고 코드를 구현해야 한다.  인자가 많아진다면 클래스 객체로 추출하는 것을 고민해야 한다.

예) draw(int x, int y, int radius) 라는 메소드는 draw(circle) 이런 식으로 Circle 객체를 draw의 인자로 넘기는 것이 좋다.

5) side effect를 일으키는 메소드는 가급적 피한다. 

6) 중복코드를 없애고 하나의 메소드로 따로 구현하는 것이 좋다.

 

4. Test Code를 작성하기 쉽도록 코드를 작성한다.

1) void보다는 반환 값이 존재하는 함수로 구현하는 것이 좋다. 그래야 테스트 코드를 통해 값을 확인 할 수 있다.

2) 불확실성을 없애야 한다.

3) 테스트하기 쉬운 코드와 테스트하기 어려운 코드로 메소드를 최대한 분리해야 한다.

 

5. Intellij 개발툴에서 cmd + option + L 단축키를 통해 컨벤션을 적용 시킬 수 있다. ( 일부 ) 

 

6. 들여쓰기

4개의 빈 칸(space)를 들여쓰기 단위로 사용한다. 들여쓰기의 정확한 구현(빈 칸을 사용하거나 탭을 사용하거나)은 정해져 있지 않다. 탭은 4개의 빈 칸이 아니라, 8개의 빈 칸으로 설정하는 것이 좋다.

 

7. 줄 나누기

하나의 식이 한 줄에 들어가지 않을 때에는, 다음과 같은 일반적인 원칙들을 따라서 두 줄로 나눈다.

  • 콤마 후에 두 줄로 나눈다.

  • 연산자(operator) 앞에서 두 줄로 나눈다.

8. 초기화

지역 변수의 경우, 지역 변수를 선언할 때 초기화 하는 것이 좋다. 변수의 초기화 값이 다른 계산에 의해서 결정되는 경우라면, 변수를 선언할 때 초기화 하지 않아도 괜찮다.

 

9. 선언문의 배치

선언은 블록의 시작에 위치해야 한다(보통 블록은 중괄호 "{ }" 로 둘러싸인 코드를 의미한다).

변수를 처음 사용할 때까지 변수의 선언을 미루면 혼돈에 빠질 수 있고, 영역내에서 코드를 이동해야 하는 경우에 문제를 야기시킬 수 있다.

void print() {
	int apple; // 블록의 시작에 선언
   	int banana;	
        ...
}



10. 클래스와 인터페이스의 선언

자바 클래스와 인터페이스를 선언할 때, 다음 3가지 원칙을 따르도록 하자

  • 메서드 이름과 그 메서드의 파라미터 리스트의 시작인 괄호 "(" 사이에는 빈 공간이 없어야 한다.

  • 여는 중괄호는 클래스/인터페이스/메서드 선언과 동일한 줄의 끝에 사용하자

  • 닫는 중괄호 "}" 는 여는 중괄호 "{" 후에 바로 나와야 하는 null 문의 경우를 제외하고는, 여는 문장과 동일한 들여쓰기를 하는 새로운 줄에서 사용하자

  • 메서드들을 구분하기 위해서 각 메서드들 사이에는 한 줄을 비우도록 하자

void print(int apple) {
	...
}

void eat(int banana) {
	...
}

11. 중괄호 생략은 피하자

if (true)    // 이런식으로 중괄호를 생략하는 것은 좋지 않다.
	return ; 

12. if - else if - else문

괄호들간의 간격과, 새로 시작하는 else if 또는 else와 괄호간의 간격에 주목.

이러한 간격 들은 for문, while문, do - while문 등에도 동일하게 적용된다.

if (condition1) {
	...
} else if {
	...
} else {
	...
}

 

 

'TIL > 자바' 카테고리의 다른 글

[자바] 로또 게임 구현  (0) 2020.05.18
[자바] Java와 JVM  (0) 2020.05.06
[자바] getter메소드 사용을 지양하자  (0) 2020.04.25
[테스트] JUnit 과 AssertJ  (0) 2020.04.23
[자바] 레이싱 게임 구현  (0) 2020.04.22