본문 바로가기

Kotlin

(17)
[Kotlin]Coroutine - 백그라운드에서의 실행 디벨러퍼 공식문서를 바탕으로 코루틴으로 백그라운드 작업을 실행시키는 방법을 알아보겠습니다. #Coroutine - 백그라운드 작업 Developer Instruction to coroutines - https://developer.android.com/kotlin/coroutines?hl=en 서버에 로그인을 요청하는 Developer 사이트의 예제입니다 class LoginViewModel( private val loginRepository: LoginRepository ): ViewModel() { fun login(username: String, token: String) { // Create a new coroutine to move the execution off the UI thread vie..
[Kotlin] Java 컬렉션 Kotlin에서 사용하기, Kotlin 배열 #Java에서 선언된 컬렉션, Kotlin에서 사용 Java에서 정의한 타입을 코틀린에서는 플랫폼 타입으로 본다 (컬렉션 타입도 마찬가지) 플랫폼 타입은 널관련 정보가 없으므로, Nullable Non-Nullable 2가지 타입 모두가 될 수 있다 플랫폼 타입은 Mutable 관련 정보도 없으므로 Read Only, Mutable 2가지 타입 모두가 될 수 있다 즉, Java에서 선언된 컬렉션은 플랫폼 타입이며, Nullable과 Mutable 모두 개발자가 판단해서 사용해야 한다 *[예제] Java에서 선언된 Interface, Kotlin에서 구현하기 -Interface의 시그니처에 컬렉션 타입이 들어 있는 경우 //********* Java ********* public interface Java..
[Kotlin] 5. Not-null assertion, let 함수, lateinit # 널이 아님을 단언한다 !! Nullable 타입 뒤에 !!(not-null assertion)을 붙이면 강제로 Non-Null 타입으로 변경된다 이렇게 단언 해 놓고 null값이 들어가면 NullPointException이 발생함 즉, 단언이 틀릴경우 Exception이 발생해도 감수하겠다는 뜻 !!을 사용하고 NPE가 발생했을 경우 에러가 발생한 Line수는 나오지만 어떤 식에서 예외가 발생했는지는 나오지 않는다.즉, 'students!!.subject!!.classtype' 처럼 한 줄에 단언문을 여러개 쓸 경우 어떤 값이 null이어서 발생한 에러인지 디버깅 하기 힘드니 한 줄에 단언문을 여러개 쓰는 경우는 피하자 유의해서 사용해야 하며 꼭 필요한 경우에만 쓰도록 하자 간단 사용 예 fun ge..
[Kotlin] 5. Nullable 타입, Safe Call, 엘비스 연산자, Safe Cast # Null이 될 수 있는 타입 코틀린에는 널이 될 수 있는 타입이 따로 존재하며 명시적으로 타입 뒤에 '?'를 붙여 사용한다 ex)String? 모든 타입은 기본적으로 Non- Null Type 이라는 의미 Nullable Type일 경우 변수.메소드()처럼 사용할 수 없다 Non-Null Type에 null도, nullable 타입도 대입할 수 없으며, 함수의 파라미터에도 마찬가지 Nullable Type을 일단 널 체크 하고 나면, Non-Null Type처럼 사용할 수 있다 이렇게 컴파일 시점 NullPointException이 발생할 가능성을 체크해서 Null Safety를 보장할 수 있다 모든 검사는 컴파일 시점에 수행되므로, Nullable/Non-Null 타입 처리 관련해서 실행시점에 추가..
[Kotlin] CoRoutines 코루틴 개념과 코틀린에서의 코루틴 사용법에 대해서 알아보겠습니다. (CoroutineBuilder, CoroutineContext, CoroutineScope, Dispatcher, Job...) #코루틴 (Co + Routines) Co는 Cooperation의 약자로 '서로 자발적으로 상호협력하는 Routines(함수)' 의 뜻 즉, 번갈아가면서 서로 다른 함수들이 실행되는, 새로운 Thread가 만들지 않고도 단일 스레드에서도 비순차적 흐름을 프로그래밍 할 수 있는 기능 여러 개의 함수가 동시에 시작 or 동시에 끝나는 처리를 할 때도 편리하게 사용할 수 있음 이런 코루틴의 개념을 지원하는 언어 중 하나가 Kotlin이다 #코루틴 한 줄 정의 정의 : '비선점형 멀티태스킹을(non-preemptiv..
[Kotlin] 4. 람다 - with/apply #with/apply (수신 객체 지정 람다) with/ apply ? 코틀린 표준 라이브러리 함수 수신 객체 지정 람다를 사용하는 함수 수신 객체 지정 람다(lambda with receiver) 란? 람다 안에서 어떤 객체의 함수를 객체 이름을 명시하지 않고 사용하는 람다 어떤 객체를 사용할지 미리 정해줘야 함 (이 때 이 객체를 '수신 객체', 'receiver'라고 한다) 즉, 람다 안에서 사용할 객체를 미리 지정 해 놓고 객체 명시 없이 사용하겠다는 뜻 #with 1~10 홀/짝 구분 예제 - with 함수 적용 전 strBuilder를 반복해서 호출 하는 것을 볼 수 있다 val strBuilder = StringBuilder() strBuilder.append("****************..
[Kotlin] 4.람다 - 함수형 인터페이스(SAM 인터페이스) #코틀린과 자바의 함수형 인터페이스의 관계 결론부터 말하자면 '코틀린에서 함수형 인터페이스를 인자로 받는 Java함수를 호출 할 경우, 인터페이스 객체 대신 람다를 넘길 수 있다' 예를 들면 이렇게 button.setOnClickListener { println("객체 대신 람다를 넘기고 있음") } -여기서 '함수형 인터페이스'가 'SAM 인터페이스' 이다 -Java에 정의된 함수를 Kotlin에서 사용하는 경우를 말합니다 #SAM 인터페이스 1) SAM이란? Single abstract method / 단일 추상 메소드 2) SAM 인터페이스란? 추상 메소드가 단 1개 있는 인터페이스 '함수형 인터페이스' 라고도 한다(Functional interface) 3) 대표적인 SAM 인터페이스는? View..
[Kotlin] 4.람다 In Collection(Sequence) # 람다 활용법 In Collection(Sequence) 컬렉션 함수를 연달아 사용하면 연산 결과마다 새로운 컬렉션들이 생겨나게 되는데, 원소의 갯수가 많은 경우 효율이 떨어 질수 가 있다. 이 경우 Sequence를 이용해서 연산 조건을 다~ 적용하고 나~중에, 결과 list가 필요한 시점에 list를 한번만 생성해서 얻을 수 있다 (실제로 연산/계산은 Sequence를 list로 변환 시점에 이루어 지기때문에 lazy, 지연계산이라 표현한다) Sequence는 iterator를 반환하는 함수 1개만 있는 interface이다. 원소 갯수가 많은 Collection에서는 Sequence를 사용하는 것을 기본으로 하자 Collection.asSequence()를 통해 Collection을 ->Seque..