독서

[코틀린 인 액션] 6장. 코틀린 타입 시스템

오렌지색 귤 2024. 4. 21. 20:32
반응형

찾아본 내용

 

1. 코틀린에서 확장함수 사용 시 객체가 null이어도 메서드 호출을 할 수 있는 이유는? 자바에서의 static 메서드와 같이 동작해서 그런가? (p. 265)

 

코틀린의 확장 함수는 실제로 자바의 static 메서드로 컴파일됩니다. 즉, 확장 함수는 호출되는 대상 객체를 첫 번째 매개변수로 받는 자바의 정적 메서드와 유사하게 동작합니다. 이러한 구현 방식 덕분에, 확장 함수는 클래스의 일부가 아니기 때문에, 객체가 null일지라도 함수를 호출할 수 있습니다.

 

fun String?.isNullOrBlank(): Boolean {
    return this == null || this.isBlank()
}
public class StringExtensions {
    public static boolean isNullOrBlank(String string) {
        return string == null || string.isBlank();
    }
}

 

위의 kotlin 확장함수는 아래 자바의 정적 메서드로 변환된다.

 

 

 

2. 스프레드 연산자 * (p.298)

 

코틀린에서 스프레드 연산자(*)는 주로 vararg (가변 인자) 매개변수를 다룰 때 사용됩니다. vararg 키워드는 함수가 임의의 수의 인자를 받을 수 있도록 해줍니다. 스프레드 연산자는 배열이나 리스트와 같은 집합적 데이터를 개별 인자로 펼쳐서 가변 인자로 받는 함수에 전달할 때 사용됩니다.

 

스프레드 연산자의 역할

 

함수가 여러 개의 인자를 받도록 설계되었지만, 인자들이 배열이나 리스트의 형태로 이미 존재하는 경우, 이 배열이나 리스트를 개별 인자로 하나씩 넘겨주어야 할 때 스프레드 연산자를 사용합니다. 예를 들어, 함수가 vararg 형식으로 여러 개의 String 인자를 받는다면, String 배열을 직접 인자로 넘기기 위해 스프레드 연산자를 사용할 수 있습니다.

 

사용 예제

 

예를 들어, 다음과 같은 vararg 매개변수를 받는 함수가 있다고 가정해보겠습니다:

 

fun printAll(vararg messages: String) {
    for (m in messages) println(m)
}

 

이 함수는 여러 개의 문자열을 받아 출력할 수 있습니다. 만약 이미 String 배열이나 리스트가 있고 이를 함수에 전달하고 싶다면, 스프레드 연산자를 사용할 수 있습니다:

 

val words = arrayOf("Hello", "World", "Kotlin")
printAll(*words)

 

위 코드에서 *wordswords 배열의 모든 요소를 printAll 함수의 vararg 인자로 전달합니다. words 배열의 각 요소는 printAll 함수에게 별도의 인자로 처리됩니다.

 

 

 

 

궁금한 내용

 

1. 자바와의 상호 운용성을 너무 신경써야하는 코틀린을 함수형 프로그래밍이라고 할 수 있을까?

 

Kotlin 공식 문서에 따르면 두가지 특성을 모두 가지고 있는 언어이므로, 두가지를 섞어서도 사용할 수 있다고 한다.
Stackoverflow나 Quora에서도 pure하지 않고 섞인 잡종 느낌이라고 한다.

 

 

FAQ | Kotlin

 

kotlinlang.org

 

 

What type of language Kotlin is? Pure OOP's or Functional

I'm learning Kotlin. Having Java background I know, Java is pure object oriented language. Everything has to be inside class even the main function. That's why I'm wondering is Kotlin a true object

stackoverflow.com

 

Is Kotlin a functional or an object-oriented language?

Answer (1 of 5): Is Kotlin a functional or an object-oriented language? It’s both, but somewhat weak on the FP side Compared to Java, Kotlin did away with static methods (which belong to a class, not to an object) and adopted the companion object paradig

www.quora.com

 

반응형