Cooperation/Conventions

Java Coding Convention & Clean Code Guide

Jcob.moon 2025. 5. 21. 18:21

1. 왜 컨벤션을 지켜야 할까?

1.1 가독성 향상

  • 일관된 스타일은 코드의 이해를 빠르게 합니다.
  • 예: 들여쓰기, 네이밍 규칙, 함수 정의 방식 등

1.2 유지보수성 증가

  • 시간 흐름에 따라 복잡해진 코드를 쉽게 유지보수 가능

1.3 협업 효율성 향상

  • 통일된 스타일 덕분에 다른 개발자도 코드를 빠르게 파악 가능

1.4 일관된 코드 스타일 유지

  • 새로운 팀원이 쉽게 적응할 수 있음

1.5 버그 발생 가능성 감소

  • 명확한 네이밍과 구조는 실수를 줄여줌

1.6 코드 리뷰 및 자동화 도구 연계

  • SonarQube, Linter 등 도구와의 궁합이 좋음

2. Coding Convention vs Clean Code

항목Coding ConventionClean Code

초점 형식과 구조 코드의 품질과 설계
목적 일관된 스타일 가독성, 유지보수성 향상
내용 들여쓰기, 공백, 네이밍 등 의미 있는 구조, 설계 원칙 적용
검사 방법 자동화 도구 코드 리뷰, 원칙 기반 판단

3. Java에서 자주 사용하는 컨벤션

3.1 네이밍 규칙

  • CamelCase: 변수, 메소드 (myVariable)
  • PascalCase: 클래스, 인터페이스 (MyClass)
  • Upper_Snake_Case: 상수 (MAX_LENGTH)

3.2 패키지

  • 모두 소문자, 언더바 사용 금지 (com.sparta.api)

3.3 클래스 & 인터페이스

  • PascalCase, 명사 기반 (Customer, Runnable)

3.4 변수 & 메소드

  • 변수: camelCase (userAge)
  • 메소드: 동사 시작 (calculateTotal(), isValid())

3.5 상수

  • 전부 대문자 + 언더바 (DEFAULT_TIMEOUT)

3.6 임시 변수도 명확하게 (parserHandler, inputParser)

4. 선언과 구성

4.1 import

  • 와일드카드 사용 지양 (import java.util.List;)
  • static import는 허용 (import static org.junit.*)

4.2 접근자 우선순위

  • public static final 순서로 선언

4.3 Annotation

  • 줄 바꿈하여 가독성 확보

4.4 라인당 선언 수

  • 한 줄에 하나의 변수만 선언

4.5 배열 선언

  • String[] names;를 권장

4.6 Long 리터럴

  • L 대문자 사용 (12345L)

5. 들여쓰기 & 중괄호 스타일

  • 기본 4칸 (스페이스 또는 탭)
  • {}는 항상 작성
  • 중괄호는 같은 줄에 열고, 다음 줄에 닫음

6. 줄바꿈 & 공백

  • 소괄호 열고 닫기 전에 공백 (if (value > 0) {...})
  • 연산자 앞에서 줄바꿈 (a + b, foo.bar().baz())
  • 메서드 체이닝 시 점(.) 앞에서 줄바꿈

7. 주석

7.1 단일 주석

  • 코드의 목적, 예외, 결과 경고 등

7.2 블록 주석

  • 복잡한 로직 또는 API 설명용

7.3 TODO

  • 개선 필요 영역 명시 (// TODO: 예외 처리 추가 필요)

7.4 의미 없는 주석 금지

  • 코드 자체로 설명되게 작성

8. 예외 처리

8.1 예외를 반환값 대신 사용

  • throw new IllegalArgumentException()

8.2 빈 catch 금지

  • 반드시 로깅 또는 재처리

8.3 복구 가능한 vs 불가능한 예외 분리

  • 파일 없음 → 기본값 사용, IO 오류 → 예외 던짐

8.4 호출자에게 문제 전달

  • throws 명시와 의미 있는 메시지 포함

8.5 구체적인 예외를 처리

  • catch(IOException) 대신 catch(FileNotFoundException)

8.6 null 반환 지양

  • Optional 또는 빈 객체 사용 (Collections.emptyList())

마무리

  • 컨벤션은 '팀의 언어'입니다. 팀이 하나의 언어로 소통해야 협업이 매끄러워집니다.
  • 클린 코드는 '개발자의 철학'입니다. 코드 자체가 설명이 되도록, 의도를 명확히 하는 것이 목표입니다.
  • 두 개념은 서로 보완적이며, 좋은 코드의 기반이 됩니다.