LadyBug 제작 (4) MVVM 적용
이번 포스팅에서는 새로운 기능보다 기존 코드 정리 및 MVVM 패턴 적용을 간단하게 해보겠습니다.
일단 제가 MVVM 패턴을 적용하는 이유는 코드의 가독성 때문입니다.
코드에서 각종 아이템 효과, 점수, 시간, 생명 등 추가 기능이 늘어나면 늘어날 수록 코드가 복잡해 질 수 밖에 없습니다.
따라서 코드를 분리하기 위해 MVVM을 적용할겁니다.
지난 포스팅 이후 거의 1주일동안 어떻게 하면 코드를 아주 잘 분리 할 수 있을까 여러 생각을 해보았습니다.
일단 나눠야하는 코드는 다음과 같았습니다.
1. 캐릭터 위치 및 속도, 아이템 리스트, 점수, 시간 + 그외 추가할 정보
2. 게임관련 비즈니스 로직
3. 화면에 그려지는 View
일단 간단하게라도 정리할 코드를 나눠보니 아이디어가 떠올라서 몇가지 시도를 해보았습니다.
1. 정석대로 MVVM을 적용하기
model을 생성하여 적용하는 방법으로 코드를 작성 해봤습니다. 하지만 코드 작성을 시작하자마자 Model에 담을 데이터가 추가 될때 마다 모델을 계속 새로 만들어주고 값을 채워줘야하는 문제 때문에 좋은 방법은 아닌 것 같습니다.
2. Model을 생성하지 않고 ViewModel 안에 Data를 저장하기
1번 방법을 포기하고 Mode l관련 문제가 생기지 않기 때문에 코드 가독성은 조금 떨어지겠지만 좋은 방법이라고 생각했습니다. 그래서 코드를 완성하고 실행하려고 하였는데 문제가 발생하였습니다.

기존에는 매게변수로 itemList를 전달받아 제거하여서 해당 부분을 ViewModel의 변수에 접근하여 넘겨주는 방식으로 처리하였더니 코드에서 오류가 발생하였습니다;; (1번 방법에도 해당 문제가 동일하게 발생 할 것 같습니다. 안하길 정말 잘했다는 생각이 들었습니다.)
그래서 다른 방법으로 해당 CustomPainer 클래스에도 riverpod을 적용하려고 했는데 이 방법도 좋은 방법은 아닌 것 같아 포기하였습니니다.
3. Data를 싱글톤 클래에 넣어서 관리하기
1, 2번에서 삽질을 한 후 마지막으로 떠올린 아이디어입니다. 이후 기능이 추가되도 클래스안에 데이터 변수만 추가해주면 되고 데이터도 전역으로 관리하기 때문에 CustomPainter에 데이터를 전달하는 부분도 문제가 해결되었습니다.
또한 싱글톤으로 클래스를 생성하면 클래스 여러개 생성되는 불상사도 일어나지 않구요.
다만 ViewModel에서 화면을 갱신 할때 state가 아닌 notifyListeners를 사용해야하는 점이 조금 불편했습니다.
아무튼 처음 생각했을 때는 금방 코드 정리를 하고 다음 기능을 추가하려고 했는데 생각보다 쉽지 않은 과정이였습니다.
이후 다음 포스팅에서는 추가적인 기능을 추가해보겠습니다.
해당 포스팅에 대한 코드는 GitHub을 참고해주세요
GitHub - beomsuong/lady_bug
Contribute to beomsuong/lady_bug development by creating an account on GitHub.
github.com