🍀

2일차_컨벤션 정리하기

작성일자
Oct 20, 2023
태그
DIARY_DEVELOP
프로젝트
PreCourse
책 종류

1. 몰입

(1) 1주차 과제 README를 읽고 되짚어 봤다.

java-baseball-6
woowacourse-precourseUpdated Apr 2, 2024
💡
제출 전에 아래 내용들을 꼭 확인하자.
  • 과제 제출 전 체크 리스트
    • 요구사항에 명시된 출력값 형식 안 지키면 0점
      모든 테스트 성공 못하면 0점
      • 테스트 실행 가이드
        • java -version으로 버전 17인지 확인, 인텔리제이에서도 17로 실행되는지 확인
        • ./gradlew clean test 명령 실행할 때 모든 테스트 통과하는지 확인(BUILD SUCCESSFUL in 0s )
  • 미션 : 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항
    • 기능 요구 사항 (하단의 별도 섹션에서 정리)
    • 프로그래밍 요구 사항
      • JDK17에서 정상 동작 안하면 0점
        실행 시작점은 Application.main()
        build.gradle 파일 변경 불가
        외부 라이브러리 사용 불가
        Java 코드 컨벤션 가이드 준수 (🐱 이 부분은 따로 정리를 한 번 하자)
        프로그램 종료 시 System.exit() 호출하지 않기
        ApplicationTest의 모든 테스트 성공 안하면 0점
        파일, 패키지 이름 수정하거나 이동하지 않기
        camp.nextstep.edu.missionutils에서 제공하는 Randoms 및 Console API를 사용하여 구현하기
        • Random 값 추출은 camp.nextstep.edu.missionutils.Randoms의 pickNumberInRange() 활용
        • 사용자가 입력하는 값은 camp.nextstep.edu.missionutils.Console의 readLine() 활용
    • 과제 진행 요구 사항
      • 기능 구현 전 docs/README.md에 구현할 기능 목록 정리

(2) cleancode 체크리스트를 읽고 되짚어봤다.

한 메서드에 오직 한 단계의 들여쓰기만 허용했는가?
else 예약어를 쓰지 않았는가?
모든 원시값과 문자열을 포장했는가?
콜렉션에 대해 일급 콜렉션을 적용했는가? → 2주차부터 적용해줬다
3개 이상의 인스턴스 변수를 가진 클래스를 구현하지 않았는가?
핵심 로직 구현하는 도메인 객체에 getter/setter 없이 구현했는가? (DTO는 예외) → 콜렉션 클래스에만 허용해줬다..
메소드의 인자 수 최소로 제한했는가? (최대 3개)
코드 한 줄에 점을 하나만 허용했는가? (디미터 법칙) → 못지켰다..
메소드가 한 가지 일만 담당하도록 구현했는가?
클래스를 작게 유지하기 위해 노력했는가?

(3) 자바 코드 컨벤션을 정리해봤다.

🚀
과제 시작 전 어느 정도 유념하고 넘어가면 좋을 큼직한 것들만 정리했다. 디테일한 내용까지 전부 포함해서는 과제 기능 구현을 마친 후 리팩토링 전에 완전히 포스팅 따로 파서 정리해보려 한다. (🐱 는 구글 가이드랑 다른 부분)
  • 소스파일
    • 소스파일 이름은 최상위 클래스 포함하는 대소문자로 구별하는 이름으로 짓기
    • 소스파일 내 코드들은 라이센스나 저작권 정보 > 패키지 구문 > 임포트 구문 > 최상위 클래스의 순서로 구성하기 (하나의 빈 줄로 각 섹션 구분하기)
    • 패키지 구문은 줄바꿈 하지 않기
    • 임포트 구문 역시 줄바꿈하지 않고, 와일드 카드 임포트나 static 같은 것들 사용하지 않기
  • 클래스
    • 소스 파일마다 최상위 클래스 하나를 정의하기
    • 멤버들과 초기화 순서는 각자 논리적으로 정하기(새로운 메서드 마지막에 붙이는 방식은 바람직 x)
    • 생성자나 동일한 이름을 가진 메서드들은 모아서 연속적이게 두기(private 멤버일지라도)
  • 포맷팅
    • if, else, for, do, while 구문에 대해 몸체가 없거나 한 줄의 구문에도 괄호 쓰기
    • 괄호 쓸 땐 여는괄호앞:개행X, 여는괄호뒤:개행O, 닫는괄호앞:개행O, 닫는괄호뒤:개행O(메소드,생성자,클래스)/개행x(else,콤마뒤) 형태로 쓴다. (Enum은 예외)
    • 🐱 블록 열면 들여쓰기(스페이스 4번) 하기
    • 🐱 120자 넘어가면 개행 넣기 ("문자"는 유니코드 코드 포인트를 의미)
    • 🐱 클래스의 첫 번째 멤버나 초기화 앞에 있는 빈줄은 자유롭게 넣기
    • 예약어(if, for, catch)와 괄호 사이, 닫힌 중괄호와 예약어 사이에 공백 넣기
    • for 루프 헤더를 제외한 경우, 변수는 하나씩만 선언하기 (int a, b; 쓰지 않기)
    • 지역변수는 사용되는 지점 근처에서 선언하고, 초기화자 갖게 하거나 선언 바로 다음에 즉시 초기화하기
    • 배열 초기화는 블록 구조처럼 하기
    • 배열 선언 시 대괄호는 타입에 붙이기 (String[] args 사용 O, String args[] 사용 X)
  • 네이밍
    • 변수명은 문자, 숫자, _ 만 사용하고, 특수 접두사 또는 접미사는 사용하지 않기
    • 패키지명은 모두 소문자로 작성하기
    • 클래스명은 UpperCamelCase로 작성하고 명사 또는 명사구를 사용하기 (인터페이스명은 때론 형용사 또는 형용사구도 가능)
    • 테스트클래스명은 테스트 중인 클래스명으로 시작하고 Test를 끝에 붙여주기
    • 메서드명은 lowerCamelCase로 작성하고 동사 또는 동사구를 사용하기
    • JUnit 테스트메서드명은 밑줄을 사용해 논리적 구성 요소 구분하고, 각 구성 요소는 lowerCamelCase로 작성하기
    • 상수명은 CONSTANT_CASE로 작성하기
    • 파라미터명은 lowerCamelCase로 작성하고 한 문자로 작성하지 않기
    • 지역변수명은 lowerCamelCase로 작성하고 final, 불변인 경우도 상수로 간주하지 않기
    • Type변수명은 단일 대문자 / 단일 대문자 + 단일 숫자 / 클래스 형식 이름 + 대문자 T 중 택하기

