우아한테크코스 6기(모바일 앱) 프리코스 4주차 공부 기록

우테코 6기의 프리코스가 모두 종료되었습니다. 사실 16일에 끝났습니다만, 다른 할 일이 많아서 조금 늦게 회고록을 작성하게 되었군요..
당연하지만 4번의 미션 중 가장 어려운 미션이었습니다! 고려해야 할 사항도 많고, 예외처리 하는 방법도 까다로웠습니다. 디스코드 커뮤니티에서도 어렵다고 말씀하시는 분들이 많더라구요. 나만 어려운 게 아니니까 힘들지만 포기하지 않겠다라는 생각으로..! 열심히 임했습니다.
이번에도 물론 3주차 공통 피드백을 받았습니다. 이번에도 꼼꼼히 읽어보았습니다..만 이번 피드백은 읽어도 이해가 되지 않는 내용이 대부분이더군요.. ㅠㅠ 그래서 일단 알겠는것만.. 복기하기로 했습니다.
1. 3주차 공통 피드백
1. 함수(메서드) 라인에 대한 기준
프로그래밍 요구사항을 보면 함수 15라인으로 제한하는 요구사항이 있다. 이 기준은 main() 함수에도 해당된다. 공백 라인도 한 라인에 해당한다. 15라인이 넘어간다면 함수 분리를 위한 고민을 한다.
저번 미션에서 길이 15라인을 넘긴 함수를 만든 바 있는지라.. 뜨끔한 피드백이었습니다. 중괄호나 주석은 한 라인으로 간주하지 않을 줄 알았는데, 공백도 한 라인으로 친다고 하네요.. 그래서 이번에는 정말 함수 분리 고민을 많이 했습니다.
2. 비즈니스 로직과 UI 로직을 분리한다
비즈니스 로직과 UI 로직을 한 클래스가 담당하지 않도록 한다. 단일 책임의 원칙에도 위배된다.
이번 미션에는 요구 사항 중 다음과 같은 내용이 추가되었습니다.
- 아래 있는 InputView, OutputView 클래스를 참고하여 입출력 클래스를 구현한다.
- 입력과 출력을 담당하는 클래스를 별도로 구현한다.
- 해당 클래스의 패키지, 클래스명, 메서드의 반환 타입과 시그니처는 자유롭게 구현할 수 있다.
클래스를 분리할 때, 입력을 받는 클래스와 출력을 하는 클래스를 분리하라는 말입니다. 저는 저번 미션에서 입력, 출력 함수를 전부 하나의 클래스에 때려박았던.. 그래서 이번 미션에서는 입력을 담당하는 클래스 InputView, 그리고 출력을 담당하는 클래스 OutputView를 꼭 분리하도록 유념했습니다. 그리고 이번 미션을 진행하면서 MVC패턴이라는 것에 대해서도 알아보았는데요, 아래에서 자세하게 적어보겠습니다.
2. MVC패턴
MVC란 Model, View, Controller의 약자로, MVC패턴이란 소프트웨어를 모델, 뷰, 컨트롤러의 세 가지 구성 요소로 나누어 디자인하는 패턴을 의미합니다.
디자인 패턴은 또 뭐냐구요?
소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. - 위키백과
'공통적 문제에 대해 재사용 가능한 해결책' 부분이 이해가 잘 가지 않았는데, 자세히 알아보니 다음과 같은 의미였습니다.
어떠한 소프트웨어를 개발하는 도중에는 다양한 문제가 발생할 수 있습니다. 그 중 특히 자주 발생하는 문제도 있겠죠. 디자인 패턴은 그러한 자주 발생하는 문제들을 잘 정리해서, 이를 해결할 수 있는 방안을 패턴화 한 것입니다. 이렇게 패턴화 해 두면 다음에도 템플릿을 두고두고 써먹을 수 있겠죠.
MVC패턴은 그 중에서 개발자 간 협업을 원활하게 하고, 코드의 유지보수성을 높이기 위해 만들어진 디자인 패턴입니다. 기업체에서의 프로젝트는 다수의 개발자가 함께 프로젝트를 진행하게 됩니다. 그런데 그 중 한명이 자신만의 코딩 방식으로 코드를 작성한다면 다른 팀원들은 그 코드를 읽고 이해하기가 어렵겠죠. 이는 너무 비효율적입니다. 그렇기 때문에 어떻게 개발할지를 체계적으로 정해놓고 모든 팀원이 그에 맞춰 프로그램을 만들어야 합니다. 그 방법 중 하나가 MVC패턴인 것입니다.

위와 같은 방식으로 모델, 뷰, 컨트롤러의 세 가지 구성 요소가 각자 역할에 따라 일하게 됩니다.
- 모델(Model): 데이터와 비즈니스 로직을 나타냅니다. 어플리케이션의 상태와 데이터를 관리하며, 이러한 데이터의 변경을 뷰와 컨트롤러에게 알립니다.
- 뷰(View): 사용자 인터페이스와 표시를 담당합니다. 뷰는 모델의 데이터를 사용자에게 표시하고, 사용자의 입력을 받아 컨트롤러에 전달합니다.
- 컨트롤러(Controller): 사용자의 입력을 받아 모델을 업데이트하거나 뷰를 업데이트하는 역할을 합니다. 컨트롤러는 모델과 뷰 간의 통신을 조정하면서 사용자와 상호작용합니다.
라고는 합니다만.. 사실 아직 이해가 잘 안되는 것이 사실입니다 ㅠㅠ.. 이번 미션에서도 최대한 적용해 보려고 하기는 했는데, 아직 공부가 더 필요합니다.
3. 4주차 미션을 끝내고 느낀 점
이번 과제는 지난 3번의 과제에 비해 특히 복잡하고 고려할 사항이 많았기 때문에 처음에 어떻게 설계를 해야할지부터 고민을 많이 하게 되었습니다. 저는 지금까지 작은 함수를 먼저 짜고 그 함수들을 모아서 큰 프로젝트를 완성하는, 작은 부분부터 만들어 나가는 방식을 썼는데, 프로젝트가 복잡할수록 큰 구조를 먼저 정하고 그 다음에 작은 부분을 완성해야 한다는 것을 깨달았습니다. 그것을 깨닫는 과정에서 MVC패턴이라는 것의 존재도 알게 되었습니다만 아직 익숙하지 않아 제대로 적용하기는 어려웠습니다. 공부를 더 해서 이를 자유자재로 사용할 수 있어야겠다고 생각했습니다.
모든 프리코스를 마치고 든 생각은, 주먹구구식 코딩과 현업에서의 코딩은 매우 큰 차이가 있다는 점이었습니다. 저는 지금까지 주먹구구식으로 코딩을 해왔고, 클린코딩을 배우거나 연습하지 않았기 때문에 그 중요성도 모르고 있었습니다. 대학에서 가르쳐 주는 것 외에도 정말 많은 공부가 필요함을 느꼈습니다.
그리고 그 부족한 점을 이번 프리코스에서 조금이나마 채울 수 있어서 매우 유익했다고 생각합니다. 4주의 기간은 짧았지만 그럼에도 불구하고 크게 성장했다고 느낍니다.
솔직히 저 외에 잘하시는 분들이 너무 많아서 합격은 기대하지 않고 있습니다. 그래도 프리코스만으로 많은 걸 배웠으니 그걸로 된 것 아닐까요?! ㅎㅎ