Kotlin (16) 썸네일형 리스트형 [Kotlin] Contract 안녕하세요오늘은 Kotlin의 Contract에 대해 알아보도록 하겠습니다📌 서론'Effective Kotlin Item 43. API의 필수적이지 않은 부분을 확장 함수로 추출하라' 에서 아래 코드를 보게 되었습니다@OptIn(ExperimentalContracts::class)inline fun CharSequence?.isNullOrBlank(): Boolean { contract { returns(false) implies (this@isNullOrBlank != null) } return this == null || this.isBlank()} 해당 문법이 무엇인지 궁금해 찾아보게 되었습니다📌 Contract?Kotlin의 Contract는 컴파일러에게 함수의 실.. [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 키워드를 사용하여 클래스에서 특.. [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".. [Kotlin] SAM & invoke 안녕하세요.오늘은 SAM (Single Abstract Method) 과 invoke에 대해서 알아보겠습니다.SAM과 invoke는 함수형 프로그래밍을 더 간결하고 쉽게 작성하기 위해 지원하는 기능입니다.SAM (Single Abstract Method)하나의 추상 메서드만 포함하는 인터페이스를 SAM 이라고 합니다 추상 메서드를 하나만 포함하는 클릭 리스너를 만들어 보겠습니다interface OnClickListener { fun onClick()} 해당 인터페이스를 쓰는 예시입니다val listener = object : OnClickListener { override fun onClick() { println("Clicked") }}listener.onClick() /.. 이전 1 2 다음