본문 바로가기

Kotlin

(6)
[Kotlin] lateinit와 by lazy 비교 kotlin에서 lateinit과 by lazy 둘 다 변수를 늦게 초기화 할 때 사용하는 방법이다. 그렇다면 늦게 초기화하는 것은 무엇이고, 둘의 차이점은 무엇일까? 코틀린은 변수 선언할 때 객체를 바로 할당하지 않는 경우 컴파일이 되지 않는다. 그래서 변수 선언시 값을 초기화 하지 않거나, nullable 타입으로 만들어주지 않으면 컴파일 에러가 발생한다. 또한 nullable 타입으로 선언해도 코틀린에선 null 초기화 사용을 추천하지 않는다. 하지만 개발을 하다보면 변수 선언 시 초기값이나 상태를 정의 하기 어려운 경우가 있다. 즉 변수에 객체를 할당 하는 것을 선언과 동시에 할 수 없을 경우, 변수만 일단 선언하고 나중에 값을 사용할 때 값을 입력해주는 늦은 초기화 / 초기화를 지연, latei..
[Kotlin] 코루틴(coroutine)(2) - 코루틴 사용 방법 이번 포스팅에서는 코루틴 사용 방법에 대해 알아보자. CouroutineContext : 코루틴 처리를 어떻게 할 것인지에 대한 요소들의 집합 CouroutineContext 요소 Dispatcher : 코루틴을 처리한 스레드를 setting하고 할당하는 역할 Job : 생성된 코루틴을 컨트롤 (생명주기, 상속관계 정리 및 관리) Coroutine Dispatcher 코루틴을 스레드에 배분하는 역할 코루틴을 시작하거나 재개할 스레드를 결정하기 위해 사용 스레드 풀에서 스레드를 하나 할당해 코루틴을 배당 코루틴은 스레트풀을 생성하지만 직접 제어하지는 않고 오직 Dispatcher을 통해서만 제어 가능 코루틴 디스패처는 CoroutineDispatcher 인터페이스를 구현해야 함 Dispatcher 종류 D..
[Kotlin] 코루틴(coroutine)(1) - 코루틴 무엇인가 이번 포스팅에서는 클라이언트가 네트워크 통신을 하는데 비동기 처리를 하기 위해 주로 사용되는 코루틴에 대해서 알아보자. 동기와 비동기 (sync vs async) 동기 (Synchronous : 동시적으로 발생하는) 작업을 수행하고 그 작업이 완료될 때까지 다른 작업을 하지 못하고 기다리는 방식이다. 이렇게 동기적으로 프로그램이 돌아가면 먼저 들어온 요청에 의한 로직이 돌고 있는 동안은 다른 작업은 대기하는, 즉 block 상태가 된다. 비동기 (Asynchronous : 동시에 일어나지 않는) 동기는 의식의 흐름대로 코드를 작성할 수 있어 구현하기는 쉽지만, 특정 요청에 의한 코드 블록이 실행되는 동안 다른 코드는 대기를 하는 block 상태에 빠지는 단점이 있다. 비동기 방식은 어떤 작업을 수행하지만..
[Kotlin] 익명객체와 옵저버 패턴 이번 시간에는 안드로이드에서 리스너에 해당하는 옵저버 패턴에 대해 알아보고자 한다. 필자는 리스너를 정말 많이 사용했지만 이것이 옵저버 패턴인지 모르고 사용해왔었다. 그래서 이번 포스팅을 통해 자세히 알아보고자 한다. 옵저버 : 이벤트가 일어나는 것을 감시하는 감시자 역할 안드로이드에서는 키의 입력, 터치의 발생, 데이터의 수신등 함수로 직접 요청하지 않았지만 시스템 또는 루틴에 의해 발생하게 되는 동작들을 이벤트라고 부른다. 이 이벤트가 발생할 때마다 즉각적으로 처리할 수 있도록 만드는 프로그래밍 패턴을 옵저버 패턴이라고 부른다. 옵저버 패턴을 구현할 때는 두 개의 클래스가 필요하다. -> 이벤트를 수신할 클래스 A / 이벤트의 발생 및 전달을 할 클래스 B 이 두개의 클래스는 어떻게 통신을 할까? -..
[Kotlin] 고차함수와 람다함수 고차함수와 람다함수는 함수를 일종의 변수로 사용할 수 있게 해줄 뿐만 아니라 컬렉션의 조작이나 스코프 함수의 사용에도 도움이 되어 자주 활용하게 되는 함수들이다. 먼저 고차함수에 대해 자세히 알아보자. 고차함수는 함수를 마치 클래스에서 만들어 낸 '인스턴스'처럼 취급하는 방법이다. 즉 함수를 패러미터로 넘겨줄 수도 있고 결과값으로 반환받을 수도 있는 방법이다. 코틀린에서는 모든 함수를 고차함수로 사용 가능하다. fun a (str : String){ println("$str 함수 a") } fun b (function: (String)->Unit) { function("b가 호출한") } 다음은 함수 b가 함수 a를 고차함수 형식의 패러미터로 받을 수 있도록 한 코드이다. fun b (function: ..
[Kotlin] 스코프 함수 스코프 함수를 이용하면 인스턴스의 속성이나 함수를 scope내에서 깔끔하게 분리하여 사용할 수 있다는 점 때문에 코드의 가독성을 향상시키는 특징이 있다. 이러한 스코프 함수에 대해 자세히 알아보자. 스코프 함수는 함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 기본으로 제공하는 함수들이다. 클래스에서 생성한 인스턴스를 스코프 함수에 전달하면 인스턴스의 속성이나 함수를 좀 더 깔끔하게 불러 쓸 수 있다. 스코프 함수에는 apply, run, with, also, let이 있다. 각각에 대해 자세히 알아보자. apply : 인스턴스를 생성한 후 변수에 담기 전에 ‘초기화 과정을 수행할 때’ 많이 쓰인다. apply와 같은 스코프 함수를 사용하면 main함수와 ‘별도의 scope’에서 인스턴스의 변수와..