블로그의 성격이나 뭐나 다 보면 저는 기본적으로 자바 개발자입니다(...)
그치만 어쩌겠어요. 회사 개발팀에서 이제 코틀린으로 개발한다는 걸..
자바와 코틀린의 큰 차이점은 코틀린은 그만큼 확장성이 좋다는 점이겠죠. 하기 전에 기본적인 익스텐션을 하나 봅니다.
코틀린을 하면서 가장 크게 당황한 점은, 기존의 자바에서 XML 요소를 찾을 때는, 전역변수로 요소를 선언하고, findViewById 를 통해 찾았습니다
ex)
public class FragmentPostbox extends Fragment {
private static final String TAG = "FragmentPostbox";
private ImageView imageViewPostbox;
public static FragmentPostbox newInstance() {
FragmentPostbox fragmentPostbox = new FragmentPostbox();
return fragmentPostbox;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main_postbox, container, false);
findView();
return view;
}
private void findView() {
imageViewPostbox = view.findViewById(R.id.imageViewPostBox);
}
}
이렇게 찾아야만 했으나, 코틀린은 이럴 수가 없습니다. 기본적으로 전역번수를 저렇게 설정해버리면 초기값이 null인데, 코틀린은 null을 허용하지 않거든요. 그래서 저렇게 비슷하게 불러오면서도 훨씬 간단하게 호출할 수 있는 익스텐션을 활용합니다.
익스텐션을 활용하려면 먼저 모듈 단위의 gradle에서 따로 플러그인을 선언해야합니다.
plugins {
...
id 'kotlin-android'
id 'kotlin-android-extensions'
}
android {
compileSdkVersion 30
...
플러그인에 id 'kotlin-android-extensions' 을 입력하고 sync 하면 코틀린 익스텐션을 이용할 준비가 완료됩니다.
그럼 접근은 어떻게 하냐면..
간단합니다.
간단히 xml코드를 봅니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="테스트"/>
</LinearLayout>
텍스트뷰에 설정된 텍스트는 '테스트' 입니다.
이제 자바처럼 메인에서 참조해서 텍스트뷰의 글씨를 변경해봅니다.
...
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
loadText()
}
private fun loadText() {
textView.text = "테스트 아님"
}
}
다음처럼 그저 코틀린 파일이 참조하는 뷰가 가진 아이디를 적기만해도(textView) 알아서 코틀린이 인식하고 그 아이디의 값을 넣어줍니다. 그 값의 텍스트를 넣어주기만 하면 끝납니다.. 대박쉽죠.
원리가 캐시를 참조하는거라고 합니다. 그래서 기존 findViewById 보다 가벼운 편이라고 해요.
+) 추가
팀장님에게 질문해봤는데, 화면이 적은 경우나 MVVM 패턴을 쓰는 경우는 익스텐션을 쓰는게 코드가 가볍다고 해요.
그러나 이걸 바인딩 하는데에 어노테이션을 리플렉션 해서 사용하기 때문에 화면이 많거나 MVC 패턴의 경우는 findViewById를 쓰는게 성능상 좋다고 하네요.
물론 요즘 (한국의 경우) 휴대폰이 좋아서 미세한 성능 차는 사용자 입장에서 느끼기 어렵지만, 배터리의 소비 속도가 더 빨라지거나~ 하는 문제는 발생한다고 합니다.
'Android' 카테고리의 다른 글
주니어가 하는 MVC패턴과 MVP 패턴에 대한 고찰....... (0) | 2021.01.28 |
---|---|
Android Studio, Kotlin] 코틀린 익스텐션을 이용한 리사이클러뷰 제작 (0) | 2020.12.29 |
Android Studio, JAVA] 컬러 그래디언트 만들기 (0) | 2020.11.25 |
Android Studio, JAVA ] sphere Panorama view (0) | 2020.11.20 |
Android Studio ] 리사이클러뷰의 어댑터, 뷰홀더를 다른 파일로 만들어보기 (0) | 2020.10.28 |