Effective Kotlin 정리
·
Langauge/Kotlin
🧩 Item 27 : 변화로부터 코드를 보호하려면 추상화를 사용해라 상수리터럴은 아무것도 설명하지 않음.리터럴을 상수 프로퍼티로 변경하면의미있는 이름을 부여할 수 있고,값을 변경할 때 훨씬 유연함 함수함수는 추상화를 표현하는 수단함수 시그니처는 이 함수가 어 떤 추상화를 표현하고 있는지 알려줌매우 단순하지만 제한이 많음.무상태성 (상태를 유지하지 않음)함수 시그니처를 변경하면, 변경 지점이 많이 생김 클래스함수와 다른게상태를 가질 수 있으며,많은 함수를 가질 수 있음.final 클래스 외에는 다른 구현체가 절대 존재할 수 없음 인터페이스interface MessageDisplay { fun show( message: String, duration: MessageLengt..
인라인 함수 : 람다의 부가비용 없애기
·
Langauge/Kotlin
❐ 코틀린에서 람다 최적화어떻게?코틀린 컴파일러는 기본적으로 람다를 무명(익명) 클래스로 변환해 JVM 바이트코드를 생성한다.하지만, 람다를 사용할 때마다 새 클래스를 무조건 생성하지 않는다.동일한 구조의 non-capturing 람다는 하나의 클래스 인스턴스를 재사용하며,capturing 람다의 경우는 각각의 상태를 저장할 필요가 있으므로 별도의 클래스 인스턴스를 생성한다. non-capturing 람다 (변수를 포획하지 않는 경우)val greet = { println("Hello") }외부 변수를 참조하지 않는 상태 없는 람다컴파일 시 static final 싱글턴 객체로 생성됨JVM 바이트코드 상에서 여러 호출에도 동일한 인스턴스 재사용장점객체 할당 비용 없음메모리 효율적성능 최적화 가능 capt..
Sealed Class & Interface
·
Langauge/Kotlin
❐ DescriptionEnum과 Sealed 모두 제한된 유형의 계층 구조를 표현하는데 사용되지만, 각각의 목적과 사용 방식에 차이가 있다.오늘은 Sealed class/interface의 특징과 enum class와 차이를 공부해보자.     ❐ Sealed Class1. 정의sealed class는 같은 파일 내에서만 하위 클래스를 가질 수 있도록 제한된 계층 구조를제공하는 추상 클래스의 한 종류다.sealed class Shape { class Circle(val radius: Double) : Shape() class Rectangle(val width : Double, val height : Double) : Shape() object NotAShape : Shape()}  2..
직렬화 & 역직렬화
·
Langauge/Java
❐ DescriptionRedis를 사용할 때 데이터를 저장/조회 하는 과정에서 직렬화와 역직렬화는 필수적으로 이루어진다.그래서 오늘은 Java의 직렬화 & 역직렬화 부터 다시 알아보고, 순서대로 SpringBoot, Redis에서직렬화와 역직렬화를 할 수 있는 방법에 대해서 공부하자.     ❐ Java에서 직렬화 & 역직렬화 사용하기우선 자바 직렬화를 사용하기 위해선 아래의 functionalInterface를 사용해야 한다.package org.springframework.core.serializer;@FunctionalInterfacepublic interface Serializer {...} 위 인터페이스를 정의해줘야 하는 이유는 아래의 코드에서 확인할 수 있다.@Overridepublic vo..
Comparable, Stream을 사용하여 뱃지 부여하기
·
Langauge/Java
❒ Description우테코 6기 프리코스를 연습 삼아 해보는 과정에서 작성한 코드를 리펙토링 해봤다.※ Commit link    ❒ 요구 사항 및 로직 분석1. Requirements특정 금액 이상 사용을 하면 뱃지를 부여하는 요구사항이 있었다.해당 요구사항을 충족하기 위해 Comparable, Stream API(sorted, reduce)를 사용해서 기능을 구현했다.NONE : 5000원 미만 ("없음")STAR : 5000원 이상TREE : 10000원 이상SANTA : 20000원 이상 2. LogicBadge를 부여하는 역할은 Badge Enum 클래스가 담당한다.비교를 위해 Money 클래스의 크기를 내림차순 비교해야 한다.Comparable 인터페이스, Stream API - sorte..
Generic 제대로 알아보기.
·
Langauge/Java
❒ DescriptionJDK5 부터 Generic이 도입되었다. Generic의 도입으로 우리는 매번 명시적으로 작성해줘야 했던 Type-Check와Casting을 생략할 수 있을 뿐만 아니라, type-safe 한 좋은 코드를 작성할 수 있게 되었다. 이번 글에서는 Generic의기초 뿐만 아니라, 보다 더 깊게 이해하기 위해 Variance(변성), Synthetic, Reification(실체화) 관련 내용들도 함께정리하면서 공부해 볼 것이다.     ❒ Variance (변성)1. 변성이란?Variance refers to how sub-typing between more complex types relates to sub-typing between their components.(번역) Var..