마지막 미션이 종료되었다. 후련함보다는 아쉬움이 크지만 내가 겪었던 경험들, 고민했던 부분들을 적어보려고 한다!
주관 100% 로 작성하는 것이니, 틀린 내용이 있을 수도 있고, 이에 대해서는 댓글로 지적해주시면 감사하겠습니다ㅎㅎ
프리코스를 통해 성장한 나의 종착점, MVC 패턴
나는 4주차 미션을 시작하기 전까지 객체에 관한 궁금증이 많았다. 3주차 미션을 마친 시점에서 내가 가진 고민은 다음과 같았다.
객체에게 자율성을 어느정도까지 부여해야 하는가?
3주차 미션을 통해 객체에게 자율성을 부여해야 한다는 사실은 알게 되었다.
그러나 어느정도까지 부여해야 하는지 고민을 지속했다. 즉, 객체 분리의 기준점은 무엇일지 고민했다.
디스커션에도 올려보고, 이것저것 찾아보았지만 명확한 답을 찾지 못했다.
이런 고민을 안고 4주차를 시작했는데, 나는 3주차 공통 피드백과 4주차 미션 요구사항을 보고 놀랐다.
간접적으로 MVC 패턴을 요구하는 것 같았기 때문이다.
이전까지는 디자인 패턴을 사용하려 하지 않았다. 패턴으로 정의될 수 없는 문제들과 마주치면, 중요한 건 패턴을 사용하는 능력이 아니라 객체지향적 사고이기 때문이다.
그렇지만 내가 3주간에 걸쳐 지속했던 고민들, 이 모든 해답의 실마리는 MVC 패턴에 있었다. 그래서 굉장히 놀라웠다. 그제서야 디자인 패턴의 실효성을 몸소 체감하고 사용되도 될 것 같다는 느낌이 들었다. MVC 패턴은 명확한 객체 분리 가이드라인을 제공해줬다.
따라서 이번 4주차 미션에서는 처음부터 MVC 패턴을 기반으로 해서 설계했다. 다음은 개발을 시작하기 전, 초기에 디자인했던 메세지 다이어그램이다.
설계 단계라고 해서 대단한 것이 있는 것은 아니다. 단순히 문제 정의에서 메세지를 뽑아냈을 뿐이다.
제약조건과 리팩토링
3주차 미션까지는 요구사항이 복잡하지 않았다. 오히려 유연성을 요구했다. 문제에서 정해주지 않은 부분은 내가 마음대로 구현할 수 있었다.
3주차 미션까지는 설계 단계에서 많은 것들을 결정했다. 투자하는 시간도 많았다. 그렇다고 해서 메소드명이나 이런 것들을 결정한 것은 아니지만 전체적으로 시스템이 어떻게 흘러갈지 약 70% 이상은 결정하고 시작했던 것 같다.
4주차 미션은 정반대였다. 많은 클래스가 주어지고, 메소드 라인 10줄 제한, 파라미터 개수 제한 등 많은 제약조건이 생겼다. 따라서 문제가 생길 수 밖에 없었다. 초기에 설계를 세부적으로 진행할 수가 없었다.
4주차 미션 안내 메일에서도 먼저 시스템을 작동하도록 만들고, 이후 리팩터링 과정을 거치라고 말씀해주고 계셨다. 그래서 진짜 코딩을 모르는 사람이 봐도 이해하기 쉬울 만한 기능 목록을 도출했다. 위 메세지 다이어그램도 마찬가지이다.
구현 과정에서도 마찬가지였다. 제약조건이 너무 많아서(😇) 정말 머리가 뜨끈했다. 메소드 10줄 제한, 파라미터 개수 제한, 인스턴스 변수 제한, depth 제한.. 이 모든 걸 지키면서 원하는 기능을 한번에 뽑아내는 건 불가능했다.
그래서 일단 보기엔 좋지 못한 코드여도 일단 만드는 것에 비중을 뒀다. 4주차 안내 메일에서도 강조하고 있는 내용이었다. 일단 기능을 만들어내고, 리팩토링을 통해 좋은 코드로 바꿔나갔다.
이 과정을 통해 느낀 건 다음과 같다. 모순적인 이야기일 수 있지만 문제가 복잡하다면, 오히려 설계 축소를 검토해보자. (물론 Waterfall 개발 방법론은 예외일 듯 하다) 그렇게 된다면 정말 필요한 기능만 도출하게 되고 구현 과정에서 스파게티 코드가 탄생하더라도 추후 리팩터링 과정을 거치면 된다. 큰 시스템을 처음부터 구상하려고 하지 말자! 작은 것부터 만들어나가는 것이 핵심이다.
객체 분리
앞서 MVC 패턴을 통해 객체 분리의 실마리를 찾았다고 했다. 뷰, 컨트롤러, 모델의 개념을 도입하고 각 계층을 분리시키니 확실히 객체의 책임이 명확해졌다. 그럼에도 객체 분리에 있어 고민을 이어나갈 수 밖에 없었는데, 의존성 때문이다.
객체는 실세계와 대응 될 필요가 없다. 오히려 대응되지 않는 것이 좋은 설계이다.
이 말을 많이 들었지만, 이것이 무슨 의미인지는 자세히 와닿지 않았다.
많은 교재 및 자료에서 객체지향의 개념을 현실세계에 비유한다. 보통 클래스와 객체를 배울 때 붕어빵 이야기를 많이 들었을 것이다.
4주차 미션까지 종료한 시점에서, 저 말의 핵심을 유추해보자면, 객체는 의존성이 제거되는 형태로 만들어져야 한다는 것이다. 그렇기 때문에 실세계와 대응될 필요가 없다.
객체 지향이 등장한 이유도 유지보수의 용이성과 관심사의 분리를 위해서다. 그렇기 때문에 의존성을 분리하는 것이 중요하다는 것을 느꼈다. 그렇지만 이 의존성의 문제를 프리코스에서는 풀어내지 못한 것이 아쉽고, 앞으로는 이에 대해 공부해 볼 예정이다.
프리코스를 마치며
시간이 정말 빠르게 지나갔다. 프리코스를 시작한지 벌써 한달이 지났고, 이전과는 비교할 수 없을 만큼 성장했다. 학교 수업과 병행하려니 힘들 때도 많았지만, 즐거웠던 순간이 압도적으로 많다.
프리코스가 시작하기 3일 전 자바를 처음 접했다. 3일만에 자바의 기본적인 내용을 모두 머리에 담았다. 단기간에 학습한 것이기에 프리코스 초반에는 어려움이 많았다. stream도 낯설어서 대부분을 반복문으로 구현했다.
문법적인 부분 뿐만 아니라 코드 자체에도 문제가 많았다. 컨벤션은 커녕 객체지향적 개념은 붕어빵 이론(?) 밖에 몰랐다.
약 한 달이 지난 시점에서 나는 그래도 과거의 나보다는 성장했다고 자신한다.
그렇지만 기술적으로 성장했다는 사실보다 중요한 것은, 무형의 가치를 많이 얻을 수 있었다는 점이다.
이번 우테코 5기부터는 모집 과정에 커뮤니티가 추가되었다. 슬랙이나 깃허브 디스커션을 통해 자유롭게 동료들과 소통할 수 있다.
나는 이것이 정말 성장에 있어 중요한 역할을 했다고 생각한다. 동료가 있어 지치지 않았고, 많은 지식을 다방면으로 학습할 수 있었다.
이렇게 공동의 목표를 가진 사람들이 한 곳에 모여 있다는 것 사실만으로 되게 자극이 되고 즐겁다.
정말 열심히 하시는 분들도 봐왔는데, 경쟁심보다는 경외심이 느껴진다. 나도 언젠가는 그들처럼 되고 싶다는 마음이 크다.
그리고 커뮤니티가 앞으로도 유지된다는 소식에 정말 좋았다. 열정적인 동료들과 계속 함께할 수 있다니 🔥 앞으로도 활동을 꾸준히 해나갈 생각이다.
4주 동안 나는 정말 인생을 갈았다.(수명이 1년 단축된 듯 하다)
후회가 남지 않는다. 가용한 모든 시간을 우테코에 쏟아부었다. 중간고사 역시 말아먹었다 😎 밀린 강의가 너무 많아서 기말고사도 말아먹을 예정이긴 하다..
아무튼 이렇게 내 모든 것을 투자할 가치가 충분했다고 생각된다. 결과야 좋으면 더 좋겠지만, 불합격했다고 해서 프리코스 때 성장한 나의 모습이 부정되는 건 아니다.
앞으로도 열심히 달려 나가려고 한다.
끝!
'우테코 5기' 카테고리의 다른 글
[우테코] 우아한테크코스 백엔드 5기 최종 합격 후기 (24) | 2022.12.31 |
---|---|
[우테코] 우아한 테크코스 5기 1차 합격 + 최종 합격 (1) | 2022.12.15 |
[우테코 프리코스] 3주차 회고 (0) | 2022.11.16 |
[우테코 프리코스] 2주차 회고 (3) | 2022.11.08 |
[우테코 프리코스] 1주차 회고 (2) | 2022.11.01 |