우아한 테크 코스는 회사가 필요로 하는 역량을 가진 프로그래머를 양성하기 위한 프로그램이다.
온라인 코딩테스트 합격자는 총 3주간 프리 코스를 진행하게 되는데, 1주일마다 1개씩 요구사항을 구현, 총 3개의 구현을 하게 된다.
오늘 프리코스 3주차 과제를 마치며 느낀점을 간략하게 써볼까 한다.
(간략하게 쓰려고 했으나, 내용이 길어졌다.)
1주차
과제에 대한 요구사항이 몇가지 있었는데, 어려웠던 요구사항은..
함수가 한가지 일만 하기
함수를 분리하는 기준과 필요성에 대해서도 명확히 알지 못했다.
그래서 함수를 한가지 일만 하도록 쪼개는 것이 쉽지가 않았다.
알고리즘을 풀 때 재귀 호출이 필요한 문제를 제외하고는 main() 메서드
에서 구현 했으니까..
인터넷으로 함수를 어떻게 분리할지 찾아보다가 클린코드
라는 책을 알게 되었고, 함수 분리 뿐만 아니라 클래스 분리, 어떤 코드가 좋은 코드인가에 대한 정보를 얻을 수 있었다.
어떤 메소드를 숨겨야 하는지, 객체는 얼만큼 쪼개야하는 지에 대한 개념은 많이 부족했다.
기능 목록을 만들고, 기능 단위로 commit 하기
기능을 완벽하게 설계하고 개발을 시작해야 겠다는 부담감이 있었다.
당시 개발하는 도중에 기능 목록들이 계속 수정되고 있는 것을 보면서 기능을 설계하는 능력이 많이 부족하다고 생각했다.
2주차
1주차 피드백
2주차 미션과 함께 1주차에 대한 단체 피드백을 받았다.
처음부터 기능 목록을 완벽하게 정리해야 한다는 부담을 가지기 보다 기능을 구현하면서 문서를 계속 업데이트하라
라는 피드백이 있었다.
메일을 보낼 때 기능 목록이 바뀌는 것에 대한 고민을 적었었는데 소통한 것 같은 느낌을 받으니 기분이 너무 좋았다.
또한, 피드백에 클린코드
에서 보았던 내용이 많았는데 책을 더 곱씹어 보아야겠다는 생각이 들었다.
Stream API
이번 미션을 진행하면서 Stream API
를 써보고 싶었다. 모던 자바(자바8) - 케빈님 유튜브에서 설명이 너무 잘 되있어서 어렵지 않게 공부할 수 있었다.
clone
객체의 깊은 복사가 필요했는데, 구현하는게 기억이 나지 않아서 이펙티브자바
책을 다시 보게 되었다.
당시 책을 눈으로만 봐서 제대로 알지 못하고 넘어간 것 같다. 덕분에(??) 복사 팩터리도 새로 알게 되었다.
일급 컬렉션
페이스북을 하다가 우연히 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유를 보았다.
컬렉션을 래핑하면서 기존 컬렉션이 제공하는 메서드는 감추면서, 내가 필요한 기능을 컬렉션에게 위임 할 수 있다.
페이스북의 순기능을(??) 느끼면서 기존의 코드를 리팩토링했다.
commit message
커밋 메시지는 다른 사람이 한 눈에 커밋의 의도를 알 수 있도록 해야 한다. 그런데 어떻게 적어야 할지 한참을 고민한 경우가 있었다. 내가 해당 부분의 변경에 대한 이점을 명확하게 알지 못해서 인 것 같다.
2주차 과제를 수행하면서 1주차 때보다 발전 했다고 느꼈고, 3주차 과제는 쉽게 할 수 있을 것 같은 자신감이 생겼다.
3주차
클래스 설계
3주차 미션을 할 때 나만의 목표가 있었다.
오프라인 코딩테스트는 4시간 이니까 4시간만에 다 구현해야지!!
처음에는 클래스를 쪼개려고 고민을 많이 했다. 고민만 하다가 이틀동안 아무것도 못했다.
클래스 나누는 연습이 필요할 것 같아서 검색을 하다가 커피 예제를 볼 수 있었다. 글을 읽고, 머리를 맞은 기분이었다. 내가 객체지향 프로그래밍을 설계한 방법이 잘못 되었다는 것을 느꼈다.
다음날 아침에 객체지향의 사실과 오해를 구매해서 후다다닥 봤던 기억이 난다.
어떤 클래스가 필요하고 어떤 메서드를 포함해야하는지를 결정하는 것은 책임과 메시지에 대한 대략적인 윤곽을 잡은 후에 시작해도 늦지 않다. - “객체지향의 사실과 오해 p.119”
클래스를 어떻게 쪼개야 할지를 고민 했었는데, 어떤 행동을 위임할지 부터 생각해야 했다. 기본이 한참 부족했다.
매 주마다 과제를 진행하면서 부족한 것을 느끼면서도, 동시에 성장하고 있음을 체감할 수 있었다.
여러 참고 자료들을 몸으로 구현하면서 습득할 수 있어서 학습 속도가 빨랐던 것 같다.
이제 겨우 3주 했다.
다음주 오프라인 테스트를 위해 준비를 잘 해서 좋은 사람들과 함께 코딩할 수 있었으면 좋겠다.
Comments powered by Disqus.