카샤의 만개시기
close
프로필 배경
프로필 로고

카샤의 만개시기

  • 분류 전체보기 (90)
    • 만개시기 (1)
    • Foundation (12)
      • Algorithm (3)
      • Operation (1)
      • Network (1)
      • Programming (1)
      • Design Pattern (5)
    • Architecture (1)
      • DDD (1)
    • Java (20)
      • POJO (9)
      • Spring (3)
      • Liferay (1)
      • MSA (7)
    • Kotlin (13)
    • Javascript (2)
      • EcmaScript (0)
      • Node.js (0)
      • React (0)
    • Swift (0)
    • Python (0)
    • Android (0)
    • IOS (0)
    • Database (4)
      • mySQL (3)
      • MongoDB (0)
      • Oracle (0)
      • Redis (0)
    • DevOps (25)
      • Docker & K8S (17)
      • Ansible (2)
      • Performance Test (4)
      • APM (1)
      • Fluentd (1)
    • Machine Learning (7)
    • Big Data (0)
      • pyspark (0)
    • Review (3)
    • 유용한 정보 (1)
    • 일상 (1)
  • 홈
  • 카테고리
  • 방명록

Kotlin Coroutine(코루틴) - Channel(채널)

채널은 넌블로킹 전송 개념으로 SendChannel과 ReceiveChannel 인터페이스를 이용해 값들의 스트림을 전송하는 방법을 제공합니다. fun main() = runBlocking { val channel = Channel() launch { // 여기에 다량의 CPU 연산작업이나 비동기 로직을 둘 수 있다. for (x in 1..5) channel.send(x * x) } // 5개의 값을 채널로부터 받는다 repeat(5) { println(channel.receive()) } println("Done!") launch { for (x in 1..5) channel.send(x * x) channel.close() // 모두 보내고 닫기 명시 } // for 루프를 사용해 끝까지 읽기 fo..

  • format_list_bulleted Kotlin
  • · 2019. 12. 14.
  • textsms

Kotlin Coroutine(코루틴) - 문맥(Context)과 제어

코루틴의 문맥 코루틴은 항상 특정 문맥에서 실행되는데 이런 문맥은 CoroutineContext에 의해 정의되고 내부적으로 CommonPool이 지정되어 코루틴이 사용할 스레드의 공동 풀을 사용하게 됩니다. 코루틴은 이 pool에 이미 초기화되어 있는 스레드 하나 이상을 선택하여 초기화하기 때문에 스레드를 생성하는 오버헤드가 적고 하나의 스레드에 다수의 코루틴을 지정할수 있어 성능이 빠릅니다. 특정 스레드 개수를 지정하려면 다음과 같이 사용자 문맥을 지정해 만들수 있습니다. val threadPool = Executors.newFixedThreadPool(4) val myContext = threadPool. asCoroutineDispatcher() async(myContext) { ... }코루틴이 ..

  • format_list_bulleted Kotlin
  • · 2019. 12. 13.
  • textsms

Kotlin Coroutine(코루틴) - 개념과 사용법

프로그램에서 태스크를 수행할 때 운영체제를 사용할 수 있게 하고 특정한 작업에 작업 시간을 할당하는 것을 선점한다라고 합니다. 선점형 멀티태스킹(Preemptive Multitasking)은 운영체제가 강제로 태스크의 실행을 바꾸는 개념이고 협력형 멀티태스킹은 태스크들이 자발적으로 양보하며 실행을 바꿀 수 있는 개념입니다. 코루틴은 이러한 협력형 멀티태스킹을 이용하여 동시성 프로그래밍을 지원하는데, 해당 루틴을 일시 중단(Suspended)하는 방식으로 Context-Switching을 없애고, 최적화된 비동기 함수를 통해 비선점형으로 작동하기 때문에 복잡한 넌블로킹 코드를 간결하게 해주며 더 나은 성능을 지원합니다. launch와 async 코루틴에서 사용되는 함수는 suspend()로 선언된 지연 함..

  • format_list_bulleted Kotlin
  • · 2019. 12. 8.
  • textsms

Kotlin Sequence(시퀀스)

시퀀스는 순차적인 컬렉션으로 요소의 크기를 특정하지 않고, 나중에 결정할 수 있는 컬렉션이다. 예를 들어 특정 파일을 줄 단위로 읽어서 마지막 라인 수를 모를때 사용할 수 있다. 따라서 시퀀스는 처리 중에는 계산하고 있지 않다가 toList()나 count()와 같은 최종 연산에 의해 결정 된다. generateSequence()로 생성 fun main() { // 시드값 1을 시작으로 1씩 증가하는 시퀀스 정의 val nums: Sequence = generateSequence(1) { it + 1 } // take()를 사용해 원하는 요소 개수만큼 획득하고 toList()를 사용해 List 컬렉션으로 반환 println(nums.take(10).toList()) }위 코드에서 take(10)을 했을때..

  • format_list_bulleted Kotlin
  • · 2019. 12. 8.
  • textsms

코틀린의 DSL (Domain-Specific Language)과 DslMarker

DSL(Domain-Specific Language)은 특정 주제에 특화된 언어를 의미하며, 데이터베이스에 접근하기 위한 SQL이 대표적인 DSL이다. 이 밖에도 화면 레이아웃을 단순화한 DSL이나 웹 접근을 단순화한 DSL 등의 많은 프레임워크가 만들어져 있다. 코틀린에서는 고차함수와 람다식의 특징을 이용하여 읽기 좋고 간략한 코드를 만들수 있다. 우리가 목표로 할 DSL 코드는 다음과 같다 data class Person( var name: String? = null, var age: Int? = null, var job: Job? = null) data class Job( var category: String? = null, var position: String? = null, var extensi..

  • format_list_bulleted Kotlin
  • · 2019. 12. 8.
  • textsms

Kotlin takeIf와 takeUnless함수

takeIf 함수 람다식이 true이면 결과값을 반환. public inline fun T.takeIf(predicate: (T) -> Boolean): T? = if (predicate(this)) this else nulltakeUnless 함수 람다식이 false이면 결과값을 반환. public inline fun T.takeIf(predicate: (T) -> Boolean): T? = if (!predicate(this)) this else null예제 val user = "KaSha" val str = "Sha" var index = 0 index = user.indexOf(str).takeIf { it >= 0 } ?: -1 index = user.indexOf(str).takeUnless ..

  • format_list_bulleted Kotlin
  • · 2019. 12. 8.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (90)
    • 만개시기 (1)
    • Foundation (12)
      • Algorithm (3)
      • Operation (1)
      • Network (1)
      • Programming (1)
      • Design Pattern (5)
    • Architecture (1)
      • DDD (1)
    • Java (20)
      • POJO (9)
      • Spring (3)
      • Liferay (1)
      • MSA (7)
    • Kotlin (13)
    • Javascript (2)
      • EcmaScript (0)
      • Node.js (0)
      • React (0)
    • Swift (0)
    • Python (0)
    • Android (0)
    • IOS (0)
    • Database (4)
      • mySQL (3)
      • MongoDB (0)
      • Oracle (0)
      • Redis (0)
    • DevOps (25)
      • Docker & K8S (17)
      • Ansible (2)
      • Performance Test (4)
      • APM (1)
      • Fluentd (1)
    • Machine Learning (7)
    • Big Data (0)
      • pyspark (0)
    • Review (3)
    • 유용한 정보 (1)
    • 일상 (1)
최근 글
인기 글
최근 댓글
태그
  • #Microservice
  • #코틀린
  • #devops
  • #java
  • #cloud native
  • #MSA
  • #Spring
  • #쿠버네티스
  • #클라우드 네이티브
  • #Kotlin
전체 방문자
오늘
어제
전체

티스토리툴바