전체 보기
🍀

2일차_컨벤션 정리하기

작성일자
2023/10/20
태그
DIARY_DEVELOP
프로젝트
PreCourse
책 종류
1 more property

1. 몰입

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

java-baseball-6
woowacourse-precourse
제출 전에 아래 내용들을 꼭 확인하자.
과제 제출 전 체크 리스트
요구사항에 명시된 출력값 형식 안 지키면 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주차 과제 문제 읽기
코드 컨벤션 큼직한 것 위주로 정리하기
동반성장
커뮤니티에 오늘 올라온 글들 읽기
오늘의 각오
즐겁게 코딩하자!
급하게 생각하지 말고 천천히 음미하면서 프리코스에 임하자!
오늘 구현을 바로 들어가려 했는데,
코딩 컨벤션 읽고 정리하는게 재밌어서 생각보다 여기에 시간을 많이 쏟아버렸다,,,
물론 구현 후 보나 지금 보나 어쨌든 보긴 해야 했던 거라 괜찮다고 생각한다.
그렇지만 내일은 꼭 구현에 들어가자. 더 늦어지면 리팩토링할 시간이 부족할 거 같다
Search
1일차_둘러보기, 환경설정하기
2023/10/19
DIARY_DEVELOP
1일차_둘러보기, 환경설정하기
2023/10/19
DIARY_DEVELOP