본문 바로가기

Kotlin

(10)
kotlin Coroutine 쉽게 이해하기 2 - Context와 Dispatchers 코루틴 Context와 Dispatchers CoroutineContext(kotlin 표준 라이브버리에 정의됨) 타입의 값으로 정의된 어떤 context에서 실행 코루틴 context는 Job,Dispatcher 등 요소들의 집합 Dispatchers 해당 코루틴의 실행에 사용하는 스레드 결정한다. 코루틴의 실행을 특정 쓰레드로 제한 쓰레드 풀로 보냄 제한을 받지 않는 상태 로 실행할 수 있다. Dispatchers.Default The default CoroutineDispatcher that is used by all standard builders like launch, async, etc if no dispatcher nor any other ContinuationInterceptor is sp..
kotlin Coroutine 쉽게 이해하기 1 - 기본 코루틴이란? 동시성 프로그래밍 Context switching 오버헤드가 적은 non-blocking 일종의 경량 thread 기본 코루틴 생성해보기 GlobalScope : 이름 그대로 만들어진 코루틴 생명주기가 전체 애플리케이션의 생명주기를 따라간다. Thread.sleep 대신 delay를 쓰면 아래와 같은 에러가 발생한다. 왜냐하면 delay 함수는 thread를 블록하지 않고 코루틴을 중단시키는 특수한 함수이기 때문에 코루틴에서 정의한 suspend function 에서만 사용할 수 있다. Blocking과 Non-blocking 위의 예제는 아래 2가지를 쎃기 때문에 혼동이 올 수 있다. blocking : Thread.sleep() non-blocking: delay() 아래의 예제처럼 ru..
Kotlin In Effective - 8장. 컬렉션 효율적으로 사용하기 프로그래밍에서 컬렉션은 가장 중요한 개념 중 하나일 것이다. 코틀린도 컬렉션 처리 과정을 위한 여러가지 도구를 제공해준다. val visibleNews = mutableListOf() for(n in news){ if(n.visible) { visibleNews.add(n) } } Collections.sort(visibleNews,{ n1, n2 -> n2.publishedAt - n1.publishedAt }) val newsItemAdapters = mutableListOf() for(ninvisibleNews){ newsItemAdapters.add(NewsItemAdapter(n)) } 위의 코드를 코틀린에서는 아래와 같이 짤 수 있다. val newItemsAdapters = news .fil..
Kotlin Effectvie 번역 - 2. Readability 개인적으로 코틀린을 사용하면서 이게 가독성이 좋은 코드일까? 동료가 보기 좋은 코드일까?에 대한 고민을 많이 하였다. 그러던 중에 Kotlin Effectvie에서 가독성이라는 챕터를 발견하였고 아직 한국에 나오지 않은 책을 번역해보려 한다 Item 11. Design for readability 앞부분에는 모두가 아는 코드를 짜는 시간보다 읽는 시간이 절대적으로 많다는 설명과 함께 클린코드의 중요성을 상기시켜주고 있다. A와 B 코드는 어떤게 더 깔끔한 코드일까? //Implementation A if( person != null && person.isAdult ) { view.showPerson(person) } else { view.showError() } //Implementation B pers..
Kotlin in Action - 1장. 코틀린이란? 왜 필요한가? 요즘 코틀린으로 전환하거나 이미 사용하고 있는 기업이 많다. 코틀린의 어떤점이 좋길래?? 코틀린의 주요 특성 대상 플랫폼 : 서버, 안드로이드 등 자바가 실행되는 모든 곳 코틀린 -> 자바스크립트로 컴파일이 됨 ( 브라우저, 노드에서 실행 가능 ) : kotlin-natvie-backend 개발 진행 중 정적 타입 지정 언어 ( statically typed ) 자바와 다르게 타입 명시 안해도 됨. 코틀린 컴파일러가 문맥으로부터 유추하기 때문 ( type inference) 장점 성능 : 런타임에 어떤 메소드를 호출알지 알아내느 과정 필요 없음 신뢰성 : 컴파일러가 검증해줌 유지 보수성 : 처음 볼 때 타입이 있으니 보기 좋음 도구 지원 : 리팩토링 등 IDE에서 기능 코트린에 정적 타입 중 nullab..
Kotlin in Action 11장 : DSL 만들기 개요 labmda with receiver 를 이용한 DSL invoke convention 코틀린의 이러한 특성을 이용하여 DSL을 어떻게 설계해나가는지 살펴보자 API에서 DSL로 API 가 깔끔하다? 적절한 이름을 통한 명확하게 이해할 수 있음? 코드의 간결성. 불필요한 구문, 번잡한 코드가 없어야 함 ( 11장에서 주로 볼 부분 ) extension function infix calls operator overloading convention lambda with receiver Kotest - 코틀린 테스트 코틀린 테스트는 기존 Junit의 then 절의 가독성을 DSL과 함께 매우 높여주었다. DSL에서 중위호출을 어떻게 활용하는지 살펴보자 https://github.com/kotest/kot..
Kotlin In Action 7장. 연산자 오버로딩과 기타 관례 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법 = 관례(convention) 코틀린이 지원하는 convention 사용법에 대해 알아보자! 산술 연산자 오버로딩 자바 : + 연산자를 이용할 수 있는 타입은 정해져 있다. 코틀린 : 어디서든 일반 산술 연산자를 선언할 수 있다. data class Point(var x: Int, var y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } } >> p1+p2 // 와 같은 연산이 가능 a + b 는 컴파일 시점에는 자바처럼 a.plus(b)로 변한다. operator fun Point.plus(other:Point):Point { r..
Kotlin In Action - 5장. 람다로 프로그래밍 코틀린 표준 컬렉션 라이브러리 함수에서 람다를 넘기는 방식 알아보기 자바 라이브러리와 람다를 함께 사용하는 방식 알아보기 수신 객체 지정 람다 ( lambda with receiver ) 에 대해 알아보자! 람다식과 멤버 참조 람다는 일련의 동작을 다른 함수에 넘겨야 하는 경우 코드를 간결하게 구현할 수 있다 val sum = { x:Int, y:Int -> x+y } println(sum(1, 2)) { println(42) } () run { println(42) } 실행 시점에 코틀린 람다 호출에는 아무 부가 비용이 들지 않음. 이유는? 8.2장 TODO link 달기 people.maxBy({ p: Person -> p.age }) // 마지막 인자가 람다라면 람다를 괄호 밖으로 뺄 수 있음 pe..
Kotlin In Action - 3장.함수 정의와 호출 함수 정의, 호출 방법 확장 함수와 프로퍼티를 사용해 자바 라이브러리를 코틀린 스타일로 적용하는 방법 컬렉션 만들기 val set = hashSetOf(1,7,53) val list = arrayListOf(1,7,53) val map = hashMapOf(1 to "one", 2 to "two") println(set.javaClass) // class java.util.HashSet 기존 자바 컬렉션 사용 이렇게 사용하는 이유는 자바 코드와 상호작용하기가 더 쉽기 때문 아래와 같이 추가 기능 제공 println(strings.last()) // list println(numbers.max()) // set kotlin-collections의 소스이다. /** * Returns an empty read..
Kotlin In Action - 2장. 코틀린 기초 함수와 변수 fun main(args: Array) { println("Hello World$args") } 클래스 위에 선언 가능 변수 선언 , 타입 선언 System.out.println 표준 라이브러리 함수를 wrapping 한 kotlin 표준 라이브러리임 세미 콜론 없어도 됨 fun max(a:Int, b:Int) : Int { return if(a>b) a else b } 식(expression)이 본문인 함수 fun max(a:Int,b:Int)=if(a>b) a else b 인텔리제이에서는 이 둘의 변환을 지원해 준다 ( Convert to expression body, Convert to block body ) fun max(a:Int, b:Int) = if (a>b) a else b 함..