일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- livedata
- androidStudio
- MyVoca
- android
- ProGuard
- 코루틴
- Python
- Codeforces
- Hilt
- MiTweet
- textfield
- GitHub
- 프로그래머스
- architecture
- AWS
- 백준
- Coroutine
- 쿠링
- TEST
- relay
- boj
- Compose
- activity
- Rxjava
- 코드포스
- pandas
- 암호학
- Gradle
- Kotlin
- Coroutines
- Today
- Total
목록Primary/Kotlin (39)
이동식 저장소
다음 글을 요약했음을 밝힙니다. Inline classes | Kotlin kotlinlang.org 코드를 작성하다 보면, primitive 타입을 감싸는 wrapper 클래스가 필요할 때가 있다. 예를 들어 도형의 너비를 Int로 직접 나타내는 대신 Width 클래스로 나타내는 것이다. 물론 Width는 내부적으로 Int 값을 가지고 있다. class Width(val value: Int) 그러나 위 코드처럼 하면 런타임 성능이 크게 나빠진다. 객체를 만들 때 힙 메모리를 할당하기 때문이다. 게다가 위 코드처럼 primitive 타입을 감싸면 성능이 더 나빠진다. Primitive 타입은 가장 많이 쓰이는 만큼 최적화도 잘 되어 있는데, wrapper 클래스는 완전히 새로..
Kotlin의 확장 함수는 보통 파일의 최상위 레벨에서 정의된다. 그런데 확장 함수를 클래스 안에서 정의할 수도 있다. 사실 어디서나 정의할 수 있다. 어쨌든, 클래스 안에 확장 함수를 정의하면 뭐가 좋을까? 확장 함수를 품은 클래스 클래스 A에서 선언된 확장 함수는 A 내부 또는 A를 receiver로 받는 람다식 안에서만 사용될 수 있다. Receiver가 무엇인지 궁금하다면 다음 글을 참고하자. 코틀린(Kotlin) - lambda with receiver(수신 객체 지정 람다) : with, apply lambda with receiver (수신 객체 지정 람다) 개발을 하다 보면 객체를 반복 사용하면서 그 객체에 대한 연산을 명시하는 경우가 많습니다. 수신 객체 지정 람다는..
Kotlin에서는 함수 역시 하나의 타입으로 취급된다. 함수를 변수로 참조할 수 있지 않는가? 심지어 클래스나 인터페이스가 함수를 상속받을 수도 있다. 아무리 그래도 그렇지, 어떻게 함수를 상속받아요 나도 몰랐던 내용인데, 가능하다고 한다. 그 전에 우선 invoke 함수에 대해 알아보자. invoke operator 함수를 선언하면 +, [] 등 여러 연산자를 사용할 수 있다. invoke도 그러한 함수 중 하나로, invoke를 선언하면 객체를 함수처럼 호출할 수 있다. class Greeter(val greeting: Greeting) { operator fun invoke(name: String) = println("

Kotlin에서, variance라는 개념은 타입이 같으면서 타입 매개변수는 서로 다른 타입이 어떻게 연관되어 있는지 설명한다. 예를 들어 List와 List 등이 해당한다. Variance를 이해하면 타입 안정성을 해치지 않으면서 사용하기 편리한 제네릭 함수를 작성할 수 있다. Variance? 다음과 같은 함수가 있다. fun printContents(list: List) { println(list.joinToString(", ") } list에 List을 전달할 수 있을까? 당연히 있다. List도 전달할 수 있다. 여기까지는 아무른 문제가 없다. 이제 다음의 함수를 보자. 이 함수는 리스트의 맨 뒤에 정수 42를 추가한다. fun addNumber(lis..

제네릭 타입은 JVM에서 실행될 때 지워진다. 런타임에 제네릭 클래스의 타입을 알 수 없다는 말이다. 이번 글에서는 Kotlin 런타임에서 타입이 실제로 어떻게 지워지는지 살펴보고, inline 함수를 선언하여 타입을 보존할 수 있는 방법을 알아본다. 런타임에서 제네릭의 동작 Java와 마찬가지로 Kotlin의 제네릭은 런타임에 지워진다. 제네릭 클래스가 어떤 타입을 담는지 런타임에 알 수 없다는 뜻이다. 예를 들어 List 변수를 선언해도 런타임에서는 List로 취급된다. 리스트에 담긴 개별 요소의 타입을 검사할 수는 있지만, 리스트에 String만 있다고 해서 그 리스트가 List이라는 보장은 없다. 물론 일반적으로는 그렇게 추정할 수 있지만, 확신할 수는 없다. ..