본문 바로가기

전체 글

(74)
[Microbenchmark] try-catch block 성능 테스트 안녕하세요.오늘은 try-catch block의 성능에 대해서 분석해보겠습니다.필요성Effective Kotlin의 item7 (결과 부족이 발생한 경우 null과 Failure를 사용하라) 에서 아래 구문을 확인했습니다.try-catch 블록 내부에 코드를 배치하면, 컴파일러가 할 수 있는 최적화가 제한된다 실제로 얼마나 차이나는지 궁금해져서 테스트 해보게 되었습니다.Microbenchmark성능 분석을 위해 Android에서 제공하는 Microbenchmark를 사용했습니다.https://developer.android.com/topic/performance/benchmarking/microbenchmark-write?hl=ko Microbenchmark 작성  |  App quality  |  An..
[Kotlin] Builder Pattern 대체하기 안녕하세요.오늘은 Builder Pattern에 대해 알아보고, 코틀린에서는 이를 어떻게 쉽게 대체하는지 알아보겠습니다.Builder PatternBuilder Pattern은 객체를 단계별로 설정하고, 최종적으로 객체를 생성하는 방식입니다. 객체가 복잡하고 여러 인자가 필요할 때,각 인자들을 설정하는 메서드를 호출하여 객체를 만드는 패턴입니다. Java 예제여러 프로퍼티를 가지는 객체 Car가 있습니다.public class Car { private String engine; private String wheels; private String seats; private String airConditioning; public Car(String engine, String whe..
[Kotlin] Generic (3) - 그 외 지난 Generic (1), (2) 포스팅에 이어서Generic (3) 포스팅을 끝으로 제네릭에 대해 전부 알아보겠습니다제네릭 타입 삭제 (Type Erasure)kotlin은 런타임에 제네릭 타입 정보를 유지하지 않습니다.→ 컴파일 시점에만 타입 정보가 사용되고 런타임에는 제네릭 타입에 대한 정보가 사라집니다. is 연산자로 타입 체크를 할 수 없습니다.fun checkType(value: T) { if (value is String) { // 오류: 'Cannot check for instance of erased type: T' println("This is a String!") } else { println("This is not a String!") ..
[Kotlin] Generic (2) - 변성 지난 포스팅에 이어서이번에는 Generic의 변성에 대해 알아보도록 하겠습니다.개요코틀린의 변성(Variance)은 제네릭 타입 간의 상속 관계를 정의하는 방식입니다.변성은 무공변성(Invariance), 공변성(Covariance), 반공변성(Contravariance) 로 나뉩니다.무공변성 (Invariance)제네릭은 기본적으로 무변성입니다.Box은 Box으로 간주되지 않으며, 두 타입은 전혀 관련이 없습니다.class Box(val value: T)fun useBox(box: Box) { println(box.value)}fun main() { val stringBox: Box = Box("Hello") useBox(stringBox) // 컴파일 오류} 이유무공변성은 타입 안정성..
[Kotlin] Generic (1) - 제네릭? 안녕하세요.오늘은 Generic에 대해서 알아보겠습니다.제네릭?제네릭은 클래스나 함수에서 타입을 파라미터화 할 수 있는 기능입니다.코드 작성 시점에 구체적인 타입을 지정하지 않고, 타입을 변수처럼 처리할 수 있어 여러 타입을 다룰 수 있게 합니다. 제네릭을 사용하면 2가지 장점을 얻을 수 있습니다. 1) 타입 안정성컴파일 타임에 타입 오류를 검출해 타입 안정성을 강화합니다.제네릭을 안 쓰게 되면, 컴파일 시점에 아래 오류를 못 잡고 런타임 에러가 발생합니다.fun addToList(list: List, item: Any): List { val mutableList = list.toMutableList() mutableList.add(item) return mutableList}fun ma..
[Kotlin] 위임 (Delegation) 안녕하세요. 오늘은 위임 (Delegation) 에 대해 알아보겠습니다. 다른 부서의 코드를 참고하다가 아래와 같은 코드를 봤습니다.class UserRepository(userDao: UserDao) : UserDao by userDao 오늘은 이 코드를 이해해 보도록 하겠습니다.위임?위임 (Delegation) 은 객체지향 프로그래밍에서 구성 (Composition)을 활용하여객체의 일부 기능을 다른 객체에 위임하는 디자인 패턴입니다. 코틀린에서는 by 키워드를 통해 위임을 쉽게 구현하도록 도와줍니다. 위임은 크게 2가지가 있습니다.1) 클래스 위임 (Class Delegation)2) 위임 프로퍼티 (Delegated Properties)클래스 위임클래스 위임은 by 키워드를 사용하여 클래스에서 특..
Android | Looper & Handler 안녕하세요.오늘은 Looper와 Handler에 대해 알아보겠습니다.개요Looper와 Handler는 안드로이드에서 스레드 간 통신을 관리하고,메시지를 처리하는데 사용되는 클래스 입니다. Main Thread와 Background Thread 간의 작업을안전하고 효율적으로 관리할 수 있습니다.LooperLooper는 스레드의 메시지 루프를 관리하는 역할을 합니다.메시지 큐가 메시지를 받을 수 있게 자신의 생명 주기 안에서 계속 돌아가게 해줍니다.스레드 ↔ Looper는 1 : 1 매칭입니다.메시지 루프메시지 큐에 들어오는 메시지를 처리할 수 있도록 반복해서 메시지를 받아오는 구조 (메시지 : 하나의 작업 단위) 안드로이드의 메인 스레드는 자동으로 Looper를 생성하지만,다른 스레드에서는 직접 Loope..
[Kotlin] DSL (Domain Specific Language) 안녕하세요.오늘은 DSL에 대해 알아보도록 하겠습니다.DSLDomain Specific Language의 약자로,특정 도메인에 맞춘 언어 스타일로 코드를 작성할 수 있도록 Kotlin의 기능을 활용하는 것입니다.HTML이나 SQL처럼 특정 목적을 위해 존재하는 언어입니다.ExampleDSL을 활용하면 HTML 관련 코드를 훨씬 쉽게 작성할 수 있습니다.fun main() { // DSL 사용 예제 val htmlContent = html { tag("head") { tag("title") { +"My Page Title" } } tag("body") { tag("h1") { +"Welcome to Kotlin DSL"..