일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Kotlin
- Gradle
- relay
- androidStudio
- textfield
- activity
- Compose
- pandas
- android
- AWS
- Coroutine
- Python
- boj
- architecture
- 코루틴
- 코드포스
- 프로그래머스
- Coroutines
- ProGuard
- MyVoca
- livedata
- 백준
- GitHub
- TEST
- Rxjava
- Codeforces
- Hilt
- MiTweet
- 암호학
- 쿠링
- Today
- Total
목록Kotlin (30)
이동식 저장소
다음 글을 요약했음을 밝힙니다. 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("$greeting, $name!") } val me = Greete..

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``이라는 보장은 없다. 물론 일반적으로는 그렇게 추정할 수 있지만, 확신할 수는 없다. ..