-
Notifications
You must be signed in to change notification settings - Fork 1
4. Convention
클래스 이름은 단어의 첫 글자를 대문자로 시작하는 대문자 카멜표기법(Upper camel case)을 사용합니다.
public class Reservation {}
public class AccessToken {}
클래스 이름은 명사나 명사절로 짓습니다.
인터페이스(interface)의 이름은 클래스 이름은 명사/명사절로 혹은 형용사/형용사절로 짓습니다.
public interface RowMapper {}
public interface AutoClosable {}
메서드의 이름에는 첫 번째 단어를 소문자로 작성하고, 이어지는 단어의 첫 글자를 대문자로 작성하는 소문자 카멜표기법(Lower camel case)를 사용합니다. 테스트 클래스의 메서드 이름에서는 언더스코어를 허용합니다.
메서드명은 기본적으로는 동사로 시작합니다. 다른 타입으로 전환하는 메서드나 빌더 패턴을 구현한 클래스의 메서드에는 전치사를 쓸 수 있습니다.
- 동사사용 :
renderHtml()
- 전환메서드의 전치사 :
toString()
- Builder 패턴 적용한 클래스의 메서드의 전치사 :
withUserId(String id)
상수가 아닌 클래스의 멤버변수/지역변수/메서드 파라미터에는 소문자 카멜표기법(Lower camel case)을 사용합니다.
private boolean authorized;
private int accessToken;
클래스, 필드, 메서드, 변수값, import문 등의 소스 구성요소를 선언할 때 고려해야할 규칙입니다.
나쁜예
int base = 0; int weight = 2;
좋은예
int base = 0;
int weight = 2;
long base = 54423234211L;
조건, 반복문이 한 줄로 끝더라도 중괄호를 활용합니다. 이 문서에 언급된 중괄호의 전후의 공백, 제어문 앞 뒤의 새줄 규칙도 함께 고려합니다.
나쁜예
if (exp == null) return false;
for (char ch : exp.toCharArray()) if (ch == 0) return false;
좋은예
if (exp == null) {
return false;
}
for (char ch : exp.toCharArray()) {
if (ch == 0) {
return false;
}
}
줄바꿈은 작성한 명령어가 줄 너비를 초과했을 경우 코드 가독성을 위해서 강제로 줄을 바꾸는 것을 말합니다.
줄바꿈 이후 이어지는 줄에서는 최초 시작한 줄에서보다 적어도 1단계의 들여쓰기를 더 추가합니다.
AbstractAggregateRootTest.AggregateRoot proxyAggregateRoot =
em.getReference(AbstractAggregateRootTest.AggregateRoot.class, aggregateRoot.getId());
메서드의 선언이 끝난 후 다음 메서드 선언이 시작되기 전에 빈줄을 삽입합니다.
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
여는 중괄호({
) 앞에는 공백을 삽입합니다. 닫는 중괄호(}
) 뒤에 else ,catch 등의 키워드가 있을 경우 중괄호와 키워드 사이에 공백을 삽입합니다.
public void printWarnMessage(String line) {
if (line.startsWith(WARN_PREFIX)) {
...
} else {
...
}
}
if, for, while, catch, synchronized, switch
와 같은 제어문 키워드의 뒤에 소괄호((...)
)를 선언하는 경우, 시작 소괄호 앞에 공백을 삽입합니다.
if (maxLine > LIMITED) {
return false;
}
식별자와 여는 소괄호((
) 사이에는 공백을 삽입하지 않습니다. 생성자와 메서드의 선언, 호출, 애너테이션 선언 뒤에 쓰이는 소괄호가 그에 해당합니다.
나쁜예
public StringProcessor () {} // 생성자
@Cached ("local")
public String removeEndingDot (String original) {
assertNotNull (original);
...
}
좋은예
public StringProcessor() {} // 생성자
@Cached("local")
public String removeEndingDot(String original) {
assertNotNull(original);
...
}
String message = (String)rawLine;
type: Subject (제목)
# 한줄 띄우기
body (본문)
# 한줄 띄우기
footer (꼬리말)
타입은 태그와 제목으로 구성되고 태그는 영어로 쓰되 첫 문자는 대문자로 합니다.
-
Feat
: 새로운 기능 추가 -
Fix
: 버그 수정 -
Docs
: 문서 수정 -
Style
: 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우 -
Refactor
: 코드 리팩토링 -
Test
: 테스트 (테스트 코드 추가, 수정, 삭제, 로직에 변경이 없는 경우) -
Chore
: 위에 걸리지 않는 기타 변경사항 (빌드 스크립트 수정, assets image, 패키지 매니저 등) -
Design
: CSS 등 사용자 UI 디자인 변경 -
Comment
: 필요한 주석 추가 및 변경 -
Init
: 프로젝트 초기 생성 -
Rename
: 파일 혹은 폴더명 수정하거나 옮기는 경우 -
Remove
: 파일을 삭제하는 작업만 수행하는 경우
- 제목은 크게 최대 50글자가 넘지 않도록 하고 마침표 및 특수 기호는 사용하지 않습니다.
- 영문사용시
동사원형
을 사용하고 첫 글자는 대문자로 표기합니다. (과거시제를 사용하지 않습니다.) - 제목은
개조식 구문
으로 작성합니다. (완전한 서술형 문장이 아닌 간결하고 요점적인 서술을 의미)
- 본문은 한 줄 당 72자 이내로 작성합니다.
- 본문 내용은 양에 구애받지 않고 최대한 상세히 작성합니다.
- 본문 내용은 어떻게 변경했는지 보다
무엇을
,왜
변경했는지를 설명합니다.
- 꼬릿말은 아래의 규칙을 지킵니다.
-
유형: #이슈 번호
의 형식으로 작성 - 이슈 트래커 ID를 작성
- 여러개의 이슈 번호는
쉼표(,)
로 구분 - 이슈 트래커 유형은 아래와 같습니다.
-
Fixes
: 이슈 수정중 (아직 해결되지 않은 경우) -
Resolves
: 이슈를 해결했을 때 사용 -
Ref
: 참고할 이슈가 있을 때 사용 -
Related to
: 해당 커밋에 관련된 이슈번호 (아직 해결되지 않은 경우) - 예시) Footer에
Fixes #1
이라고 작성하고 commit을 할 경우, 자동으로issue #1
과 매칭됩니다. 또한,Resolves: #1
으로 이슈를 해결했다고 명시하면 그 이슈는 사라집니다.
-
Feat: Add signin, signup
회원가입 기능, 로그인 기능 추가
Resolves: #1
-
main
: 제품으로 출시될 수 있는 브랜치 -
develop
: 다음 출시 버전을 개발하는 브랜치 -
feature
: 기능을 개발하는 브랜치 -
release
: 이번 출시 버전을 준비하는 브랜치 -
hotfix
: 출시 버전에서 발생한 버그를 수정 하는 브랜치
처음에는 main과 develop 브랜치가 존재합니다. develop 브랜치는 main에서부터 시작된 브랜치입니다. develop 브랜치에서는 상시로 버그를 수정한 커밋들이 추가됩니다. 새로운 기능 추가 작업이 있는 경우 develop 브랜치에서 feature 브랜치를 생성합니다. feature 브랜치는 언제나 develop 브랜치에서부터 시작하게 됩니다. 기능 추가 작업이 완료되었다면 feature 브랜치는 develop 브랜치로 merge 됩니다. develop에 이번 버전에 포함되는 모든 기능이 merge 되었다면 QA를 하기 위해 develop 브랜치에서부터 release 브랜치를 생성합니다. QA를 진행하면서 발생한 버그들은 release 브랜치에 수정됩니다. QA를 무사히 통과했다면 release 브랜치를 main과 develop 브랜치로 merge 합니다. 마지막으로 출시된 main 브랜치에서 버전 태그를 추가합니다.
참고 문서
https://naver.github.io/hackday-conventions-java
https://chlolisher.tistory.com/173
https://techblog.woowahan.com/2553/