일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Hilt
- MyVoca
- architecture
- TEST
- Compose
- livedata
- Coroutines
- Python
- 프로그래머스
- textfield
- MiTweet
- ProGuard
- 쿠링
- androidStudio
- 코루틴
- 백준
- Coroutine
- boj
- Rxjava
- pandas
- android
- Codeforces
- Kotlin
- AWS
- relay
- 코드포스
- GitHub
- Gradle
- activity
- 암호학
- Today
- Total
목록Primary (163)
이동식 저장소
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..
다음 문서를 요약한 글입니다. 영문 버전으로 일독을 권합니다. 데이터 영역 | Android 개발자 | Android Developers 데이터 영역 UI 레이어에는 UI 관련 상태 및 UI 로직이 포함되지만 데이터 영역에는 애플리케이션 데이터 및 비즈니스 로직이 포함됩니다. 비즈니스 로직은 앱에 가치를 부여하는 요소로, 애플리 developer.android.com Data 레이어는 앱에서 사용하는 데이터와 비즈니스 로직을 포함한다. 비즈니스 로직이란 데이터를 가공하여 앱에서 사용할 형태로 제공하는 코드를 말한다. 앱의 존재 의의를 결정하는 레이어이기도 하다. UI로만 설명되는 앱은 거의 없기 때문이다. Data 레이어는 UI를 포함하여 앱의 다른 부분에서 사용될 데이터를 제공한다. 따라서 외부로 드러..
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``이라는 보장은 없다. 물론 일반적으로는 그렇게 추정할 수 있지만, 확신할 수는 없다. ..