오늘은 Kotlin Coroutines에서 Launch 와 Async에 대해서 알아보자. launch와 async는 모두 Kotlin에서 코루틴을 시작하는 기능이다. 차이점은 launch는 실행하면 결과 값을 전달하지 않는 반면 , async는 반환 결과 를 얻기 위해 Java에서 future를 사용하는 것처럼 코루틴의 결과를 반환하는 함수가 Deferred있는 의 인스턴스를 반환한다는 것이다. Launch val job = GlobalScope.launch(Dispatchers.Default) { // do something and do not return result } 작업 상태를 가져오거나 취소하는 데 사용할 수 있는 작업 개체를 반환한다. 위의 실행 예에서 우리는 무언가를 해야 하고 결과를 반환..
coroutineScope와 supervisorScope가 각각 무엇인지 그리고 차이가 무엇인지에 대해서 알아보자. coroutineScope coroutineScope는 Kotlin의 코루틴에서 사용되는 스코프 중 하나로, 여러 개의 코루틴이 모두 완료될 때까지 대기하거나, 그 중 하나라도 예외가 발생하면 모든 코루틴을 즉시 취소하는 기능을 제공한다. coroutineScope 함수는 suspend 함수 내에서만 사용될 수 있으며, coroutineScope 내에서 시작된 코루틴이 완료되거나 예외가 발생할 때까지 현재 코루틴을 일시 중단한다. import kotlinx.coroutines.* suspend fun main() { try { coroutineScope { // 이 부분은 coroutine..
지금까지 코틀린을 이용하여 앱개발을 하면서도 코틀린이란 무엇인지에 대해서 명확히 알고 넘어가지는 않았던 것 같다. 그래서 이번에는 코틀린에 대해서 공부를 해보자. 코틀린이란 무엇인가 코틀린은 안정성, 간결성, 상호 운용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어이다. 2010년 하반기에 처음 생겨서 2016년 2월 처음으로 공개 릴리스되었으며, 안드로이드 개발, 데스크톱 애플리케이션, 서버 측 솔루션 등 여러 개발 분야에서 유망한 도구로 꾸준히 인기를 얻고 있다. 2019년 11월 코틀린 1.3이 나왔고, 2021년 5월 1.5.0이 나왔다. 지금 현재는 1.8.21.이다(2023년 8월 21일 기준) 원래 언어를 만든 목적, 즉 자바에 대해 더 나은 대안을 제공하려는 목적을 넘어 코틀린이..
var, val 이란 val : 불변 변수로, 값의 읽기만 허용되는 변수. Value의 약자이다. var : 가변 변수로 값의 읽기와 쓰기가 모두 허용되는 변수, Variable의 약자이다. 변수는 값을 저장하는 메모리 공간에 붙는 이름이다. 코틀린에는 두가지의 형을 지원하게 되는데 위에서 설명한 val과 var이다. 위에서 설명한 것 처럼 val과 var은 각각 불변 변수와 가변 변수를 나타내고 있고, 공통적으로 초기화시에 값을 할당하지 않는다면 반드시 Type명시해야한다. 다만 컴파일러가 변수 탕비을 추론할 수 있는 경우에는 Type를 생략해도 된다. val val로 지정된 불변 타입 변수는 초기에 값을 할당되면 나중에 값을 변경할 수 없다. 강제로 변수를 변경하려고 한다면 컴파일 에러가 발생한다. ..
오늘은 static, object, companion object 차이에 대해서 공부해보자 우선 statc에 대해서 정리해보자. Java static 이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static 메소드를 만들 수 있는데 다른 말로 정적 필드와 정적 메소드라고도 하며 이 둘을 합쳐서 정적멤버라고 한다.(혹은 클래스 멤버라고도 한다.) 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리한다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용이 가능하다. ex) public class Main { ..
스코프 함수란? 코틀린에서는 Object Context 내에서 코트 블록을 실행하는 것이 목적인 여러 함수가 존재한다. 제공된 람다식을 사용하여 객체에 이러한 함수들을 호출하면 임시적으로 스코프(범위)가 설정된다. 이 범위에서는 해당 객체의 이름없이 접근할 수있다. 스코프 함수에는 5가지의 함수가 존재하는데, let, run, with, apply, also 공통점으로는 객체에 붙어있는 코드 블록을 실행시킨다는 것이다. 이에 차이점과 각 함수의 특징들에 대해서 정리해보자. 5가지의 함수의 정의이다. inline fun T.run(block: T.() -> R): R { return block() } inline fun with(receiver: T, block: T.() -> R): R { return ..
인라인 클래스란? 경우에 따라 비즈니스 논리가 일부 형식 주위에 래퍼를 만드는 것이 필요하다. 그러나 추가 힙 할당으로 인해 런타임 오버헤드가 발생하고 또한 래핑된 유형이 기본 유형인 경우 기본 유형은 일반적으로 런타임에 의해 크게 최적화되는 반면 해당 래퍼는 특별한 처리를 받지 않기 때문에 성능 저하가 발생한다. 이러한 문제를 해결하기 위해서 Kotlin에서는 inline class를 제공한다. 인라인 클래스는 value-based classes의 하위 집합입니다. 이는 정체성은 존재하지 않으며 값만을 보유합니다. inline class는 생성자로 단 하나의 값만 받을 수 있다. 물론 클래스내에 프로퍼티와 함수를 정의할 수도 있다. inline class UserName(val value: String..
Sealed class란 Sealed class 및 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타냅니다. 추상 클래스로 상속받는 자식 클래스의 종류를 제한하는 특성을 가지고 있다, 즉 컴파일러에서 Sealed class의 자식 클래스가 어떤 것이 있는지 알 수 있다는 것이다. sealed interface Error sealed class IOError(): Error class FileReadError(val file: File): IOError() class DatabaseError(val source: DataSource): IOError() object RuntimeError : Error 어떤 의미에서 Sealed class 는 Enum class와 유사하다..