전체 글 411

lateinit 초기화 확인하기

kotlin 1.2부터는 lateinit 초기화를 확인 할 수 있다. 실제 값을 사용할 때 lateinit을 한번 체크해줌으로써 안전하게 접근할 수 있따. 이때 아래와 같이 ::을 통해서만 접근이 가능한 .isInitialized을 사용하여 체크할 수 있다. // 부르는 시점 초기화 sampleAdapter = SampleAdapter(ImageLoaderAdapterViewModel(this@SampleMainActivity, 3)) if (::sampleAdapter.isInitialized) { sampleAdapter.addItem() sampleAdapter.notifyDataSetChanged() } isInitialized는 Higher-Order function과 kotlin extensi..

코딩/코드리뷰 2021.09.09

ContentProvider & ContentResolver

안드로이드 4대 컴포넌트 중 ContentProvider에 대해 알아보려고 한다. ContentProvider란? 안드로이드 응용 프로그램을 구성하는 컴포넌트 중 하나로서 데이터를 제공하는 역할을 하며 응용 프로그램끼리 데이터를 공유하는 유일한 방법이다. A라는 앱과 B라는 앱 사이에 데이터를 공유한다고 생각하면 된다. ContentProvider는 AndroidManifest에 등록 한다. 여기서 포인트는 exported옵션이다. ContentProvider가 개발중인 앱 내에서만 호출한다면 해당 옵션은 별도 처리 하지 않아도 되지만, 외부 앱에서 개발중인 앱을 호출하여 데이터를 제공해야 하는 경우, exported 옵션은 무조건 true로 주어야 한다. exported 옵션을 true로 주어야 하는 ..

안드로이드 2021.08.31

뷰 바인딩

View binding 이란? 간단하게 findViewById를 쓰지 않고, XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식입니다. 여기서 말하는 object는 Android studio에서 자동으로 대신 만들어줍니다. 액티비티에서 이미 binding = ActivityPreviewmovieBinding.inflate( layoutInflater ) 바인딩을 해준 상태이고. 그 안에 include된 변수를 가져올 때에는 binding.변수.변수로 접근하여 사용했다. 하지만, parentView를 넣어 binding해야 하는 경우가 생김. bindingCustomOverlay = ExoStyledPlayerCustomOverlayViewBinding.infla..

코딩/코드리뷰 2021.08.31

for문 filter와 map으로 변경하기

1. 내가 짠 소스 for( data in images ) { if( data.type == TYPE ) { list.add(data) } } filter와 map을 이용 list.addAll( images.filter { data -> data.type == TYPE }.map { data -> data } ) 성능상 부담스럽다면 mapNotNull을 이용할 수도 list.addAll( images.mapNotNull { data -> data.takeIf{ data.type == TYPE }?.let { it } } ) filter() : 필터 filter()는 리스트내에 인자들 중 조건에 일치하는 인자만 필터링합니다. map() : 변환 map()은 컬랙션 내 인자를 변환하여 반환할 때 사용됩니다...

코딩/코드리뷰 2021.08.27