(4) 커밋컨벤션을 정했다.

  • feat : 기능과 관련된 것(기능에 변화를 줌). 새로운 기능 추가.
    • 요구사항 변경으로 기존 기능을 추가, 수정, 삭제
  • fix : 코드 상 에러, 버그 픽스
  • refactor : 기능과 관련되지 않은 것(기능에 변화 주지 않음).
    • 기능 변화 아닌 코드 리팩토링
    • 파일 추가/이동/이름 변경/삭제
  • docs : 문서 추가/수정. 주석 추가/수정
  • style : 개행, 들여쓰기, 공백..
  • test : 테스트 코드 추가/변경
  • chore: 배포, 빌드 작업
  • release : 패키지 버전 올릴 때
  • init : 프로젝트 초기 설정

Today in 프리코스

TIL 작성하기
몰입
1주차 과제 문제 읽기
코드 컨벤션 큼직한 것 위주로 정리하기
동반성장
커뮤니티에 오늘 올라온 글들 읽기
🚀
오늘의 각오
  • 즐겁게 코딩하자!
  • 급하게 생각하지 말고 천천히 음미하면서 프리코스에 임하자!
 
오늘 구현을 바로 들어가려 했는데,
코딩 컨벤션 읽고 정리하는게 재밌어서 생각보다 여기에 시간을 많이 쏟아버렸다,,,
물론 구현 후 보나 지금 보나 어쨌든 보긴 해야 했던 거라 괜찮다고 생각한다.
그렇지만 내일은 꼭 구현에 들어가자. 더 늦어지면 리팩토링할 시간이 부족할 거 같다
 
🍀
1일차_둘러보기, 환경설정하기
Oct 19, 2023
DIARY_DEVELOP
🍀
2일차_컨벤션 정리하기
Oct 20, 2023
DIARY_DEVELOP
🍀
3일차_설계에 대해 고민하기
Oct 21, 2023
DIARY_DEVELOP
🍀
4,5일차_MVC 온전히 이해하기
Oct 22, 2023
DIARY_DEVELOP
🍀
6일차_설계를 코드로 구현하기
Oct 24, 2023
DIARY_DEVELOP
🍀
7일차_리팩토링과 마무리하기
Oct 25, 2023
DIARY_DEVELOP
🍀
8,9일차_코드 리뷰 통해 객체지향에 다가가기
Oct 27, 2023
DIARY_DEVELOP
🍀
10일차_지난 과제 돌아보며 객체지향 이해하기, 의존성과 설계의 관계 맛보기
Oct 28, 2023
DIARY_DEVELOP
🍀
11일차_객체지향을 미션 설계에 적용하기(with [책] 객체 지향의 사실과 오해)
Oct 29, 2023
DIARY_DEVELOP
🍀
12일차_기능 별로 구현하며 단위 테스트의 필요성 느끼기 (with [책]자바와 JUnit을 활용한 실용주의 단위 테스트)
Oct 30, 2023
DIARY_DEVELOP
🍀
13,14일차_일급 컬렉션과 레코드 적용해 리팩토링하기
Oct 31, 2023
DIARY_DEVELOP
🍀
15, 16일차_코드 리뷰를 통해 성장하기(1)_다른 사람의 코드 읽으면 배운 것 정리
Nov 2, 2023
DIARY_DEVELOP
🍀
17일차_코드 리뷰를 통해 성장하기(2)_내 코드 개선하며 배운 것 정리
Nov 4, 2023
DIARY_DEVELOP
🍀
18일차_내가 찾은 설계 방법 공유하기, 공유에 대해 고민하기
Nov 5, 2023
DIARY_DEVELOP
🍀
19일차_지난 과제 피드백 고려해 설계하기
Nov 6, 2023
DIARY_DEVELOP
🍀
20, 21일차_일단 돌아가는 코드를 만들기
Nov 7, 2023
DIARY_DEVELOP
🍀
22일차_현재 도움이 될 것 생각하기 (디자인패턴과 mvc2 과감히 패스)
Nov 9, 2023
DIARY_DEVELOP
🍀
23일차_코드리뷰하기 (feat. converter 파고들기)
Nov 10, 2023
DIARY_DEVELOP
🍀
24일차_기획을 문서화하기
Nov 11, 2023
DIARY_DEVELOP
🍀
25일차_설계하며 고민하기
Nov 12, 2023
DIARY_DEVELOP
🍀
26, 27일차_구현하며 고민하기
Nov 13, 2023
DIARY_DEVELOP
2일차_컨벤션 정리하기