티스토리 뷰
스스로 더 발전하려는 동기부여가 되었습니다. 아직 프리코스 기간의 1/4 밖에 지나지 않았지만 스스로 부족했던 부분과 발전해야 하는 부분을 찾을 수 있었습니다. 졸업과제가 끝나서 잠시 쉬어갈지 생각도 했지만, 새로운 배움을 느끼고 싶었습니다. 마침 우테코 프리코스가 시작되었고 최근에 가장 몰입하며 많은 것을 배웠던 1주일이었습니다.
1주 차를 보내며
클린 코드 작성
1주차 문제는 Problem Solving 7문제가 나왔습니다. 각 문제마다 필요로 하는 기능 목록을 작성하고, 해당 기능 목록에 따라 커밋을 진행하는 것이 과제였습니다. 여기서 저는 크게 읽기 좋은 코드 작성, 유지보수 좋은 코드 작성 2가지를 요구한다고 생각했습니다. 문제들은 크게 어려운 수준은 아니었고, 기본적인 프로그래밍 실력과 자료구조를 잘 알고 있는지 물어보는 것이 중점이었습니다. 프로그래머스로 생각했을 때는 레벨 1 ~ 2 정도의 난이도라고 생각합니다.
이때까지 제가 개발해왔던 과정은 읽기 좋은 코드 작성, 유지보수 좋은 코드 작성 과는 거리가 멀었다는 것을 깨닫게 되었습니다. 과거의 코드를 다시 되짚어 보았는데 그 때 어떤 의도로 작성했는지 작성한 저 조차도 쉽게 이해가 되지 않았고, 큰 기능의 단위로 커밋을 진행하다 보니 어떤 작업을 했었는지 복기하기 쉽지 않았습니다.
이번 프리코스 과정에서는 위 2가지를 꼭 지키기 위해 노력했습니다. 알고리즘 로직을 짜는 것은 크게 어렵지 않았지만, 그 속에서 이해하기 쉽고 어떤 일을 하는지 직관적으로 작명하기 위해 시간을 많이 들였습니다. 예를 들면, 문자열 길이가 0인 경우를 판별할 때 string.length() == 0이라고 쓸 수 있지만 함수로 따로 만들어 isEmptyString()이라고 작명했을 때 더 쉽게 이해할 수 있다고 느꼈습니다. 또한 함수화를 할 때 하나의 함수는 한 가지 일만 하도록 구현하기 위해 많이 고민했습니다. 한 함수에서 파싱, 계산, 리턴을 모두 처리하는 것보다, 파싱함수, 계산함수, 리턴함수로 구분해 어떤 일을 하는지 명확하게 알 수 있도록 했습니다.
마지막으로 상수화를 할 수 있는 변수 값은 상수화를 하려고 노력했습니다.
문제 1번의 경우 첫 번째 페이지는 1, 마지막 페이지는 400, 포비가 이긴다면 1, 크롱이 이긴다면 2, 무승부는 0, 예외사항은 -1 과 같이 하드코딩하여 반환할 수 있지만 코드를 직관적으로 이해하기 쉽도록 아래 사진과 같이 설정하여 코드에 적용하였습니다.
직관적으로 return 값을 이해할 수 있었고, 이후 요구사항이 변경될 시 코드의 모든 부분을 수정하지 않고 const 값만 수정하면 된다는 장점도 배울 수 있었습니다.
기능 단위 커밋
진행 방식 중 가장 눈에 들어왔던 것은 기능 목록을 만들고, 기능 단위로 커밋하는 것이었습니다. 이전에 한강나우 프로젝트를 진행할 때 개발에 착수하기 전, 요구사항을 분석하고 기능 목록을 작성하는 과정을 연습했었지만 큰 기능 단위로 구분하여 진행했기 때문에 세밀하게 적용하지 못했었습니다. 이번 1주차에서 클린 코드를 작성하기 위해 노력하며 자연스럽게 기능 단위로 개발하는 방법을 학습할 수 있었습니다.
한강나우를 진행할 때 적용했던 커밋 메시지를 읽어보면 하나의 기능이 아닌 여러 기능을 포괄적으로 커밋했던 것을 볼 수 있었습니다. 대충 어떤 기능을 만들었는지는 파악할 수 있지만, 세부적으로 어떤 방식으로 구현했는지 알아보기 위해서는 추가된 많은 부분을 찾아봐야하는 어려움이 있다고 느꼈습니다.
이번 1주차 과정을 진행하며 기능 단위로 커밋하는 것을 적용해봤습니다. 큰 기능을 여러가지 작은 기능 나눠 커밋하도록 노력해봤습니다. 이전에 작성했던 커밋 메시지보다 훨씬 읽기 좋아졌다고 느껴졌고, 나아가 함께 협업하는 과정에서 효율적으로 개발하기 위해 꼭 가져야 할 습관이라는 생각이 들었습니다. 나중에는 의도하지 않아도 당연스레 이런 방법으로 작성할 수 있도록 몸에 익혀야 할 것 같습니다 !
배우고 싶은 것
이번 과제를 진행하며 빈번한 반복문이나 중첩된 반복문들이 가독성을 떨어뜨린다는 느낌을 받아, 어떻게 개선해야 하는지 궁금해졌습니다.
처음 정렬 기능을 하는 함수를 작성한 코드입니다. Map의 entrySet을 받아 key 값을 기준으로 정렬한 후, 정렬된 객체를 다시 List에 key 값을 넣도록 최초에 설계하였습니다. 정렬하는 과정에서 stream을 사용하고 있어 key 값을 추출한 List 객체를 받을 수 있지 않을까 생각이 들었습니다. 함께 공부하는 분께 조언을 구했고 stream을 진행하며 map을 사용해 객체에서 원하는 값(key or value)을 추출해 리턴 받을 수 있다는 것을 알려주셨습니다.
stream 단계가 filter -> map -> collect의 과정을 통해 결과를 받을 수 있다고 알려주셨고, 적용해 보니 이전보다 훨씬 깔끔해진 것을 볼 수 있었습니다. 자바 8에서 추가된 stream 문법을 제대로 배워보고 싶고, 이후 과제에서 적극적으로 도입해야겠다는 생각이 들었습니다.
느낀점
정말 배운 것이 많았던 일주일이었습니다. 왜 이전에는 알지 못했을까라는 아쉬움도 들었지만, "새롭게 배워 성장할 수 있다"라는 동기부여가 생겼습니다. 우테코의 프리코스가 많은 도움이 됐다는 말을 전해 들었었는데 왜 그런지 이해할 수 있었습니다. 1주 차를 진행하며 느낀 것이 많아 앞으로의 남은 3주가 기대됩니다. 우테코에 합격한다면 더할 나위 없이 좋겠지만, 합격하지 않더라도(합격하고 싶습니다 ㅎㅎ) 많은 것을 배워갈 수 있다고 확신이 드는 것 같습니다.
'회고' 카테고리의 다른 글
[우테코 5기] 우테코 최종 코딩테스트 후기 (4) | 2022.12.31 |
---|---|
[우테코 5기] 우테코 프리코스 4주차 회고 (0) | 2022.11.26 |
[우테코 5기] 우테코 프리코스 3주차 회고 (0) | 2022.11.21 |
[우테코 5기] 우테코 프리코스 2주차 회고 (0) | 2022.11.09 |
겨울방학 회고 & 일주일간의 서울 다녀오기 :D (2) | 2022.03.06 |
- Total
- Today
- Yesterday
- 네트워크
- 런칭 페스티벌
- 8주차 회고
- 프로젝트
- 3차 데모데이
- ZNS
- 스프링 프레임워크
- 스프링MVC
- 알림기능개선기
- 2차 데모데이
- 우테코
- 팀프로젝트
- 스프링 부트
- 백준
- ZNS SSD
- 파이썬
- java
- dm-zoned 코드분석
- 환경 별 로깅 전략 분리
- Spring
- 피움 6주차 회고
- 회고
- 5주차 회고
- jpa
- 우테코 회고
- 피움
- CI/CD
- dm-zoned
- 알림개선기
- 스프링 Logback
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |