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