22시간전을 마지막으로 우테코 프리코스 과정이 끝났다. 4주차 회고 및 한달 전과 비교해서 어떤 부분이 발전했는지 돌아보고자 한다.
추가된 프로그래밍 요구 사항
- 메서드 10줄 라인 제한
- 메서드 파라미터 3개 제한
- 각 클래스당 요구 사항 제한
- InputView 클래스에서만 Console.readLine 사용가능
- BridgeGame 클래스에서 InputView, OutputView 사용 불가
고민한 것
1. BridgeMaker, BridgeNumberGenerator Interface, BridgeRandomNumberGenerator InterfaceImpl 관계 눈에 보기 쉽고 의존성 주입을 위한 AppConfig 클래스
전체적으로 모든 클래스를 만들어주는 클래스 생성 메소드에 의존성 주입을 위한 BridgeAppConfig Class 사용
2. BridgeGame 클래스 내에서 InputView, OutputView 사용 불가
-> BridgeGame 클래스는 다리를 저장하고 스테이지마다 입력값을 받아 넘겨주면 해당 스테이지 다리를 건넜는지 못건넜는지 메시지로 전달해주게 객체 설계
BridgeGame 클래스는 스테이지 당 결과값을 메시지로 전달하고, 리셋 시엔 스테이지 필드만 처음으로 초기화
3. 예외 처리, 복구에 대해서
이번 과제에서는 유효성 검사 실패시엔 올바른 입력값을 받을때까지 반복해야했는데 예외 처리의 범위를 매주가 갈수록 점점 작게 컨트롤 하는 방법을 배웠다.
우테코에 참가하기 전, 한달 전과 비해서 개발자로써 달라진 점?
1. 기능 목록 작성
지금까지 많은 프로젝트를 해본 건 아니지만 나름 충분히 생각을하고 시작을 했다고 생각했는데 기능 목록에 대한 문서를 따로 작성하는 건 다른 차원의 이야기인 것 같다.
1주차엔 너무 명확한 자료구조 까지 명시했고 2주차엔 객체지향보단 절차지향에 가까웠고 3,4주차도 남들이 보기에 잘 읽힌다고 볼 수는 없는 것 같다. 그래도 앞으로 코딩 전에 기능목록을 꾸준히 작성해가며 발전할 것이고, 무엇보다 중요한건 코딩을 하면서 수정사항이 생기면 우선 기능목록을 수정하고 코드를 짜면서 '살아있는 개발문서'를 유지하는 것임을 배울 수 있었다.
2. 깃허브 사용법, 기능별로 구현하고 커밋하는 습관 들이기
이전엔 사실 환경을 갈아치울 때, 정말 큰 코드 변경이 일어났을 때 클론하기 위해서 깃허브를 사용했다면 프리코스를 통해서 커밋에도 컨벤션이 있다는 걸 배웠다. 포크, 풀 리퀘스트 같은 것도 개념은 유튜브에서 봐서 어렴풋이 알고 있었지만 처음 사용해봤고 4주간 많이 단련이 되었다.또 클론, 푸쉬, 풀 모두 많이 사용하지만 사실 깃허브의 가장 중심이 되는 기능은 '내가 원하던 시점으로 되돌아 가는 것'이라고 한다. 기능목록 구현할때마다 작은 단위의 커밋을 머릿글과 함께 꾸준히 기록하면서 본인이나 다른 사람이 볼때도 보기 편하고, 내가 원하던 세이브 포인트를 세세하게 남기는 습관을 통해서 조금이나마 형상관리 프로그램을 사용하는 이유를 배울 수 있었다.
3. 메서드, 클래스를 하나의 일만하게 관리하기
1번의 기능목록 작성과 연장선에 있는 이야기다. 사실 이전까지 한 파일에 100줄이 넘는코드를 때려 박는게 일상다반사였다. 컴공전공이지만 개발, 알고리즘의 실무적용에 대한 부분을 전혀 배우지 않았고 학점을 위한 공부만 해온 나에게 메서드가 한가지 일만 담당하게 분리하는 건 매우 어려웠고, 이후에 클래스 분리는 더 어려웠다. 3,4주차에 와서는 메서드 라인 15줄, 10줄 제한을 봤을 때는 눈이 아찔했지만 지금은 모든 걸 생각하고 설계하는 건 어려워서 조금씩 코드를 짜보면서 감을 잡고 기능목록 작성하고 구현하는 방식으로 해결했다. 메서드 라인 제한이 생기니까 놀랍게도 메서드들을 분리, 추출하면서 중복되는 부분을 많이 삭제할 수 있었고 아직 익숙하진 않지만 스트림을 이용하면서 조금 더 코드를 간결하게 짜는 법을 배울 수 있었다. 클래스 분리에 대한 방법은 아직 많이 부족하다고 생각하고, 앞으로 더 공부해야할 것 같다.
4. 테스트 코드란 ?
인프런의 김영한님의 스프링 강의를 들으면서 테스트코드를 사용했었기 때문에 아예 모르던 것은 아니라 그나마 다행이었다. 프리코스 진행 중에는 도메인 로직에만 테스트 코드를 작성해서 내가 만든 코드를 테스트하긴 어렵진 않았지만 3주차의 로또 때 내가 생각한건 다 테스트해봤다고 생각했지만 로또 한장을 삿을 때 1등을 해보고 싶어 게임을 돌려봤는데 기능 요구사항에 맞지 않는 부분을 발견할 수 있었다.
100%가 넘을 때 백자리마다 콤마를 달아줘야하고, 소숫점 첫째자리가 0이여도 출력해야하는 부분인데 이 부분은 설계할 때 잡긴해야하지만 혹시 생각을 못하면 테스트 할 때 잡기위해서 모든 경우의 수를 볼 수 있는 테스트를 생각해야하는 걸 배웠다.
마무리
올해 졸업하는 전공자이지만 거의 8월까지는 학교공부만해서 알고리즘, 프로젝트를 해본 경험치가 매우 낮았고 주변에는 잘하는 친구만 보였다. 또 평소의 사고는 경쟁주의 세상에서 약육강식과 능력이 있어야 대우받는 것은 당연한 것이라고 생각했다. 개발자로서, 졸업예정 취준생으로서 자존감이 많이 낮았고 학점도 잘 안보는 개발 세상에 뛰어들거면 왜 학교공부만 열심히했나 자책도 많이 했다. 그러다 우테코 프리코스를 참여하게 됐고 매주 수요일마다 '코치와 함께 하는 수다 타임'(일명 코수타)를 생방송으로 봤다. 처음엔 이 영상에서 우테코 본 코스 합격을 위한 정보가 떨어질까 싶어서 봤는데 많은 위안을 들으며 계속 보게된 것 같다. 코수타의 포비코치를 통해 배운 것은 다른 사람이 얼마나 잘하나를 보고 나를 탓하지 말고 더 발전하기 위한 계기로 삼을 것, 일단 내가 할 수 있는 범위부터 목표로 잡고 실행할 것, 경쟁을 잘하는 사람이 살아남는 시장은 레드오션이고 같이 발전하기 위해 노력하는 시장이 블루오션인 세상, 우테코가 떨어져도 프리코스가 끝이 아니라 개발자로서의 발전의 초석으로 삼고 꾸준히 개발할 것, 그렇게 오랫동안 살아남으면 결국 좋은 개발자가 될 것 등이 있다. 물론 이 말을 듣고 무조건적인 안심을 하는게 아니라 올바른 방향으로 꾸준히 개발할 수 있도록 독하게 공부를 해야겠지만 프리코스 진행동안 많은 불안감을 잠재울 수 있었고 정말 많은 것을 배웠다. 프리코스는 끝났지만 모각코에도 참여하고, 프리코스 동안의 코드도 리팩터링하고, 1주차에 진행했던 알고리즘 테스트 형식의 코드를 3,4주차 처럼 게임 형식으로 구현하기도 해보고, 웹개발을 위한 공부, 알고리즘 테스트를 위한 공부를 꾸준히 진행도 할 것이다. 또 이런 공부들을 하기위한 지금 내 기준에서의 정확한 목표도 설정해야 할 것 같다. 만약 개발자가 되고싶은 분들은 앞으로 진행되는 우테코 프리코스에 꼭 참여해보면 좋을 것 같다.