Skip to content

Java Code Convention 적용하기

Sean edited this page Apr 12, 2024 · 3 revisions

목차

  1. 새줄 문자 LF vs CRLF
  2. .editorconfig 파일 설정
  3. IntelliJ Checkstyle 적용
  4. IntelliJ Formatter 적용

1. 새줄 문자 LF vs CRFL

Unix 형식의 새줄 문자(newline)인 LF(Line Feed, 0x0A)을 사용한다.
Windows 형식인 CRLF가 섞이지 않도록 편집기와 GIT 설정 등을 확인한다. MDN Docs: CR LF

CR(Carriage Return): 커서를 현재 줄에서 가장 왼쪽으로 보냄
LF(Line Feed): 줄 바꿈

  • Windows: CRLF
  • Unix-like: LF

버전 관리와 새줄 문자 통일의 필요성

Git: Formatting and Whitespace

OS에 따라 새줄 문자가 바뀌는 경우, 수정 내역이 없는 파일에 대해 수정된 것으로 인식될 가능성이 존재한다.
따라서 협업간 이러한 문제가 발생하는 것을 방지하기 위한 설정이 필요하다.

  • IntelliJ에서 프로젝트를 생성하면, 새줄 문자는 LF로 표기된다.
    image
  • 원격 저장소에서 프로젝트를 clone하면, 새줄 문자는 CRLF로 표기된다.
    image

.gitattribute 파일 설정

.gitattribute

*.java text eol=lf
*.md text eol=lf
*.gitattribute text eol=lf

위 파일을 프로젝트 최상단에 추가한다.

2. .editorconfig 파일 설정 (현재 미적용)

EditorConfig

editorconfig는 여러 개발자가 하나의 프로젝트에서 작업할 때, 동일한 코드 스타일을 유지할 수 있게 도와준다.
IntelliJ는 별도 플러그인 설치가 필요없고, Eclipse는 플러그인 설치가 필요하다.

.editorconfig

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.java]
indent_size = 4
tab_width = 4

[*.{yml,yaml}]
indent_size = 2

이 파일을 프로젝트 최상단에 추가한다.

3. IntelliJ Checkstyle 적용 (현재 미적용)

Checkstyle은 코드 컨벤션을 검사하는 도구이다.
Maven 혹은 Gradle 등의 빌드 도구를 활용하여 컨벤션을 위배한 파일이 존재하면 빌드를 실패하게 만들 수 있다.
IDE를 사용해서 간편하게 XML 파일을 주입하는 방식으로 사용할 수도 있다.

build.gradle 설정 추가

plugins {
    id 'org.ec4j.editorconfig' version '0.0.3'
    id 'checkstyle'
    id 'java'
}

editorconfig {
    excludes = ['build']
}

checkstyle {
    maxWarnings = 0 // 코드 컨벤션 어길 시, 빌드 실패
    configFile = file("${rootDir}/titi-checkstyle-rules.xml")
    configProperties = ["suppressionFile" : "${rootDir}/titi-checkstyle-suppressions.xml"]
    toolVersion = "9.2"
}

check.dependsOn editorconfigCheck

compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'

규칙 파일 추가

Notion에서 규칙 파일 두 개를 내려받아 프로젝트 최상단에 추가한다.
image

플러그인 설치

IntelliJ에서 CheckStyle-IDEA 플러그인을 설치한다.
image

Settings > Tools > Checkstyle 에서 아래와 같이 설정한다.
image

Configuration File에 titi-checkstyle-rules.xml 파일을 추가한다.
image

다음 창에서 Property Value에 titi-checkstyle-suppressions.xml 을 추가한다.
image

마지막으로 추가한 Configuration File을 Active한다.
image

CheckStyle Scan

하단 CheckStyle탭에서 단일 파일/모듈/프로젝트 범위로 스캔을 할 수 있다.
탭 상단 Rules에서 생성한 규칙을 선택하고 스캔하면 아래와 같이 규칙에 위반한 내용을 상세하게 보여준다.
image

빌드 테스트

인덴트 규칙을 어기고 ./gradlew build 명령을 실행한 결과, 성공적으로 빌드에 실패한 것을 확인할 수 있다.
image

또한 .editorconfig 파일 규칙에 어긋난 경우는 ./gradlew editorconfigFormat 명령을 실행하면 자동으로 컨벤션에 맞게 수정해준다.
image

4. IntelliJ Formatter 적용

Settings > Editor > Code Style > Java 에서 Scheme를 titi-formatter.xml 파일로 설정한다.
image 이후 Ctrl + Alt + L 단축키를 누르면 자동 정렬 시 위의 formatter에 맞게 정렬된다.