Kotlin Generic Type System
·
KOTLIN
코틀린 배열은 타입 파라미터를 받는 클래스이며 배열의 원소 타입은 타입 파라미터에 의해 정해집니다.1. 배열 초기화 방법arrayOf : 인자로 받은 원소들을 포함하는 배열을 생성val numbers = arrayOf(1, 2, 3, 4, 5)// 출력: 1, 2, 3, 4, 5arrayOfNulls : 모든 원소가 null인 정적인 크기의 배열 생성val nullArray = arrayOfNulls(3)// 출력: null, null, nullArray : 배열 크기와 람다를 인자로 받아 생성val arr = Array(26){ i -> ('a' + i).toString() }// 출력 : abcdefghijklmnopqrstuvwxyz2. Collection To ArraytoTypedArray : ..
Abstract class vs interface in Kotlin
·
KOTLIN
서론우아한테크코스의 미션을 진행하며 abstract class와 interface의 차이에 대해서 많은 고민을 하게 되었습니다. 추상 클래스와 인터페이스의 공통점은 추상화입니다. 추상화를 통해 의존성 역전 원칙(DIP)을 적용할 수 있게 되며, 구현체를 사용하는 곳에서 추상화에 의존함으로써 다형성을 통해 구현체를 자유롭게 교체할 수 있습니다.  또한 반대로 클래스를 재활용 할 수 있다는 점에서 클래스 간의 결합도를 느슨하게 만들어 유지보수성을 향상시킬 수 있습니다. 그렇다면 인터페이스와 추상 클래스는 각각 어떤 차이점이 있을까요? 근간에 말하는 상속을 지양하라는 말엔 어떤 이유가 있을까요 ? 이에 대해 알아보겠습니다.📌  상태를 가질 수 있는가 ?인터페이스는 상태를 가질 수 없다. 그러나, 추상 클래스..
다시 읽는 Effective Kotlin - Item39. 태그 클래스보다는 클래스 계층을 사용하라
·
KOTLIN
최근 우아한 테크코스의 미션들을 진행하면서 크루들 사이에 sealed Class의 사용법에 대한 많은 토론이 있었습니다. 필자는 안드로이드를 개발하면서 sealed Class, sealed Interface를 적극 사용해 왔기에 이 경험을 토대로 저만의 사용 기준을 새워왔습니다. 오늘은 이펙티브 코틀린의 Item39 태그 클래스보다는 클래스 계층을 사용하라에서 주장하는 내용과 개인적인 경험을 녹여 sealed class를 사용하는 기준에 대해서 이야기하고 우아한 테크코스에서 진행한 미션에서 에러 처리 파트를 sealed class 사용한 부분을 소개해 보겠습니다.Enum vs SealedEnum과 sealed class는 모두 "행동"과 "상태"를 가질 수 있습니다. 즉, 독립적인 하나의 객체로 존중받을..
다시 읽는 Effective Kotlin - Item33. 생성자 대신 팩토리 함수를 사용하라
·
KOTLIN
서론 필자는 그동안 앱을 개발하면서 팩토리 패턴을 굉장히 많이 사용해 왔습니다. 예컨대 다음같이 Hilt를 사용하지 않고 앱을 개발하던 시절 Retrofit -> DataSource -> Repository까지의 필요한 인스턴스들을 Repository Interface에서 팩토리 패턴을 사용함으로써 View에서 Data Layer 방향으로의 직접적인 의존성을 끊을 수 있었습니다.interface PlaceRepository { companion object{ fun create(): PlaceRepository{ return PlaceRepositoryImpl( PlaceDataSource( Retrofit..
Channel 내부 동작 분석을 분석해보자
·
KOTLIN
서론프로젝트에서 API 호출 시 발생하는 네트워크 에러처리에 대한 클래스를 StateFlow에서 Channel에서 변경하게 되었습니다. 기존에 사용하던 StateFlow는 중복된 에러를 방출하지 않는다는 문제가 있었습니다. 단순히 API 호출 실패로 인해 화면 이동이 안된다거나, 특정 동작이 반복될 가능성이 매우 희박한 곳에선 해당 문제를 발견하지 못했지만 이후 북마크 버튼을 클릭같이 단발적으로 반복해서 발생하는 이벤트에 대해선 문제가 발생했습니다.Channel 뜯어보기public fun Channel( capacity: Int = RENDEZVOUS, onBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND, onUndeliveredEle..
Kotlin Value Class With Project Valhalla
·
KOTLIN
오늘 알아볼 주제는 Kotlin의 Value Class와 Vlalue Class가 탄생하게 된 JVM의 Project Valhalla 입니다. 우테코 프리코스의 로또 과제를 진행하면서 다음과 같이 상태 관리를 위한 data Class를 만들었습니다. 이 과정에서 도메인에 특화된 타입을 만들어 Wrapper로 분리할지 아니면 Primitive Type 타입 그대로 사용할지 많은 고민을 했습니다. 미션 제출 당시엔 아래 코드와 같은 형태로 제출했지만 이후 리팩토링 과정에서 Value Class라는 좋은 기능이 있다는 것을 알게 되어 소개해보겠습니다. 이번 글은 "이펙티브 코틀린"의 45장 '불필요한 객체 생성을 피하라'와 47장 '인라인 클래스의 사용을 고려하라'에 대한 내용을 참고하였습니다.data cla..
코틀린 코루틴의 정석, 세 걸음
·
KOTLIN/코루틴의 정석
👩‍💻 오늘의 할 일정말 오랜만에 책을 피는 것 같습니다. 얼레벌레 바빠서 책을 볼 시간이 없었는데 일주일에 한 번씩 스터디 팀원분들에게 이 책을 가지고 코루틴에 대해 알려드릴 수 있는 좋은 기회가 생겨서 꾸준히 읽을 수 있게 되었습니다. 어떤 개념을 내가 정확히 알고 있다고 말하기 위해선 이 개념을 다른 사람에게 설명할 수 있어야 한다고 생각하는데, 감사하게도 부족한 제 이야기를 들어주실 사람이 생겨서 너무 감사하네요. 이번 챕터의 주제는 CoroutineDispatcher입니다. 그동안 제가 알고 있던 CoroutineDispatcher는 작업 스레드를 지정하기 위한 용도라고 알고 있었는데 이외에도 어떤 역할을 하는지 한번 알아보겠습니다. 📖 CoroutineDispatcher란?우선 ..
[Kotlin]Sealed Class란 무엇일까 ?
·
KOTLIN
👩‍💻 오늘의 할 일오늘은 Kotlin의 Sealed Class에 대해 알아보겠습니다. 이전 동아리 면접 질문에서 Sealed Class와 Enum Class의 차이점을 물어봤는데 아예 몰라서 대답을 못했던 경험이 있어서 이 부분에 대해서도 한번 알아보고 가겠습니다. 멋사에서 Kotlin 수업을 들을 때 한 번 들었었는데 좀 더 자세히 알아보려고 합니다.🔥 수업 시간에 배운 Sealed ClassSealed Class는 자기 자신을 상속받은 클래스들을 모아 관리하는 개념입니다. Kotlin의 클래스와 그 멤버 함수들은 final이기 때문에 상속될 수 없습니다.sealed class는 그 자체로 추상적이기 때문에 open 키워드로 메서드를 상속할 수 있습니다fun main() { val obj1..