1. 몰입
(1) 1주차 과제 README를 읽고 되짚어 봤다.
제출 전에 아래 내용들을 꼭 확인하자.
•
과제 제출 전 체크 리스트
요구사항에 명시된 출력값 형식 안 지키면 0점
모든 테스트 성공 못하면 0점
•
테스트 실행 가이드
◦
java -version으로 버전 17인지 확인, 인텔리제이에서도 17로 실행되는지 확인
◦
./gradlew clean test 명령 실행할 때 모든 테스트 통과하는지 확인(BUILD SUCCESSFUL in 0s )
•
미션 : 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항
◦
기능 요구 사항 (하단의 별도 섹션에서 정리)
◦
프로그래밍 요구 사항
JDK17에서 정상 동작 안하면 0점
실행 시작점은 Application.main()
build.gradle 파일 변경 불가
외부 라이브러리 사용 불가
프로그램 종료 시 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