Toy Project/One Piece (iOS)

7. MVVM 실습: 코드 구현

개발자킹콩 2021. 2. 8. 20:41

목차

1. MVVM 코드구현 계획

2. MVVM 패턴 적용 전

3. MVVM 패턴 적용 후

4. 내가 이해하고 느낀 MVVM 패턴

 


 

 

MVVM 코드구현

 

 

 

Refactoring(리펙터링): 우리가 기술부채를 줄이고, 재사용 가능하며 유지보수와 관리가 잘 되도록 코드를 수정하는 과정

소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다.

여기서 사용자는 서비스의 이용의 변화는 생기지 않는다.

 

  1. 중복제거 : 똑같은 코드 제거
  2. 단일 책임 갖기 : 어떤 데이터, 기능이 여러가지 일을 하면 자신의 역할이 아닌 곳을 건드리거나 유지보수 및 관리가 힘들어진다.
  3. 10, 200 rule —> 메소드는 10줄 안에, 클래스는 200줄 안에 (최대한 그렇게 해보자)

 

 

그렇다면 우선 이전에 완성했던 코드에서 어떤 문제점을 가지는지 코드 회고를 해보자.

  1. 데이터가 순위를 나타내지 않는다.
  2. name과 bounty를 따로 관리하여 데이터 생성, 제거, 수정에서 문제가 발생할 수 있다.

 

 


 

개발 단계에서 이렇게 구분을 하고 시작하자!

 

[BountyViewController]

 

 

 

 

 

[DetailViewController]

 

 

 

 

 

 


 

 

[ MVVM 구현 전 ] 

 

 

 

 

 

 

 

 


 

[MVVM 구현]

 

 

시작!!

 

 

 

데이터를 이렇게 바꾸면 묶음단위로 데이터를 관리하게 되어서 유지보수와 관리가 편해진다.

이로인해 데이터의 전달 및 생성등에서 생기는 코드를 수정하면 된다.

 

 

이제 데이터에 해당하는 Model은 구성이 되었기에, 이제 View와 ViewModel을 만들어 보자

우선 ViewModel을 클래스로 생성해보자

모델(데이터)의 경우 ViewModel에서 관리하니 클래스를 생성하고 데이터를 안에 넣자! 그럼 오류가 쫘라락~~ 뜨게되고 이런 오류들을 해결할 메소드들을 생성하면 된다.!!

 

 

 

[BountyViewController]

 

 

 

[BountyInfo]

 

 

 

[DetailViewController]

 

 

 


 

내가 느낀 MVVM 패턴

 

 

 

어떻게 바뀌는지 간략하게 설명하기전 OOP(객체지향 프로그래밍)을 알면 보다 쉽게 이해할 수 있을 듯 하다.

데이터는 아무나 접근할 수 있을 경우 오류의 위험이 커진다. 그 정도로 데이터는 중요한 것이다.

그렇기에 특정 클래스에 데이터를 넣고 데이터의 접근은 메소드로 이루어지게 하고, 이 클래스를 관리하는 클래스를 만들다면 캡슐화와 정보은닉은 좋아질 것이다. 

 

우선 데이터를 ViewModel에 숨기고 어디서든 접근하는 것을 막아 메소드로 데이터에 접근이 가능하도록 관리한다.

그렇게 되면 ViewController는 제어를 담당하는 클래스이다.

View에서 화면에 보이는 UIView들을 관리하고 이를 ViewController에서 조작을 하게 되고 데이터가 필요하면 ViewModel의 메소드를 호출시켜 데이터에 해당하는 모델에 업데이트 및 수정을 하게 된다.

 

C++ 에서도 효율적인 OOP를 사용하게 되면 데이터를 관리하는 클래스와 이러한 클래스들 사이를 관리하는 Controller에 해당하는 클래스가 존재한다. 그럼 main에서는 데이터에 해당하는 클래스에 직접 접근하지 않고 Controller에 해당하는 클래스의 메소드만 사용하게 되어 캡슐화와 정보은닉으로 이어지고 이는 기술부채의 최소화와 유지보수 및 관리의 용이함이 상승하게 된다.