Kotlin lang 6

[kotlin] 코틀린 inline과 crossinline 키워드

코틀린에 흥미로운 키워드가 하나 있다.  inline과 crossinline이라는건데, 오늘 처음 봤다.  inline함수로 지정하면 컴파일 시 해당 함수의 바이트코드가 호출 지점에 직접 삽입된다고 한다. 이걸 인라인화라고 한다. 그래서 함수 호출의 오버헤드를 줄일 수 있다고 한다.  간단한 함수 있을때 사용하면 조금이나마 성능을 줄일 수 있을 것 같다. 별거없다. 그냥 코드 치환이고 성능 조금 더 올리고 싶을 때 쓰면 된다.  재밌는건 crossinline이라는 생소한 키워드도 있다.  이건 inline 함수의 람다 파라미터에 사용된다. inline 함수 내부에 전달된 람다가 비지역 반환(non-local returns)를 할 수 없음을 나타낸다고 한다. 혹은 방지라는 용어가 더 알맞겠다.  비지역 반..

Kotlin lang 2024.04.27

[kotlin] 코틀린 코루틴에 대한 개념 정리 (4)

코틀린에는 구조화된 동시성이란 개념이 있다고 한다.  꽤나 비중있는 주제인것 같아 깔끔하게 정리해보고자 한다.  코루틴에는 코루틴 내부에서 또 코루틴을 만들 수 있다.이 경우 부모코루틴과 자식 코루틴이 생긴다. 코루틴에는 Job객체로 코루틴을 추적할 수 있는데, Job객체 내부에는 parent와 children이라는 프로퍼티가 있어서 이걸로 부모 자식간 양방향 참조가 가능하다.참고로 parent는 Job?타입이고, children은 Sequence 타입이다. parent가 Job?인 이유는 루트 코루틴의 경우 부모가 없을 수도 있기 때문이다.  그리고 CoroutineContext의 경우 부모에서 자식으로 상속되고, 자식에서 별도의 CoroutineContext를 사용한다면 상속받은걸 덮어씌우게 된다. ..

Kotlin lang 2024.04.25

[kotiln] 코틀린 코루틴에 대한 개념 정리 (3)

지난번 포스팅에서 코루틴 빌더 함수와 Job객체에 대해 알아보았다.  이번 포스팅에서는 async와 Deferred에 대해서 알아보자.  이전에 배운 launch 코루틴 빌더 함수는 코루틴으로부터 결과값을 받을 수 없었다. 다만 Job객체를 받을 뿐이었다.  그런데 코루틴으로부터 작업에 대한 결과값을 받을 필요가 있을 수 있다. 이때 사용하는데 async와 Deferred응답 객체이다. async(Dispatchers.IO) { ... }와 같이 사용할 경우 Deferred를 리턴받고, 해당 Deferred타입의 변수에 대해 await()메서드를 사용하면 결과를 받을 수 있다. await()을 사용하는 이유는, 코루틴이 언제 완료될지는 모르기 때문에 Deferred가 미래의 값이라는 의미..

Kotlin lang 2024.04.22

[kotlin] 코틀린 코루틴에 대한 개념 정리 (2)

지난번 포스트에 이어 코틀린 코루틴에 대한 개념 정리를 이어가고자 한다. 코루틴에는 CoroutineStart.LAZY를 사용한 코루틴 지연이라는 개념이 있다. 왜 코루틴을 지연해야할까? 코루틴을 CoroutineDispatcher의 큐에 제출했다고해서, 곧장 코루틴을 특정 스레드에 할당해서 바로 실행해선 안될때 필요하기 때문이다. 그저 실행해야할 코루틴을 미리 만들어두고 나중에 실행시키는 것이다. 이 경우 launch의 start인자로 CoroutineStart.LAZY를 주어 제출하면 된다. 그리고 이후에 실행시킬 필가 있을때 start시키면 된다. 지연하고 나서 이후 시작할 수 있는 방법은 launch 코루틴 빌더함수를 통해 받은 Job객체를 사용하면 된다. Job객체는 코루틴을 실행시킬 수 있는 ..

Kotlin lang 2024.04.21

[Kotlin] 코틀린 코루틴에 대한 개념 정리 (1)

최근 코틀린을 다룰 일이 있었다. 코드는 그냥 작성하면 되는데, 코루틴에 대한 개념이 좀 부족했다고 생각했다. 애매하게 알고 있는 상태에서 코루틴의 기능을 쓰는게 썩 기분이 좋진 않았다. 뭔가 찝찝했다. 그래서 이번 기회에 코루틴에 대해 시간을 갖고 천천히 알아보고자 한다. 코루틴은 기본적으로 경량 스레드라고 불린다. 왜 경량 스레드냐면, 스레드에 붙였다 뗄 수 있기 때문이다. 왜 코루틴이 필요하냐를 정리하자면, 멀티스레드 프로그래밍에서의 일부 한계점을 극복하고자함이다. 우선 싱글 스레드부터 살펴보자. 스레드가 하나이므로 단 하나의 작업만 할 수 있다. 모든 일은 순차적으로 진행된다. cpu바운드던, 네트워크 IO 작업이던 모든지 하나라서 그다지 효율적이지 않다. 그래서 등장한게 멀티스레드 프로그래밍이다..

Kotlin lang 2024.04.20

[Kotlin] 코틀린 기본기

최근 코틀린을 배워야할 일이 생겼다. 당장 쓸 건 아니지만 미리 알아둬야겠다는 생각이 들어서 간단하게 정리해보고자 한다. 코틀린은 Google I/O 2017에서 안드로이드의 공식언어로 채택되었다. 코틀린 장점 문법적으로 진보 서버 사이드 애플리케이션에 좋음 자바 완벽 호환 툴 지원 (Intellij) 러닝커브가 낫음 코틀린 지원 서버사이드 프레임워크 Spring Vert.x kotlinx.html 세미콜론 사용하지 않는다. val temp: int = 10 var temp = 15 val: 변할 수 없는 상수 (read only, 초기화해줘서 선언해야함) var: 일반적인 변수 fun sum(a: int, b: int): int { return a + b } 위 코드는 아래처럼 단순화 가능하다. fun..

Kotlin lang 2023.04.11
반응형