본문 바로가기
면접을 위한 CS 전공지식 노트/1장 디자인 패턴과 프로그래밍 패러다임

MVVM 패턴

by 고구마맛탕먹고싶다 2024. 9. 5.

MVVM 패턴

소프트웨어 디자인 패던, UI 개발에 사용. 뷰(View)와 모델(Model) 사이의 강한 결합을 줄이기 위해 도입

  • Model : 애플리케이션의 데이터와 비즈니스 로직을 관리
  • View : 사용자 인터페이스 요소
  • ViewModel : View와 Model 사이에서 데이터를 중계하고, 데이터 바인딩을 통해 View에 데이터를 전달

MVC와 MVVM의 차이점

  1. 사용자 입력 처리:
    • MVC: 사용자 입력을 Controller가 직접 처리
    • MVVM: 사용자 입력은 ViewModel이 처리합니다.
  2. 데이터 바인딩:
    • MVC : 데이터 바인딩이 자동 X, Controller를 통해 수동으로 처리
    • MVVM : 데이터 바인딩이 자동, View와 ViewModel 간의 데이터 동기화가 프레임워크에 의해 자동으로 처리

예시 코드

# Model
class Song:
    def __init__(self, title, artist):
        self.title = title
        self.artist = artist

# ViewModel
class SongViewModel:
    def __init__(self, song: Song):
        self._song = song

    @property
    def display_title(self):
        return f"{self._song.title} by {self._song.artist}"

# View
class SongView:
    def __init__(self, viewmodel: SongViewModel):
        self.viewmodel = viewmodel

    def show(self):
        print(self.viewmodel.display_title)

# 사용 예시
song = Song("How sweet", "뉴진스")
song_vm = SongViewModel(song)
view = SongView(song_vm)
view.show()

MVVM 패턴

소프트웨어 디자인 패던, UI 개발에 사용. 뷰(View)와 모델(Model) 사이의 강한 결합을 줄이기 위해 도입

  • Model : 애플리케이션의 데이터와 비즈니스 로직을 관리
  • View : 사용자 인터페이스 요소
  • ViewModel : View와 Model 사이에서 데이터를 중계하고, 데이터 바인딩을 통해 View에 데이터를 전달

MVC와 MVVM의 차이점

  1. 사용자 입력 처리:
    • MVC: 사용자 입력을 Controller가 직접 처리
    • MVVM: 사용자 입력은 ViewModel이 처리합니다.
  2. 데이터 바인딩:
    • MVC : 데이터 바인딩이 자동 X, Controller를 통해 수동으로 처리
    • MVVM : 데이터 바인딩이 자동, View와 ViewModel 간의 데이터 동기화가 프레임워크에 의해 자동으로 처리

예시 코드

# Model
class Song:
    def __init__(self, title, artist):
        self.title = title
        self.artist = artist

# ViewModel
class SongViewModel:
    def __init__(self, song: Song):
        self._song = song

    @property
    def display_title(self):
        return f"{self._song.title} by {self._song.artist}"

# View
class SongView:
    def __init__(self, viewmodel: SongViewModel):
        self.viewmodel = viewmodel

    def show(self):
        print(self.viewmodel.display_title)

# 사용 예시
song = Song("How sweet", "뉴진스")
song_vm = SongViewModel(song)
view = SongView(song_vm)
view.show()

'면접을 위한 CS 전공지식 노트 > 1장 디자인 패턴과 프로그래밍 패러다임' 카테고리의 다른 글

MVP 패턴  (0) 2024.09.10
MVC 패턴  (1) 2024.09.06
옵저버패턴  (4) 2024.09.06
전략 패턴  (0) 2024.09.05