Seren dev's blog
article thumbnail

프리코스 1주차 미션을 진행한 과정, 느낀 점, 개선할 점을 작성한 회고록이다.

 

프리코스 1주차 미션은 온보딩 미션으로, 7개의 코딩 문제를 풀어 제출하면 된다.

일반 코딩테스트에서 나올 만한 코딩 문제들이었다.

 

"기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋하는 방식으로 진행"

=> 한꺼번에 커밋하지 않고, 구현한 기능별로 메시지와 같이 커밋 메시지를 보내는 방식으로 진행했다.

 

프리코스 1주차 온보딩 미션 Github 링크

나의 Github 링크

 

🚀 Problem1

예외사항을 주의하여 기능을 구현했다.

예외사항인 경우

  • 왼쪽 페이지는 홀수, 오른쪽 페이지는 짝수 번호가 아닌 경우
  • 두 페이지가 연속된 페이지가 아닌 경우
  • 시작 면이나 마지막 면이 나오는 경우

기능 목록

  • 예외사항인 경우를 처리하는 기능 -> validate 메서드로 구현
  • 페이지 번호의 각 자리 숫자를 모두 더하거나, 모두 곱해 그 중 가장 큰 수를 구하는 기능-> findMaxNumOfPage 메서드로 구현
  • 두 사람의 점수를 비교하는 기능 -> compareScore 메서드로 구현

🚀 Problem2

기능 목록

  • 연속하는 중복 문자들을 삭제하는 기능 -> deleteConsecutiveDuplicateChars 메서드로 구현

🚀 Problem3

완전탐색을 사용하여 풀었다.

기능 목록

  • 숫자에 들어가는 3, 6, 9의 개수를 카운트하는 기능 -> count369 메서드로 구현

🚀 Problem4

기능 목록

  • 요구사항에 맞게 문자를 변환하는 기능 -> reverseChar 메서드로 구현

🚀 Problem5

기능 목록

  • 돈의 액수를 큰 금액의 화폐 위주로 변환하여, 각 화폐의 개수를 구하는 기능 -> convertMoneyToBill 메서드로 구현

🚀 Problem6

1~5번 문제들보다 조금 더 어려웠다. 모든 닉네임쌍들을 비교하며 풀었다.

기능 목록

  • 크루들의 모든 닉네임 쌍들을 비교하여 두 글자 이상의 문자가 중복되어있으면 그 크루의 인덱스를 Set에 저장하는 기능 -> findDuplicateNicknameStudents 메서드로 구현
  • 닉네임 쌍에서 두 글자 이상의 문자가 중복되어있는지 판별하는 기능 -> validateDuplication 메서드로 구현
  • 크루들의 인덱스를 저장한 Set을 바탕으로 크루들의 이메일을 리스트에 저장하는 기능 -> getDuplicateStudentEmailList 메서드로 구현

🚀 Problem7

1~5번 문제들보다 조금 더 어려운 문제였다. Map과 List를 사용해서 문제를 풀었다.

기능 목록

  • 친구 관계 정보를 저장한 friendMap을 만드는 기능 -> makeFriendMap 메서드로 구현
  • friendMap을 바탕으로 각 친구의 추천 점수를 저장하는 friendScoreMap를 만드는 기능 -> makeFriendScoreMap 메서드로 구현
  • 친구와 사용자가 함께 아는 친구의 수를 구하여 추천 점수를 구하는 기능 -> getScore 메서드로 구현
  • 각 친구마다 사용자의 타임라인에 방문한 횟수를 구하여 friendScoreMap에 저장된 점수를 업데이트하는 기능 -> updateFriendScoreMap 메서드로 구현
  • 점수가 가장 높은 순으로 정렬하여 최대 5명을 구하는 기능 -> findMaxFiveFriends 메서드로 구현

 

1주차 소감


어려웠던 점

1. Git 커밋 메시지 작성

이전에 gitHub을 사용할 때는 커밋 메시지에 대해 깊게 생각하지 않았지만, 이번 프리코스에서 기능 단위로 커밋하는 방식으로 진행하면서 git 커밋 메시지의 형식에 대해 많이 고민하였다. 좋은 git commit 메시지에 대해 구글링도 하고, 슬랙 커뮤니티를 통해 다른 분들의 의견을 참고하였고, 아래 Reference에 있는 글들을 참고하여 일정한 형식을 정하여 git 커밋 메시지를 작성하였다.

2. 리팩토링 - 클린코드의 원칙

이전에 코딩 문제를 풀 때는 빨리 푸는 것에 급급해 변수명, 메서드명에 대해 깊이 생각하지 않았지만, 이번 프리코스를 진행하면서 변수명, 메서드명에 대해 의미있는 이름을 짓기 위해 노력하였다. 또한 슬랙 커뮤니티를 통해 클린 코드의 원칙에 대한 글을 찾을 수 있었는데, "메소드가 한가지 일만 담당하도록 구현"해야 하며 "한 메서드에 오직 한 단계의 들여쓰기(indent)만 허용"한다는 원칙을 지키기 위해 많은 노력을 해야했다. 그 결과 메서드를 사용하여 처음에 작성했던 코드를 기능 단위로 분리하였다.

 

개선할 점

다른 분들의 코드를 보면 클래스(객체)를 분리하고 MVC 패턴을 사용하신 분도 있었다. 나는 컴공 전공 수업을 들으면서 대부분의 수업과 과제를 C언어로 하였기 때문에 클래스나 객체를 분리하여 코드를 작성하는 것에 익숙하지 않았고, 이번 미션은 코딩 문제를 푸는 것이었기 때문에 하나의 클래스에 모든 로직을 다 작성하였다. 하지만 앞으로 진행할 미션에서는 클래스를 분리하는 연습을 해야겠다고 느꼈다.

또한 스트림을 능숙하게 사용하시는 분들도 있었는데, 나는 코딩 문제를 풀면서 스트림을 사용하는 방법에 대해서는 대충 알고 있었지만 문제를 풀 때 바로바로 적합한 스트림 메서드를 떠올릴 정로 익숙하지는 않은 상태다. 스트림을 사용하면 코드도 많이 줄일 수 있고 가독성도 높일 수 있으므로, 앞으로 미션을 진행하면서 스트림을 사용하는 것에 익숙해지도록 많이 노력해야겠다.

 

느낀 점

코딩 테스트를 대비하기 위해 이전부터 계속 코딩 문제를 풀고 연습하는 중이어서 문제의 난이도에 대해서는 많은 어려움을 느끼진 않았다. 6, 7번이 앞의 문제들보다 어려웠지만 충분한 시간을 투자하여 문제를 풀 수 있었다.

이번 프리코스 미션을 통해 좋은 git 커밋 메시지를 작성하는 방법과, 클린코드를 작성하기 위해 리팩토링을 하는 방법에 대해 자세히 공부할 수 있고 많은 것을 배울 수 있었다. 문제를 푸는 것보다 커밋 메시지 작성과 리팩토링에 더 많은 시간을 쏟아부었고, 나에게 부족했던 점을 깨닫고 채울 수 있는 좋은 기회였다.
앞으로의 프리코스 미션도 매우 기대가 된다.

Reference

 

728x90
profile

Seren dev's blog

@Seren dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!