Kotlin

Kotlin

Coroutine

코루틴이란? 스레드 내에서 동작하는 일시 중단 가능한 작업 단위이며 경량 스레드라고도 불린다. 코루틴은 스레드와 달리 컨텍스트 스위칭(Context Switching) 없이 동작할 수 있는데, 이는 한 스레드 내에서 실행되기 때문이다. 이러한 특성으로 인해 스레드 및 메모리 사용이 줄어들고, 개발자가 직접 작업을 스케줄링할 수 있다. 코루틴은 비선점형이며 진입과 반환 지점이 여러 개인데, 이는 서브 루틴과 대조된다. 이 특성으로 인해 루틴 간 협력을 통해 비선점적 멀티태스킹이 가능하다. 비동기 처리 코드를 순차 코드로 만들 수 있는데, 이는 콜백 구조의 비동기 처리 코드와 대조된다. 순차 코드로 비동기 처리를 작성할 수 있기 때문에 코드의 흐름을 파악하기 쉽다. 하나의 스레드 안에서 여러 개의 코루틴이 ..

Kotlin

변수와 상수

var vs val 두 키워드 모두 Kotlin에서 변수 선언 시 사용되는 키워드입니다. 둘의 차이는 초기화한 후 값에 대한 변경이 가능하냐 불가능하냐입니다. var : 변경 가능한 mutable 참조를 저장하는 변수입니다. val 키워드 변수의 값은 재할당(변경)이 가능합니다. 자바의 일반 변수에 해당됩니다. var number = 1 number = 2 println(number) // output: 2 val : 변경 불가능한 immutable 참조를 저장하는 변수입니다. val 로 선언된 변수는 초기값을 변경하는 것이 불가능합니다. 자바의 final 변수에 해당됩니다. val number = 5 number = 3 // Compile Error 코드를 작성할 때 기본적으로 val 키워드의 불변 변..

Kotlin

수신 객체 지정 람다, with 와 apply

with 함수와 apply 함수는 수식 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메서드를 호출할 수 있게 한다. 그런 람다를 수신 객체 지정 람다 lambda with receiver 라 부른다. with 함수 표준 라이브러리의 with 함수를 사용하면 어떤 객체에 대한 참조를 반복해서 언급하지 않으면서 그 객체의 메서드를 호출할 수 있다. EX. 알파벳 만들기 fun alphabet() : String { val result = StringBuilder() for (letter in 'A'..'Z') { result.append(letter) } result.append("\\nNow I know the alphabet!") return result.toString() } println(a..

Kotlin

자바 함수형 인터페이스 활용

코틀린 람다를 자바 API에 활용하는 방법 // Java public class Button { public void setOnClickListener(OnClickListener 1) { ... } } public interface OnClickListener { void onClick(View v); } Button 클래스는 setOnClickListener 메서드를 사용해 버튼의 리스너를 설정 OnClick 메서드만 선언된 OnClickListener 인터페이스를 인자로 전달 // Java 8 이전 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }) 자바 8 이전의 자바는 무명 클래..

Kotlin

지연 계산 Lazy 컬렉션 연산

filter, map 등의 몇 가지 컬렉션 함수는 결과 컬렉션을 즉시 생성한다. 이는 컬렉션 함수를 연쇄하면 매 단계마다 계산 중간 결과를 새로운 컬렉션에 임시로 담는다는 의미이다. 시퀀스 sequence 를 사용하면 중간 임시 컬렉션을 사용하지 않고 컬렌션 연산을 연쇄할 수 있다. 중간 결과를 저장하는 컬렉션이 생기지 않기 때문에 원소가 많을 경우 연산에 대한 성능이 개선된다. 시퀀스 Sequence 코틀린의 지연 계산 시퀀스는 Sequence 인터페이스에서 시작한다. 이 인터페이스는 단지 한 번에 하나씩 열거될 수 있는 원소의 시퀀스를 표현할 뿐이며, Sequence 안의 iterator 라는 단 하나의 메서드를 통해 시퀀스로부터 원소 값을 얻을 수 있다. asSequence 확장 함수를 호출하면 어..

Kotlin

컬렉션 함수형 API

filter, map filter : 컬렉션을 이터레이션하며 주어진 람다에 각 원소를 넘겨서 람다가 true 를 반환하는 원소만으로 이뤄진 새로운 컬렉션을 반환하는 함수 입력 컬렉션의 원소 중에서 주어진 술어 predicate 를 만족하는 원소들의 컬렉션을 반환 컬렉션에서 원치 않는 요소를 제거할 때 사용 술어 predicate 참, 거짓을 반환하는 함수 EX. 나이가 30 초과인 Person 객체들의 컬렉션을 반환 val people = listOf(Person("Alice", 29), Person("Bob", 31)) println(people.filter { it.age > 30 }) [Person(name=Bob, age=31)] map : 주어진 람다를 컬렉션의 각 원소에 적용한 결과를 모아 새..

minux.
'Kotlin' 카테고리의 글 목록