본문 바로가기

Kotlin

(23)
[Android] 갤러리에서 사진 가져오기 - 기본 갤러리 앱 사용하기 안드로이드 앱에서 기존 사진을 가져오는 방법으로 다음 두 가지가 있습니다. 1. 기본 갤러리 앱 사용 2. 커스텀 갤러리 화면 만들기 이번에는 기본 갤러리 앱을 사용해 사진을 가져오도록 해보겠습니다. 암시적 Intent를 사용하면 쉽게 갤러리 앱을 사용할 수 있습니다. 1. 기본 갤러리 앱 실행 Intent 객체를 생성하고 갤러리 액티비티 실행하기 위한 정보를 Setting 합니다. startActivityForResult의 두 번째 인자로 나중에 확인을 위한 request Code 값을 넣습니다. private fun startDefaultGalleryApp() { val intent = Intent() intent.type = "image/*" intent.action = Intent.ACTION_G..
Android 소리나는 카운트 다운 타이머 만들기 (CountdownTimer + SoundPool) 안녕하세요 이번엔 소리 나는 카운트 다운 타이머를 만들어보겠습니다. 구현할 기능 1~60분까지 타이머를 설정할 수 있다. 1초마다 화면을 갱신한다. 상황에 따른 타이머 효과음을 적용한다. (진행 중, 타이머 종료) 사용하는 기술 CountDownTimer SoundPool SeekBar CountDownTimer 일정한 간격에 대한 정기적인 알림과 함께 미래의 시간까지 카운트 다운을 예약하기 위한 타이머입니다. 다음은 텍스트 필드에 30초 카운트다운을 표시하는 예시입니다. object : CountDownTimer(30000, 1000) { override fun onTick(millisUntilFinished: Long) { mTextField.setText("seconds remaining: " + ..
코틀린[Kotlin]에서 Delegated properties 사용하기 위임된 프로퍼티 (Delegated properties) Kotlin은 특정 객체에 대한 프로퍼티의 set과 get 메서드의 호출을 위임할 수 있는 Delegated properties 메커니즘을 제공합니다. 이 경우 delegate 객체에는 getValue 메서드가 있어야 합니다. 변경 가능한 프로퍼티의 경우 setValue도 필요합니다. import kotlin.reflect.KProperty class Example { var p: String by Delegate() // 1 override fun toString() = "Example Class" } class Delegate() { operator fun getValue(thisRef: Any?, prop: KProperty): String ..
코틀린[Kotlin]에서 Delegation 패턴 사용하기 Delegation 디자인 패턴에서 Delegate Pattern은 어떤 기능을 자신이 처리하지 않고 다른 객체에 위임을 시켜 그 객체가 일을 처리하도록 하는 것입니다. Delegate은 사전적 정의로 위임하다. 대표자 라는 뜻입니다. Derived 클래스는 모든 public 멤버를 지정된 객체에 위임하여 Base 인터페이스를 구현할 수 있습니다. interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main() { val b = BaseImpl(10) Derived(b).print() } Derived의 ..
코틀린의[Kotlin] Scope 함수 Scope functions 코틀린 표준 라이브러리에는 객체 컨텍스트 내에서 코드 블록을 실행하는 것이 유일한 목적인 여러 함수가 포함되어 있습니다. 람다 표현식이 제공된 객체에서 이러한 함수를 호출하면 임시 범위가(scope) 형성됩니다. 이 범위에서는 이름 없이 객체에 접근할 수 있습니다. 이러한 기능을 scope functions이라고 합니다. let, run, with, apply, also의 다섯 가지가 있습니다. 기본적으로, 이 함수들은 동일한 역할을 합니다: 객체에 코드 블럭을 실행하는 것입니다. 다른 점은, 이 객체를 어떤 방식으로 블럭 안에서 사용할 수 있는지, 그리고 전체 표현식(expression)의 결과가 어떻게 되는지입니다. 아래는 전형적인 scope function의 사용법입니다..
코틀린[Kotlin] Collections에서 자주 사용하는 함수 알아보기 (Filter, map, count, groupby ....) 지난번에 코틀린 collections에 대해 알아본 것에 이어서 컬렉션에서 자주 사용하는 함수들에 대해 알아보겠습니다. 함수들에 대해서 알면 알수록 개발이 편해지는 것 같습니다. 이런 상황에선 이걸 쓰고, 저런 상황에서는 저걸 쓰고 등등등 filter Filter 함수를 사용하면 컬렉션을 필터링할 수 있습니다. 필터는 컬렉션의 각 요소에 적용됩니다. 조건을 true로 만드는 값 들이 결과 컬렉션에 담겨 반환됩니다. val numbers = listOf(1, -2, 3, -4, 5, -6) // 1 val positives = numbers.filter { x -> x > 0 } // 2 val negatives = numbers.filter { it < 0 } // 3 숫자 컬렉션을 정의합니다. 양수를 ..
코틀린[Kotlin] 컬렉션(Collections) 알아보기 (List, Map, Set ...) 이번에는 코틀린의 컬렉션에 대해서 알아보겠습니다. 컬렉션에는 일반적으로 동일한 타입의 여러 객체를 담을 때 사용합니다. 예를 들어, 한 부서의 모든 개발자의 평균 연령을 계산하는 데 사용할 수 있는 컬렉션을 구성할 수 있습니다. 다음 컬렉션 타입들이 Kotlin과 관련이 있습니다. List 리스트는 위치를 반영하는 정수인 인덱스로 데이터에 접근할 수 있는 순서가 있는 컬렉션입니다. 데이터는 리스트에서 두 번 이상 나타날 수 있습니다. 리스트의 예는 전화번호입니다. 전화번호 부는 번호들의 그룹이고, 번호들의 순서가 중요하며, 번호가 반복될 수 있습니다. Kotlin에서 리스트는 변경 가능할 수 있거나(MutableList) 읽기 전용(List)일 수 있습니다. 리스트 생성을 위해 읽기 전용 리스트에는 표준..
코틀린[Kotlin] 특별한 클래스들 (Data, Enum, Sealed Classes And Object) 이번엔 코틀린에서 지원하는 특별한 클래스들에 대해서 다뤄볼 것입니다. 코틀린 공식문서를 참고해 작성했습니다. Data Classes 데이터 클래스를 사용하면 값을 저장하는 데 사용되는 클래스를 쉽게 만들 수 있습니다. 이러한 클래스에는 복사하기(copy), 문자열 표현 가져오기(toString) 및 컬렉션의 인스턴스 사용을 위한 메서드가 자동으로 제공됩니다. data class User(val name: String, val id: Int) { // 1 override fun equals(other: Any?) = other is User && other.id == this.id // 2 } fun main() { val user = User("KimSo", 1) // User(name=KimSo, id..