본문 바로가기

kotlin43

[코틀린/Kotlin] is, as, as? is, as, as?타입 검사 및 타입 캐스팅에 사용하는 키워드클래스 간의 상속/다형성 관계에서 객체의 타입을 확인하거나 변환is타입 검사 (Type Checking)is는 어떤 객체가 특정 타입인지 검사할때 사용Instanceof와 유사한 개념예시fun printLength(obj: Any) { if (obj is Str){ println("문자열의 길이: ${obj.length}"} }else { println("문자열이 아님") }}Is로 검사한 후에는 해당 타입으로 스마트 캐스팅→ obj.length처럼 String의 멤버로 바로 접근 가능스마트 캐스팅더보기🔗 연관 블로그: [코틀린/Kotlin] null처리와 스마트캐스트 [코틀린/Kotlin] null처리와 스마트캐스트Null 안전성kot.. 2025. 9. 3.
[코틀린/Kotlin] 구체화(reifeid) reifeid일반적으로 제네릭 타입은 런타임 시점에서 사라짐(타입 소거, type erasure)fun printType(value: T) { println(T::class) // ❌ 오류!}→ T는 런타임에 어떤 타입인지 알 수 없어서 컴파일 에러→ inline과 reified를 함께 사용하여 T의 실제 타입 정보를 런타임에서도 사용 가능:⭑Type Erasure글 추가 예정사용법inline fun printType(value: T) { println(T::class)}inline: 함수를 호출한 곳에 코드가 인라인으로 삽입(호출 지점에 복사) → 타입 정보 유지 가능reified: 제네릭 타입 T를 런타임에서도 사용 가능더보기🔗 연관 블로그: [코틀린/Kotlin] 인라인 함수 [코틀.. 2025. 9. 2.
[코틀린/Kotlin] 메모이제이션(Memoization) 메모이제이션한번 계산한 결과를 저장하고 같은 계산을 반복할 때 저장된 값을 재사용하는 기법계산 결과를 매모(배열, Map 등)에 저장하여 사용중복 계산을 피해서 속도를 빠르게 개선동적 계획법(DP, Dynamic Programming)에서 자주 사용사용 이유재귀를 사용한 피보나치fun fib(n: Int): Int { if (n → fib(5)를 사용한 예시fib(5)├── fib(4)│ ├── fib(3)│ │ ├── fib(2)│ │ │ ├── fib(1) = 1│ │ │ └── fib(0) = 0│ │ └── fib(1) = 1│ └── fib(2) ← 중복!│ ├── fib(1)│ └── fib(0)└── fib(3) ← 중복!.. 2025. 9. 2.
[코틀린/Kotlin] 재귀(Recursion) 재귀자기 자신을 호출하는 함수자기 자신을 반복해서 호출하면서 문제를 점점 작게 나누는 방식구성요소아래 두가지를 필수로 만족해야함기저 조건(Base case)더 이상 자기 자신을 호출하지 않도록 멈추는 조건재귀 조건(Recursive case)자기 자신을 호출하면서 문제를 점점 단순화예시팩토리얼 계산fun factorial(n: Int): Int { if (n 예시: factorial(3)factorial(3) = 3 * factorial(2) = 3 * (2 * factorial(1)) = 3 * (2 * 1) = 6사용 예시크기가 점점 작아지는 반복 작업트리 탐색, DFS, 백트래킹, 분할정복 등의 문제복잡한 반복보다 재귀가 더 직관.. 2025. 9. 1.
[코틀린/Kotlin] 인라인 함수 인라인 함수함수를 호출하는 것이 아닌 바이트 코드를 호출 위치에 붙여넣는 형식보통 람다를 인자로 넣을 경우 성능상 오버 헤드가 있으나 inline 키워드를 사용하여 람다 자체도 인라인 되어 오버헤드 감소예시inline fun runTwice(block: () -> Unit) { block() block()}사용 이유성능 최적화 고차 함수 호출 시 생성되는 람다 객체, 함수 호출 오버헤드 감소람다에서 non-local return 가능 일반적인 람다에선 return이 불가능하나 인라인 함수에서는 가능inline fun doSomething(block: () -> Unit) { println("Start") block() println("End")}fun main() { do.. 2025. 9. 1.
[코틀린/Kotlin] 위임(Delegation) Delegation위임 패턴은 어떤 객체가 자신의 역할 중 일부를 다른 객체에 위임하여 처리하는 디자인 패턴기능 일부를 직접 구현하지 않고 다른 객체에게 맡김by 키워드를 사용하여 간단하게 구현사용 이유코드의 재사용성역할 분리로 책임 분산클래스 상속의 복잡도 감소예시interface Printer { fun printMessage()}class RealPrinter: Printer{ override fun printMessage() { println("실제 출력 중입니다.") }}class Manager(printer: Printer): Printer by printerfun main() { val realPrinter = RealPrinter() val manager = Manager(realPrin.. 2025. 8. 28.