본문 바로가기

Type Alias·as import / 구조분해·componentN / Jump·Label / Takeif · TakeUnless

@silver-w2025. 10. 9. 19:31
  1. Type Alias·as import 
  2. 구조분해·componentN
  3. Jump·Label
  4. Takeif · TakeUnless 

더보기

1 . Type Alias·as import 

- Type Alias : 긴 이름의 클래스/함수 타입에 별칭을 주는 역할

fun filterFruits(fruits: List<Fruit>, filter: (Fruit) -> Boolean) {}	// typealias 사용전

typealias FruitFilter = (Fruit) -> Boolean

fun filterFruits2(fruits: List<Fruit>, filter: FruitFilter) {}	// typealias 사용후

data class UltraSuperGuardianTribe(
    val name: String,
)

typealias USGTMap = Map<String, UltraSuperGuardianTribe>	// 타입에 별칭을 부여할 수 있다.


 - as import : 클래스/함수를 임포트 할 때 이름을 바꾸는 기능 

import com.package1.package2. ... printHello as printHelloA
import com.package1.package3. ... printHello as printHelloB

import와 동시에 이름을 바꿀 수 있으며, 서로 다른 패키지 · 같은 함수 이름을 as import를 통해 구분할 수 있다.


2 . 구조분해·componentN

□ 구조분해 : 복합적인 값을 분해하여 여러 변수를 한번에 초기화

data class Person(
    val name: String,
    val age: Int,
)

fun main() {
    val person = Person("홍길동", 20)
    val (who, howOld) = person
    println("$who, $howOld")  // name 과 age에 적절한 변수에 값이 할당이 됨
}

 : Data Class는 componentN이란 함수가 자동으로 만들어진다.

 

□ ComponentN 
 - val (who, howOld) = person 의 의미는 아래와 같다.

val who = person.component1()   // 인스턴스의 첫 번째 프로퍼티를 가져옴
val howOld = person.component2()    // 인스턴스의 두 번째 프로퍼티를 가져옴

 

□ Data Class가 아닐 때 ComponentN 구현

class Person(
    val name: String,
    val age: Int,
) {
    operator fun component1(): String {
        return this.name
    }

    operator fun component2(): Int {
        return this.age
    }
}

componentN은 연산자의 속성을 가지므로 operator 키워드를 붙여주어야 한다.

※ map을 순회하는 아래 for문도 구조분해를 이용한 코드이다 ((key, value) ...)

val map = mapOf(1 to "one", 2 to "two")
for ((key, value) in map.entries) {
    println("$key: $value")
}

 

3 . Jump·Label

□ Jump
 - return, break, continue : 자바와 완전 똑같다

 - 단, forEach문에서는 break와 continue를 사용할 수 없다.

- 그러므로 break, continue를 사용하고 싶다면 for문 사용을 추천하되, 굳이 사용하고 싶다면 

① continue → @forEach : 코드의 .forEach 타이밍으로 빠져나간다.


② break → run{ @run } 이때 가장 밖에 있는 run 이 loop@와 특정 타이밍을 기록하는 기능을 한다.

 
Label (권장 x)
 - 자바의 『loop : 루프이름』과 같은 기능





4 . Takeif · TakeUnless 

- 주어진 조건을 만족/불만족 하면 값을 리턴하고 반대의 상황에서는 null을 반환한다.

fun getOrNull(num: Int?): Int? {
    return num?.takeIf { it > 0 }   
    // num?.takeUnless { it <= 0 } 과 같음
}


 

 


 

※ (intellij) 코틀린 코드 자바로 변환
tool > Kotlin > Show Kotlin Bytecode


출처 : https://inf.run/sMPv5

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)| 최태현 - 인프런 강의

현재 평점 5.0점 수강생 3,556명인 강의를 만나보세요. 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다. Ko

www.inflearn.com

 

'Kotlin > Java to Kotlin Guide' 카테고리의 다른 글

scope function  (0) 2025.10.10
FP - 컬렉션을 함수형으로 다루는 방법  (0) 2025.10.09
FP - 람다  (0) 2025.10.09
FP - 다양한 함수  (0) 2025.10.09
FP - 배열과 컬렉션  (0) 2025.10.08
silver-w
@silver-w :: silver-w 님의 블로그

silver-w 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차