안녕하세요, 피터입니다 😃
저는 iOS 개발자로서 F-Lab 멘토링 프로그램에 참여한 지 이제 2개월이 되었습니다. 1개월차랑 어떤 점이 달라졌는지 혹은 아무것도 바뀐 것이 없는지 솔직하게 후기를 남겨보고자 합니다.
이번달에는 좀더 실전적인 내용들을 배우고 적용해봤습니다. 특히 개인 프로젝트를 통한 실습, 다양한 아키텍처에 대한 탐구, 그리고 깊이 있는 서적 리뷰와 적용까지하면서 실무에 적용할 수 있는 기간을 가졌습니다.
이번달에는 좀더 실전적인 내용들을 배우고 적용해봤습니다. 특히 개인 프로젝트를 통한 실습, 다양한 아키텍처에 대한 탐구, 그리고 깊이 있는 서적 리뷰와 적용까지하면서 실무에 적용할 수 있는 기간을 가졌습니다.
이번 달의 핵심 경험 중 하나는 개인 프로젝트를 진행하며 여러 미션들을 수행하는 것이었습니다. 그 중에서도 가장 흥미로웠던 부분은, 제가 익숙했던 MVVM-C 패턴에서 벗어나 새롭게 VIP 아키텍처를 적용해보는 작업이었어요. 처음에는 VIP 패턴이 다소 어색하고 연결하는 과정이 쉽지 않았지만, 결국 작동하는 것을 보고 큰 성취감을 느꼈습니다. 이 경험은 새로운 아키텍처를 학습하고 적용하는 데 있어서 두려움을 극복할 수 있도록 허들을 낮추어준 경험이었습니다.
그 과정에서 어려웠던 점은 Coordinator와 router를 연결하는 지점이었습니다. 기존에는 ExerciseCoordinator를 따로 만들어서 start() 지점에 초기화를 시켜주고 작업을 했는데 어색하다는 느낌이 들었습니다. router가 뷰 이동을 처리하는 객체일텐데 이를 활용하지 못하고 있다는 생각이 들었습니다.
/// ExerciseCoordinator를 호출하는 부분
func presentExerciseCounter(routine: [Int]) {
let coordinator = ExerciseCounterCoordinator(
navigationController: navigationController,
routine: routine
)
childCoordinators.append(coordinator)
coordinator.finishDelegate = self
coordinator.start()
}
/// ExerciseCounterCoordinator
func start() {
let viewController = ExerciseCounterViewController()
var dataStore = viewController.router?.dataStore
dataStore?.routine = self.routine
self.navigationController.pushViewController(viewController, animated: true)
}
그래서 Router에 CoordinatorProtocol을 채택시켜서 Coordinator의 일을 하도록 만들었습니다. 그래서 Coordinator객체 하나를 지울 수 있었습니다.
/// ExerciseRouter를 호출하는 부분
func presentExerciseCounter(routine: [Int]) {
let router = ExerciseCounterRouter(
navigationController: navigationController,
routine: routine
)
childCoordinators.append(router)
coordinator.finishDelegate = self
coordinator.start()
}
멘토님은 프로젝트 진행 시 외부 라이브러리 사용을 최소화하라고 조언하셨습니다. 그 결과, Firebase를 제외하고는 외부 라이브러리를 사용하지 않는, 순수한 프로젝트를 만들게 되었습니다. 익숙했던 Snapkit이나 Rx 사용을 자제하니 처음에는 매우 어색하고 구현 방법에 대해 많이 막막했습니다. 하지만 이 과정에서 async/await과 combine을 사용하게 되어 새로운 기술을 익힐 수 있는 좋은 기회가 되었습니다. 또한, 생각보다 많은 작업들이 비동기 처리를 필요로 하지 않는다는 것을 깨달았습니다. 이전에는 Rx를 만능 도구로 여겼던 제 편견이 사라지는 계기가 되었고, Rx의 단점들도 눈에 띄기 시작했습니다. 이제 Rx에서 Combine이 더 익숙해지는 날이 오기를 기대하고 있습니다. 😇
지난 1개월 동안 읽은 책은 '객체지향의 사실과 오해'와 '헤드퍼스트의 디자인패턴'이었습니다. 이 두 책에 대한 리뷰를 작성하는 과정도 진행했습니다. 비전공자로서 디자인 패턴이나 객체 같은 개념에 익숙하지 않았지만, '객체지향의 사실과 오해'를 통해 객체를 바라보는 새로운 관점을 얻었고, 그것들이 마치 생명을 가진 것처럼 느껴질 정도로 내 시야를 넓혀주었습니다. 반면, '헤드퍼스트의 디자인패턴'은 언어가 더 어렵고 주로 Java로 설명되어 있어서 이해하기 어려웠습니다. 현재는 완전히 이해하기보다는 '이런 것들이 있구나'하는 수준에서 접근하고 있습니다. 지금까지의 경험을 통해 객체를 만들고 활용하는 다양한 방법이 있다는 것을 알게 되었습니다. 이 책은 여러 번 읽고 깊이 이해하고 싶은 욕구를 불러일으켰습니다.
마지막으로, 회사에서 아직 정착화되지 않은 코드리뷰 방식에 대해 이해를 넓히는 것도 이번 달의 중요한 학습 포인트였습니다. 멘토링을 통해 제가 받은 피드백으로 막연했던 코드리뷰 방식에 대해서 알게되었고, 코드리뷰의 중요성과 방법에 대해 더 깊게 이해하고, 이를 실무에 적용해보는 기회가 되었습니다. 실제로 현재 사내에서 코드리뷰 방식에 대해서 정리하고 방식에 대해 논의해보는 과정을 하고 있습니다.
멘토님은 모든 것을 쉽고 명확하게 전달해 주셨어요. 멘토님은 저의 오해할 수 있는 부분들을 지적해주시고, 스스로 해결책을 찾을 수 있도록 이끌어 주셨습니다.
그리고 어쩔 수 없이라도 학습할 수 있는 환경을 만들어 놓으니 출퇴근길 지하철에서 개발 서적을 읽고 있는 제 자신이 뿌듯해지는 순간도 있었습니다. 물론, 아직은 내용을 완전히 이해하기 어렵지만, 지하철에서 개발 서적의 글자들을 읽으며 점점 더 배워가고 있습니다.
결론은 만족하고 있습니다. 그리고 벌써 멘토링 기간의 절반 정도 왔다는 것이 벌써 시원섭섭하네요.
이렇게 지난 한 달 동안 F-Lab 멘토링 프로그램을 통해 배운 점들을 공유해보았습니다. 개인 프로젝트의 실습, 새로운 아키텍처에 대한 도전, 깊이 있는 서적 학습, 그리고 실무에 적용하는 과정까지, 이 모든 경험이 제 개발자로서의 여정에 큰 밑거름이 되었어요. 앞으로도 배운 것들을 바탕으로 계속해서 성장해 나가는 개발자가 되고자 합니다.
앞으로 남은 멘토링 기간 동안 제가 배운 모든 것을 실제 프로젝트에 적용해보고, 더욱 복잡하고 도전적인 문제들을 해결해나가고 싶어요. 멘토님과의 교류를 통해 지속적으로 성장하며, 더 나은 iOS 개발자로 거듭나겠습니다!
지난 2개월은 정말 특별하고 값진 시간이었습니다. 멘토링을 통해 배운 지식과 기술은 제 개발 경력에 큰 자산이 될 것이며, 멘토님과의 만남은 저에게 무한한 영감을 주었습니다. F-Lab과 함께한 이 시간은 제 개발자로서의 여정에 있어 중요한 이정표가 될 것입니다.
시간 참 빠르네요. 2024년의 해가 밝았습니다. 새해 복 많이 받으세요.
안녕하세요 혹시 현재 멘토링을 하고 있는 상태이신가요?