본문 바로가기

개발 이야기/Android (안드로이드)

Android App 개발에 많이 사용하는 디자인패턴

320x100

 

 

Android에서 많이 사용하는 디자인 패턴에 대해 조사를 해 봤다.

요즘 이직한 회사에서 Java로 개발해야 타업체 호환성이 좋다고 해서 예제코드 준비는 둘 다!!

 

Android 앱 개발에서 널리 사용되는 디자인 패턴들은 다음과 같습니다:

 

Model-View-Presenter (MVP) 패턴
  • 이 패턴은 뷰, 모델, 프레젠터 간의 책임을 명확하게 분리합니다.
  • 프레젠터는 뷰와 모델 사이의 중간자 역할을 하며, 뷰는 프레젠터의 구현 세부 사항을 모르게 됩니다.
  • 이를 통해 테스트 가능성이 높아지고 코드 유지보수가 용이해집니다.

Java 예제:

// View 인터페이스
public interface MainView {
    void showData(String data);
}

// Presenter 클래스
public class MainPresenter {
    private MainView view;
    private Model model;

    public MainPresenter(MainView view, Model model) {
        this.view = view;
        this.model = model;
    }

    public void loadData() {
        String data = model.getData();
        view.showData(data);
    }
}

// Model 클래스
public class Model {
    public String getData() {
        return "Sample Data";
    }
}

 

Kotlin 예제:

// View 인터페이스
interface MainView {
    fun showData(data: String)
}

// Presenter 클래스
class MainPresenter(private val view: MainView, private val model: Model) {
    fun loadData() {
        val data = model.getData()
        view.showData(data)
    }
}

// Model 클래스
class Model {
    fun getData(): String {
        return "Sample Data"
    }
}

 

 

Model-View-ViewModel (MVVM) 패턴
  • 이 패턴은 뷰, 모델, 뷰모델 간의 책임을 명확하게 분리합니다.
  • 뷰모델은 뷰와 모델 사이의 중간자 역할을 하며, 뷰는 뷰모델의 구현 세부 사항을 모르게 됩니다.
  • 이를 통해 테스트 가능성이 높아지고 코드 유지보수가 용이해집니다.

Java 예제:

// View 인터페이스
public interface MainView {
    void showData(String data);
}

// ViewModel 클래스
public class MainViewModel extends ViewModel {
    private MutableLiveData<String> data = new MutableLiveData<>();

    public LiveData<String> getData() {
        return data;
    }

    public void loadData() {
        data.setValue("Sample Data");
    }
}

// Activity 클래스
public class MainActivity extends AppCompatActivity implements MainView {
    private MainViewModel viewModel;

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

        viewModel = new ViewModelProvider(this).get(MainViewModel.class);
        viewModel.getData().observe(this, this::showData);
        viewModel.loadData();
    }

    @Override
    public void showData(String data) {
        // 데이터 표시
    }
}

 

Kotlin 예제:

// View 인터페이스
interface MainView {
    fun showData(data: String)
}

// ViewModel 클래스
class MainViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data

    fun loadData() {
        _data.value = "Sample Data"
    }
}

// Activity 클래스
class MainActivity : AppCompatActivity(), MainView {
    private val viewModel by viewModels<MainViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel.data.observe(this, ::showData)
        viewModel.loadData()
    }

    override fun showData(data: String) {
        // 데이터 표시
    }
}

 

 

반응형