일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- textfield
- Hilt
- relay
- MiTweet
- Kotlin
- GitHub
- 백준
- architecture
- 쿠링
- Gradle
- androidStudio
- Rxjava
- boj
- 코드포스
- Python
- Coroutine
- Coroutines
- AWS
- ProGuard
- 암호학
- android
- Compose
- 코루틴
- activity
- livedata
- TEST
- Codeforces
- MyVoca
- pandas
- 프로그래머스
- Today
- Total
목록Primary/Kotlin (39)
이동식 저장소
Abstract class(이하 추상 클래스)는 인스턴스를 만들 수 없는 클래스이다. 추상 클래스는 보통 추상 메소드를 포함한다. 추상 메소드란 기본적으로 구현되지 않은 메소드이며 따라서 자식 클래스에서 구현되어야 한다. 추상 메소드는 항상 `open`이므로 별도로 `open` 키워드를 적을 필요는 없다. abstract class Animated { abstract fun animate() open fun stopAnimate() { // default implementation(기본 구현)을 가질 수 있음 } fun animateAgain() { // default implementation(기본 구현)을 가질 수 있음 } } 위의 예시에서 `animate()`는 추상 메소드이다. 따라서 `Anima..
참고: 이 글은 Kotlin - Inline classes 공식 문서를 번역한 글입니다. Inline classes | Kotlin kotlinlang.org 비즈니스 로직에서 primitive 타입을 감싸야 하는 경우가 가끔 생긴다. 예를 들어 ``Card``의 고유 아이디를 ``val id: Long``으로 나타낼 수도 있지만, ``CardId`` 클래스를 이용하여 표현하면 의미를 더 명확히 드러낼 수 있다. 겨우 아이디 하나 때문에 그렇게까지 해야 하나 싶기도 하지만, 멤버 변수의 값에 제한이 있는 경우 ``inline class``를 유용하게 사용할 수 있다. 예를 들어 ``month``라는 변수는 1부터 12까지의 값만을 가질 수 있으므로 13 이상의 값이 주어지면 값을 할당하지 않도록 코드를 ..
비동기 코드는 본질적으로 어렵다. 제대로 공부하지 않은 비동기 코드는 더 어렵다. 지난 몇 일간 코루틴 ``ViewModel`` 코드를 테스트하다 아주 열불이 나서..;; 이참에 제대로 다시 공부해 보자. ``suspend`` 함수의 실행 순서 ``suspend`` 함수도 일반 함수처럼 순차적으로 실행된다. suspend fun function1() { println("fun 1") } suspend fun function2() { println("fun 2") } fun main() = runBlocking { function1() function3() } fun 1 fun 2 일반 함수를 섞어도 똑같다. suspend fun function1() { println("fun 1") } suspend f..
다음 두 코드의 차이점은 무엇일까? suspend fun test() { launch { // ... } } suspend fun test() = launch { // ... } 거의 똑같다 둘 다 ``launch``를 실행하여 코루틴을 만든다. 유일한 차이점이라면 1번 코드의 반환값이 ``Unit``인 반면, 2번 코드의 반환값은 새로 만들어진 코루틴 ``Job``이라는 점. 둘 중 편한 걸 쓰면 되겠다. 나는 코루틴을 제어할 여지가 있는 2번 코드를 선호하는 편이다.
Kotlin에서 ``const``는 컴파일 시간에 결정된다는 의미를 갖고 있다. 프로그램이 실행되는 런타임 이전에 이미 결정되어 변하지 않는다는 것이다. 그래서 ``const val``은 컴파일 시간에 결정되는 상수를 의미한다. 그냥 ``val``은 런타임에서 결정될 수도 있지만, ``const val``은 컴파일 시간에 결정되므로 런타임에서 재할당할 수는 없다. ``const``의 의미를 생각해 보면 ``const var``이 모순인 이유를 쉽게 알 수 있다. ``var``은 언제든 재할당될 수 있으므로, ``const``와 정반대의 의미를 갖고 있기 때문이다. 따라서 ``const val``은 컴파일 시간에 결정될 수 있는 문자열과 기본 자료형(정수, 실수 등)에만 사용할 수 있다. 일반 클래스 인스..