목록Android/Kotlin (28)
App노자
1. Coroutines이란? 코루틴은 동시성 및 병렬성을 다루기 위한 프로그래밍 패턴과 기술이다 Kotlin은 다른 라이브러리가 코루틴을 활용할 수 있도록 표준 라이브러리에 최소한의 하위 수준 API만 제공한다 코루틴은 비동기 프로그래밍을 보다 쉽게 다룰 수 있게 해 주며, 다른 스레드를 생성하거나 관리하는 것보다 가벼우면서도 효율적인 방식으로 비동기 코드를 작성할 수 있게 해 준다 https://kotlinlang.org/docs/coroutines-overview.html Coroutines | Kotlin kotlinlang.org 2. build.gradle (Module) dependencies { implementation "org.jetbrains.kotlinx:kotlinx-corouti..

1. 동시성 프로그래밍 동시성 프로그래밍(Concurrency Programming)은 컴퓨터 프로그램에서 여러 작업이 동시에 실행되는 상황을 다루는 프로그래밍 기법이다 여기서 "동시에 실행"은 물리적으로 동시에 실행되는 것이 아니라 매우 짧은 시간 동안 번갈아 가며 실행되는 것을 의미한다 프로그래밍에서 순서대로 작업을 수행하여 1개의 루틴을 완료한 후 다른 루틴을 실행하는 방식을 동기적이라고 한다 순차적인 프로그램보다 로딩되는 UI를 보여줄 때 네트워크는 다운로드해야 하고, 목록을 끌어올리면 지속적으로 UI를 갱신하며 아이템 목록을 업데이트하는 등의 여러 개의 루틴이 선행 작업의 순서나 완료 여부와 상관없이 실행되어야 하는 경우가 많은데 이때 사용 되는 방식을 비동기적이라고 한다 Kotlin에서는 co..
1. object란? Kotlin에서는 객체 표현식(object expressions)과 객체 선언(object declarations)으로 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 객체를 만들 수 있다 object 키워드는 다양한 상황에서 사용하지만 클래스를 정의하면서 동시에 인스턴스(객체)를 생성한다는 공통점이 있다 object 키워드를 크게 다음과 같이 2가지 형태로 사용한다 1. 익명 클래스의 객체를 만들기 위한 객체 표현식 (object expressions) 2. 싱글턴을 정의하기 위해 사용하는 객체 선언 (object declaration) 3. 싱글턴과 정적 멤버를 정의하기 위해 사용하는 객체 선언 (companion object) https://kotlinla..
1. Closure란? 클로저란 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념을 말한다. 람다식 또는 익명 함수는 외부 범위에서 선언된 변수를 클로저에 액세스 할 수 있으며 람다식 안의 클로저에 포획(캡처)된 변수는 람다에서 수정할 수 있다. 기본적으로 함수 안에 정의된 변수는 지역 변수로 스택에 저장되어 있다가 함수가 끝나면 같이 사라지는데 클로저 개념에서는 포획한 변수는 참조가 유지되어 함수가 종료되어도 사라지지 않고 함수의 변수에 접근하거나 수정할 수 있게 해 준다. 아래는 클로저의 조건이다 - final변수를 포획한 경우 변수 값을 람다식과 함께 저장한다 - final이 아닌 변수를 포획한 경우 변수를 특정 래퍼로 감싸서 나중에 변경하거나 읽을 수 있게 한다 이때..
1. let() 함수 public inline fun T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) } let() 함수는 Nullable 객체의 안전한 호출 및 변환을 도와주는 유용한 함수이다 객체가 null이 아닌 경우에만 특정 동작을 수행하거나 변환을 수행한다는 특징을 갖고 있다 제네릭의 확장 함수 형태이므로 어디든 적용할 수 있으며 특히 Nullable 객체를 다룰 때 자주 사용된다 let() 함수는 함수를 호출하는 객체 T를 이어지는 block의 인자로 넘기고 block의 결괏값 R을 반환한다 매개변수로는 람다식 형태인 block가 있고 T를 매개변수..
1. by (Delegation)란? by키워드 코틀린에서 특정클래스를 확장하거나 이용할 수 있도록 위임을 할 때 사용한다 by를 사용하면 하나의 클래스가 다른 클래스에 위임하도록 선언하여 위임된 클래스가 가지는 멤버를 참조 없이 호출할 수 있다 프로퍼티 혹은 클래스 이름: 자료형 by 위임자 by키워드는 프로퍼티 위임에도 사용되는데 게터와 세터를 특정 객체에게 위임하고 그 객체가 값을 읽거나 쓸 때 수행하도록 만드는 것을 프로퍼티 위임이라고 한다 프로퍼티 위임을 위해서는 val, var와 같은 프로퍼티 선언을 위한 키워드, 프로퍼티의 이름, 자료형, by위임자가 필요하다 여기서 위임자란 프로퍼티나 클래스를 대신할 객체를 말한다 2. Class 위임 interface Car { fun go(): Stri..
1. 지연 초기화란? 코틀린은 변수 선언 시 초기화를 할 것을 권고하며 변수 선언 시 초기화를 하지 않거나 nullable 타입으로 만들어주지 않으면 컴파일 에러가 발생한다. 클래스에서도 기본적으로 선언하는 프로퍼티 자료형들은 null을 가질 수 없기 때문에 생성자에서 초기화하거나 매개변수로부터 값을 초기화하는 것이 규칙이다 하지만 객체의 정보가 나중에 나타나는 경우 객체 생성과 동시에 초기화하기 힘들어지는데 이때 사용하는 게 지연초기화이다 지연초기화는 lateinit과 lazy키워드를 통해 사용할 수 있다 2. lateinit class Person { lateinit var name: String fun test() { if(!::name.isInitialized) { // 프로퍼티의 초기화 여부 판..

1. 컬렉션이란? 컬렉션이란 자주 사용하는 기초적인 자료구조를 모아 놓은 일종의 프레임워크이다 코틀린의 컬렉션은 자바 컬렉션의 구조를 확장 구현한 것이다 컬렉션의 종류로는 List, Set, Map 등이 있으며 불변형과 가변형으로 나뉘며 가변형 컬렉션은 객체에 데이터를 추가하거나 변경할 수 있고 불변형 컬렉션은 데이터를 한번 할당하면 읽기 전용이 된다 2. 연산자(operators) 기능 메서드 fun main() { val list1: List = listOf("one", "two", "three") val list2: List = listOf(1, 3, 4) val map1 = mapOf("hi" to 1, "hello" to 2, "Goodbye" to 3) println(list1 + "four"..