본문 바로가기

LANGUAGES, METHODLOGY/Kotlin

(13)
[Kotlin] 컬렉션의 lazy 연산을 짚어보자 (Sequence) 코틀린에서는 다양한 형태로 시퀀셜하게 결과값을 이어나가는 코딩이 가능하다. 문제는 컬렉션을 베이스로 시퀀셜하게 코드 블럭을 잇는 경우, 이에 대한 결과값들이 연산 이후마다 만들어지기 때문에 (우리는 최종적인 값만을 필요로 함에도 불구하고) 메모리적으로 비효율 적이라 할 수 있다. (특정 컬렉션에 사용하는 조건이 다양하고 많을 수록 받는 영향은 클 것이다) 이를 위해 코틀린은 Sequence를 제공하고 있는데, 컬렉션에 이를 사용하는 경우 호출 원본 리스트에서 이어진 시퀀셜한 모든 연산을 뒤로 이를 toList 등으로 추출하기 이전까지 어떠한 임시 컬렉션 변수를 생성하지 않는다는 것이다! 방법은 간단한데, 보통 사용하던 컬렉션 API 사용에 앞서 원본 리스트에 asSequence()를 호출하고 사용하는 것..
[Kotlin] 컬렉션 함수형 API로 컬렉션 쉽게 갖고 놀기 개발을 하다 보면 리스트형 변수와 필연적으로 마주하게 되는데, 단순히 이런 컬렉션 객체를 사용하는 것에서 넘어 특정한 조건에 따라 필터링을 한 목록을 얻는다던지, 검색한 모든 결과값에서 원하는 결과가 있는지 확인한다던지 하는 요구사항을 필요로 한 적이 있을 것이다. 코틀린을 사용할 때, 이러한 요구사항을 손쉽게 충족해주는 API를 정리해보고자 한다! 컬렉션 함수형 API 우선 Kotlin in Action에서 소개하는 함수 중 필수적인 함수로 소개하는 filter와 map에 대해 살펴보자. filter filter를 사용하는 경우, 호출하는 대상 컬렉션으로부터 필요한 조건을 filter 코드 블럭에 선언하면 조건에 맞는 List로 이를 반환하게 된다. val targetList = listOf("윤철수"..
[Kotlin] Default Argument와 Named Argument 활용하기 개발을 하게 되면서 일상적으로 마주하는 상황 중에 변수들을 넘겨주기 위한 클래스나 메소드를 설계하고, 이를 활용해야 할 때가 있다. 코틀린은 이런 상황에서 개발자가 그저 설정이 필요 없는 변수들을 넘겨줄 것 없이 손쉽게 개발 할 수 있도록 Default Argument를 제공하고 있다. 1. Default Argument - 정의한 Function 혹은 class의 매개변수를 아래와 같이 설정한다. // 아이스크림을 만드는 function이 있다면? // amount는 만드는 갯수, option은 맛이라고 할 때. fun makeIcecream(amount: Int = 1, option : String = "바닐라"): IceCream { return IceCream(amount, option) } //..
[안드로이드] Kotlin sealed class로 여러 클래스들을 보다 분명하게, 유연하게 활용하기 기존에 MVP 아키텍처 패턴으로 짜여진 프로젝트를 빌드업하면서 몇가지 애로사항이 생겼다. Presenter에서 로직을 수행 후 뷰를 업데이트하기 위한 코드를 최대한 작은 단위로 한정해서, 서로 제약사항이 생기지 않도록 구현하고 있었는데, 문제는 여기서 각 뷰 단위를 업데이트하기 위한 코드가 배로 많아지고, UI가 어떤 코드를 거쳐 업데이트 되는지 한 눈에 파악하기가 어려웠다. 수행하고자 하는 코드를 파라미터의 종류에 따라 구분지을 수는 없을까? 그리고 이를 하나의 함수로 통일시켜 사용할 수 있을까? 특정 함수에 사용하고자 하는 클래스들을 제한해 사용할 수 있을까? 이런 물음들을 Kotlin의 sealed class를 활용해 상당부분 해결할 수 있었다. 1. Sealed Class란 무엇인가? Sealed..
[안드로이드 | 코틀린] 코틀린으로 Queue 사용해보기 프로젝트에서 요구사항 구현을 위해 코틀린의 Queue 클래스를 활용해보기로 했다. Queue는 기본 java.util 패키지 내에 포함되어 있으며, Queue를 사용하면 IDE가 java.util.* import를 새롭게 추가하는 것을 확인할 수 있을 것이다. 그럼 Queue를 쓸 때에 사용 가능한 function을 살펴보자. - add(element: E) Any type의 element를 Queue에 추가한다. Any는 코틀린의 모든 클래스의 최상단 super 클래스로, 결국 어떤 클래스든지 문제없이 사용이 가능하다는 것이다. Queue에 element를 더하는데 성공하면 true를 return하며, 실패시 IllegalStateException을 발생시킨다. - element() element()는..
[안드로이드 | ExoPlayer] EventListener를 활용해 여러개의 동영상 연달아 재생하기 ExoPlayer를 동영상 재생에 쓰던 중에 여러개의 영상을 연달아 보여줘야 하는 요구사항이 생겼다. 이를 위해 일전에 에셋을 리스트 형태로 만들어 다른 용도로 썼던 것을 떠올려 구현을 해보기로 했다. 1. ExoPlayer Initialize 2. 비디오 에셋 resourceList 설정 3. ProgressiveMediaSource ArrayList에 차례대로 resourceList를 로딩해 add 4. Player.EventListener Initialize 5. ExoPlayer에 listener add 6. ExoPlayer.setShutterBackgroundColor(Color.TRANSPARENT) 7. 영상을 차례대로 재생하는 플레이어 감상 - 기본 설정 ..
[GDG Seoul | 코틀린 ] 코틀린의 미래는 어디로? | Kotlin / Everywhere Seoul 2019에 가다 [2부] 저번 월요일에 마루180 지하에서 Kotlin / Everywhere Seoul 2019가 열렸다. 첫번째 시간으로 진행되었던 What's new in Kotlin?에 대해서 리마인드 할만한 내용을 정리해보고자 한다. 세션은 Kotlin in action의 공동저자이자 JetBrains의 Developer Advocate로 활동중인 Svetlana Isakova가 진행하였다. 1. 코틀린은 모두가 함께 만들어나가는 언어다. 코틀린은 자바를 대체할만한 언어로써, 형추론 및 람다 코드등을 조합해 간결하게 코딩이 가능하다는 장점을 가지고 있는 것으로 알고 있었다. 코틀린의 역사는 오래되지 않았는데, 2010년부터 개발에 착수해 2014년에 정식으로 릴리즈 되었고, 이후 구글로부터 안드로이드의 공식언어로까지 채..
[GDG Seoul | 코틀린 ] Kotlin / Everywhere Seoul 2019에 가다 [1부] 넌지시 마음에 품던 개발 컨퍼런스를 그동안 못 가보다가, 이제 개발 2년차에 접어든 시기에 처음으로 GDG Seoul에서 주최하는 개발 컨퍼런스에 참가하게 되었다. 열심히 공부해서 손에 익히고자 했던 코틀린을 어느새 주 랭귀지로 개발하게 된 중에 코틀린 관련 컨퍼런스가 열린다는 사실은 적잖이 반가울 수 밖에 없었다. 프로그램은 Kotlin의 현재와 앞으로의 미래를 간략히 그리는 Svetlana lsakova 님의 1부 세션, 그리고 Kotlin에 대해 좀 더 구조적인 깊이를 안내해주셨던 Pluu님의 2부 세션으로 이루어져 있었다. 2부로 구성된 간략한 세션이었지만, 코틀린의 초보, 중수의 레벨에서 앞으로 '무엇을 배워야'하는지, 그리고 앞으로 코틀린이 나아갈 로드맵에 대해서도 알 수 있는 유익한 컨퍼런스..