본문 바로가기
후기/woowa precourse

[우아한 프리코스] 1주차 미션: 숫자 야구 게임 돌아보기 (피드백 리뷰)

by 그냥노깡 2021. 12. 2.

우아한 프리코스 는 우아한 테크코스의 입과 과정 중 하나이다.

총 3주 동안 미션을 수행하고, 마지막 주에 최종 테스트를 한 번 더 보고 최종 합격이 결정된다.

 

아래는 총 3주 간의 미션 중 첫 번째 주에 했던 미션 회고이다.

 

지금 보니 놓쳤던 것:

   indentation 깊이를 2 이하로 유지하기

 

프로그래밍 요구사항 중에 indentation을 2이하로 유지하라는 요구사항이 있었다. 함수로 분리해서 호출하는 방식으로 구현해야 하는 것이다.

ball 여부를 판단하기 위해서, 숫자는 같지만 자리가 다른 경우를 알아내야 했다.

이 때 (이중 포문 + if문)을 쓰느라 indentation 깊이를 3까지 가져가게 되었다. 

다른 방법이 있을텐데, 생각을 오래하지 않고 그냥 넘겨버렸던 것 같다.

 

1주차 미션을 하면서 처음 겪었던 것들:

    자바 버전 설정, 기능 목록 작성, 자바 컨벤션 지키기, 커밋 컨벤션 지키기

 

- 자바 버전 설정

JDK 버전 설정을 zsh 터미널에서만 설정하면 되는 줄 알았지만, intelliJ의 IDE 버전과 프로젝트 버전까지 맞춰야 하는 것을 알게 되었다.

블로그에 정리하여 올려두었다.

 

- 기능 목록 작성

알고리즘 문제를 풀 때 대충 끄적거리는 것은 해봤지만, 정석적인 문서를 먼저 만들고 코딩을 시작하는 과정을 처음 겪었다.

구글링을 통해 이전 기수의 학생들이 한 것들을 참고하고, 요구사항에 맞추어 작성했다. 중간에 바꿔도 되는 것인데 처음부터 너무 잘쓰려고 고집부리다 보니 시간을 많이 썼던 것 같다. 구현하다가 추가할 것들이나 구조를 변경해야할 것 같으면 기능목록부터 수정하고 진행하는 방식으로 코딩하려고 노력했다.

 

- 자바 컨벤션 지키기

클래스, 메소드, 변수 이름을 어떻게 짓는지 대충은 알고 있었는데, 자바 컨벤션 문서를 보면서 코딩하는 것은 처음이었다. 내가 몰랐던 규칙들이 아주 많았고, 이를 쉽게 해주는 intellJ에 적용 가능한 .xml파일도 제공된다는 것을 알았다.

⌥+⌘+L로 현재 열고 있는 파일을 .xml파일 설정에 맞추어 reformat할 수 있고, 폴더를 오른 클릭하여 한꺼번에 많은 파일을 reformat할 수도 있다. 이는 indentation이나 띄어쓰기, 패키지 정리 등은 도와주지만, 처음 말했던 클래스, 메소드, 변수 이름 짓는 것은 직접 해주어야 하기 때문에 규칙을 잘 정리해놓을 필요성이 있다고 생각했다.

https://naver.github.io/hackday-conventions-java/

 

- 깃 커밋 컨벤션 지키기

자바 컨벤션과 마찬가지로, 대학교 오픈소스 수업에서 깃을 배울 때 대강의 형식을 구두로 배웠기 때문에 알고는 있었지만, 역시 공식적인(?) 문서를 읽으면서 맞추는 것은 처음이었다.

<format>: <subject>
(줄바꿈)
<body>
(줄바꿈)
<footer>

위 형식을 기억해야 하고, 대소문자 사용이나 동사 사용, 온점(.)사용 같은 것에도 주의를 해야 한다는 것을 알았다.

https://gist.github.com/stephenparish/9941e89d80e2bc58a153#format-of-the-commit-message

 

 

1주차 피드백

 

1. 이름을 통해 의도를 드러내라

변수, 메소드, 클래스 이름을 짓는 데에 시간을 투자하라.

연속된 숫자를 붙이거나 불용어를 사용하면 안된다. (a1,a2,an) (Info,Data,a,an,the)

 

2. 축약하지 마라

의도를 드러내기 위해서라면 이름이 길어져도 괜찮다.

단, 클래스와 메서드 이름을 한 두 단어로 유지하고, 문맥을 중복하는 이름을 자제하자.

(Order 클래스의 shipOrder() 메소드 이름 사용하지 말기. 그냥 ship()으로 만들어야 order.ship()으로 중복이 없다.)

 

3. 공백도 코딩 컨벤션이다

if, for, while문 사이의 공백도 코딩 컨벤션이다.

if() X -> if () O

 

4. 공백 라인을 의미 있게 사용하라

문맥을 분리하는 부분에 공백 라인 사용.

 

5. 반복하지 마라

중복이 있어선 안된다.

 

6. spave vs tab 활용

들여쓰기에 space와 tab을 혼용하지 않는다. pull request를 보낸 후 들여쓰기가 잘 되어 있는지 확인하는 습관을 들인다.

 

뭔가 1주차 과제할 때 .xml을 파일을 받아서 reformat 할 때 이 부분이 commit change에 포함됐던 것 같은데 확인해봐야 겠다.

 

7. 의미 없는 주석을 달지 않는다

어떤 의도인지가 드러난다면 굳이 주석을 달지 않는다. 가능한 이름을 통해 의도를 드러내고, 의도를 드러내기 힘들 때만 주석을 다는 연습을 한다.

 

8. 커밋 메시지를 의미 있게 작성하라

커밋 메시지에 해당 커밋에서 작업한 내용에 대한 이해가 가능하도록 작성한다.

 

9. 기능 목록을 업데이트하라

기능 목록은 구현 중에 변경될 수 있다. 살아있는 문서를 만들기 위해 노력한다.

 

10. 기능 목록을 재검토하라

기능 목록을 클래스 설계와 구현, 함수 설계와 구현과 같이 너무 상세하게 적지 않는다. 언제든지 변경될 수 있기 때문이다. 구현해야 할 기능 목록을 정리하는 데에 집중한다. 정상적인 경우도 중요하지만, 예외 상황도 기능 목록에 정리한다. 특히 예외 상황은 처음부터 모두 찾기 어려우므로 구현하면서 찾으면 추가할 수 있도록 한다.

 

11. README.md를 상세히 작성하라

해당 프로젝트가 어떤 프로젝트이며, 어떤 기능을 담고 있는지 기술하기 위해 마크다운문법을 검색해서 학습해보고 적용해 본다.

 

12. IDE의 코드 자동 정렬 기능을 활용해라.

인텔리제이) ⌥⌘L

 

13. 매직 넘버를 사용하지 마라

매직 넘버는 의미를 나타낼 수 있는 상수(static final)로 치환하여 코드의 가독성을 높인다.

 

14. 구현 순서도 코딩 컨벤션이다

클래스는 상수, 멤버 변수, 생성자, 메서드 순으로 작성한다.

 

 

그 외)

커밋 메시지를 꼭 영어로 작성해야 되는 것은 아니다. 의미가 명확해야 한다는 점에 집중할 것.