-
Android) Android의 여러가지 Annotation (@String,Drawable,ColorRes, @CallSuper)Android 2021. 1. 19. 21:52
@StringRes, @DrawableRes, @ColorRes
- @StringRes 애너테이션과 @DrawableRes 애너테이션, @ColorRes 애너테이션은 리소스 아이디 관련 애너테이션입니다.
- 요소의 값이 이 애너테이션들이 의미하는 리소스 타입에 해당하는 리소스의 아이디임을 의미합니다.
Android의 모든 리소스는 R 클래스에 의해 int 타입의 아이디로 관리됩니다.
그래서 drawable 타입 리소스의 아이디를 넣어야 할 곳에 문자열 리소스의 아이디나 정수 리터럴을 넣는 등 실수를 범할 수 있는데, @DrawableRes 애너테이션을 활용하면 실수를 방지할 수 있습니다.
@StringRes 예제
void setMessage(@StringRes int resId) { mMessage = mContext.getText(resId); } // ... setMessage(R.string.error_retry); // OK int stringId = R.string.error_retry; setMessage(stringId); // OK setMessage(R.color.white); // ERROR: Expected resource of type string setMessage(1); // ERROR:
@CallSuper
- @CallSuper 애너테이션은 이 애너테이션이 붙은 메서드를 하위 클래스에서 오버라이드할 때는 반드시 상위 클래스의 메서드를 호출하도록 강제합니다.
- 액티비티의 라이프사이클 메서드에도 사용됩니다.
다음 코드는 foo() 메서드에 @CallSuper 애너테이션을 붙여 foo() 메서드를 오버라이드한
하위 클래스에서 반드시 super.foo() 메서드를 호출하도록 강제하는 예제입니다.
class Super { @CallSuper void foo() { } void bar() { } } // ... class Example1 extends Super { @Override void foo() { // ERROR: Overriding method should call 'super.foo' } @Override void bar() { // OK } } class Example2 extends Super { @Override void foo() { // OK super.foo(); } @Override void bar() { // OK super.bar(); } } class ExampleActivity extends Activity { protected void onCreate(Bundle saved) { // ERROR: Overriding method should call // 'super.onCreate' } }
반응형'Android' 카테고리의 다른 글
Android) FloatingActionButton 이미지 색상 변경하기 (1) 2021.01.29 Android) 안드로이드에서 Coroutine의 ViewModelScope와 LiveData Builder 알아보기 (0) 2021.01.21 Android) Fragment에서 View Binding 문제점, 제대로 사용하기 (2) 2021.01.06 Android) LiveData와 Lifecycle 알아보기 - Activity, Fragment 사용법 (0) 2021.01.05 Android) Clean Architecture 알아보기 (0) 2020.12.30