기초 클래스 및 인터페이스
안드로이드 프로젝트를 Empty Activity
로 생성하면 다음과 같이 AppCompatActivity
를 상속받는 MainActivity
가 생성됩니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
MainActivity
를 바로 사용해도 되지만 MVVM을 사용하거나 다른 중복된 작업이 필요한 경우 모든 액티비티의 기본이 되는BaseActivity
를 만드는게 효율적입니다.
BaseActivity
기초 클래스는 [추상 클래스 + 제네릭 + BaseView]을 기본 구성으로 작성했습니다.
public abstract class BaseActivity<DB extends ViewDataBinding>
extends AppCompatActivity
implements BaseView {
...
}
추상 메소드를 Sub클래스에서 사용하기 위해서는 추상 클래스 선언이 꼭 필요합니다.
- 추상 메소드
Sub클래스에서 꼭 작성이 필요한 부분을 정의했습니다.
@LayoutRes
public abstract int getLayoutRes();
public abstract void setViewModel();
public abstract void setToolbar();
[getLayoutRes]는 activity layout id를 가져옵니다.
[setViewModel]는 binding에 ViewModel를 적용(Bind)해 줍니다.
[setToolbar]는 toolbar의 상태를 설정합니다.
- 제너릭
해당 액티비티의 데이터바인딩을 쉽게 초기화하기 위해 사용되었습니다.
BaseActivity<DB extends ViewDataBinding>
public DB binding;
binding = DataBindingUtil.setContentView(this, getLayoutRes());
액티비티에서 데이터바인딩 초기화는 꼭 DataBindingUtil.setContentView() 함수를 사용해야 합니다.
BaseView
ViewModel에서 참조로 사용 될 기본 인터페이스입니다.
public interface BaseView {
void finishView();
void backView();
}
BaseView는 BaseActivity에서 정의하면 됩니다.
@Override
public void finishView() {
finish();
}
@Override
public void backView() {
onBackPressed();
}
작성하는 액티비티에서만 참조가 필요할 경우 다음과 같이 BaseView 인터페이스를 상속한 다른 인터페이스를 사용하면 됩니다.
public interface MainView extends BaseView {
void makeToast();
}
BaseView의 참조는 BaseActivity에 정의되어있기 때문에 따로 작성할 필요는 없습니다.
안드로이드 앱 개발해보고 싶었는데 감사합니다.
앞으로 더 좋은 자료 많이 올리도록 하겠습니다!