본문 바로가기
앱/Android(안드로이드 스튜디오)

안드로이드 mvvm구조 설명(Android + Java)

by redbear0077 2025. 8. 29.
반응형

안드로이드 mvvm구조 설명(Android + Java)

안드로이드 앱 개발에서 구조적인 설계는 매우 중요합니다. 특히 구글이 권장하는 MVVM(Model-View-ViewModel) 패턴은 코드의 유지보수성과 확장성을 높여주기 때문에 많은 개발자가 활용하고 있습니다.

이번 글에서는 안드로이드 스튜디오에서 MVVM 패턴을 자바(Java) 코드로 구현하는 방법을 소개하겠습니다.


MVVM 패턴이란?

MVVM은 세 가지 핵심 요소로 구성됩니다.

  • Model: 데이터와 비즈니스 로직 담당 (DB, API, DTO 등)
  • View: 사용자 화면 (Activity, Fragment, XML)
  • ViewModel: View와 Model을 연결, 데이터 바인딩 및 UI 상태 관리

따라서 Spring Boot와 비교하면:

  • Model ↔ DTO/Entity
  • Repository ↔ Mapper/Repository
  • View ↔ Controller + View (UI를 직접 가짐) view는 Thymeleaf와더 흡사하다
  • ViewModel ↔ Service (로직 처리, 데이터 가공, Repository 호출)

view추가설명

  1. 사용자가 버튼을 클릭한다.
  2. 1번 클릭 → 상자가 빨간색으로 변경된다.
  3. 연속 2번 클릭 → 상자가 파란색으로 변경된다.
  4. 이후 다시 1번 클릭하면 빨강 → 2번 클릭하면 파랑 … 반복된다.

이런식의 기능을 view에서 설정이 가능하다


MVVM 기본 구조 (Java 프로젝트)

프로젝트 구조는 보통 다음과 같이 나눕니다.

 
app/
 └─ java/
     └─ com.example.mvvm/
         ├─ model/
         │   └─ User.java
         ├─ repository/
         │   └─ UserRepository.java
         ├─ view/
         │   └─ MainActivity.java
         └─ viewmodel/
             └─ UserViewModel.java

MVVM 코드 예제 (Java)

1. Model (데이터 클래스)

 
// model/User.java
package com.example.mvvm.model;

public class User {
    private int id;
    private String name;
    private String email;

    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public int getId() { return id; }
    public String getName() { return name; }
    public String getEmail() { return email; }
}

2. Repository (데이터 소스)

 
// repository/UserRepository.java
package com.example.mvvm.repository;

import com.example.mvvm.model.User;

public class UserRepository {
    public User getUser() {
        // 실제 앱에서는 API 또는 DB에서 데이터 가져오기
        return new User(1, "홍길동", "hong@test.com");
    }
}

3. ViewModel (UI 로직)

 
// viewmodel/UserViewModel.java
package com.example.mvvm.viewmodel;

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.example.mvvm.model.User;
import com.example.mvvm.repository.UserRepository;

public class UserViewModel extends ViewModel {
    private final UserRepository repository = new UserRepository();
    private final MutableLiveData<User> user = new MutableLiveData<>();

    public LiveData<User> getUser() {
        return user;
    }

    public void loadUser() {
        user.setValue(repository.getUser());
    }
}

4. View (MainActivity)

 
// view/MainActivity.java
package com.example.mvvm.view;

import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import com.example.mvvm.R;
import com.example.mvvm.viewmodel.UserViewModel;

public class MainActivity extends AppCompatActivity {

    private UserViewModel userViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView userName = findViewById(R.id.userName);

        userViewModel = new ViewModelProvider(this).get(UserViewModel.class);

        // LiveData 옵저버 등록
        userViewModel.getUser().observe(this, user -> {
            if (user != null) {
                userName.setText(user.getName());
            }
        });

        // 데이터 로드
        userViewModel.loadUser();
    }
}

5. XML 레이아웃

<!-- res/layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사용자 이름"
        android:textSize="20sp"
        android:textStyle="bold" />

</LinearLayout>
 

MVVM 패턴의 장점

UI와 비즈니스 로직 분리 → 유지보수가 쉬움
테스트 용이 → ViewModel을 단위 테스트 가능
재사용성 증가 → View와 데이터 로직이 독립적


마무리

안드로이드 스튜디오에서 MVVM 패턴을 자바(Java) 기반으로 적용하면,
UI와 데이터 로직이 명확하게 분리되어 프로젝트 관리가 훨씬 수월해집니다.

특히 LiveData와 ViewModel을 활용하면 데이터 변화에 따라 UI가 자동 갱신되므로 효율적인 개발이 가능합니다. 🚀

반응형