Kotlin 확산 연산자

David Mbochi Njonge 2023년6월20일
  1. Kotlin 프로젝트 생성
  2. Kotlin에서 여러 인수 전달
  3. Kotlin에서 스프레드 연산자를 사용하여 여러 인수 전달
  4. Kotlin에서 기본 유형 배열을 사용하여 여러 인수 전달
  5. 결론
Kotlin 확산 연산자

확산 연산자(*)는 Kotlin, TypeScript, JavaScript 등과 같은 대부분의 프로그래밍 언어에서 사용됩니다.

스프레드 연산자는 둘 이상의 인수가 예상되는 위치에서 여러 인수를 전달하는 데 사용됩니다. Kotlin에서 확산 연산자는 vararg 키워드 접두사가 붙은 함수 매개변수와 함께 사용할 수 있습니다.

vararg 키워드는 함수가 가변 개수의 인수를 허용하고 제네릭 유형과 제네릭이 아닌 유형 모두에 사용할 수 있음을 나타냅니다. 이 튜토리얼에서는 스프레드 연산자의 작동 방식과 Kotlin에서 스프레드 연산자가 사용되는 위치를 설명합니다.

Kotlin 프로젝트 생성

IntelliJ 개발 환경을 열고 파일 > 새로 만들기 > 프로젝트를 선택합니다. 프로젝트 이름을 kotlin-spread-operator로 입력하고 Language 섹션에서 Kotlin을 선택한 다음 Build system 섹션에서 Intellij를 선택합니다.

마지막으로 만들기 버튼을 눌러 프로젝트를 생성합니다. 프로젝트가 열리면 src/main/kotlin 폴더 아래에 Main.kt라는 파일을 만들고 다음 코드를 파일에 복사하여 붙여넣습니다.

class House(
    private val id: Int,
    private val houseType: String,
    private val houseLocation: String){

     companion object{
         fun <T> of(vararg houses: T): List<T>{
             val theHouses = ArrayList<T>();
             for (house in houses) {
                 theHouses.add(house);
             }
             return theHouses;
         }
     }

    fun getId(): Int{
        return this.id;
    }

    override fun toString(): String {
        return "House(id=$id, houseType='$houseType', houseLocation='$houseLocation')"
    }

}

이 코드에서는 개체를 만들 때 제공해야 하는 속성 id, houseTypehouseLocation 속성을 사용하여 House라는 클래스를 만들었습니다.

또한 of(), getId()toString()이라는 세 가지 메서드를 정의했습니다. of() 메서드는 컴패니언 객체 내부에 정의되어 객체를 생성하지 않고 호출할 수 있는 정적 메서드임을 나타냅니다.

getId() 메서드는 현재 객체의 id를 반환하고 toString() 메서드는 객체의 문자열 표현을 얻는 데 도움이 됩니다. 다음 섹션에서 이 클래스를 사용하여 예제에서 사용할 인스턴스를 만들 것입니다.

Kotlin에서 여러 인수 전달

House 클래스 선언 뒤 Main.kt 파일에 다음 코드를 복사하여 붙여넣습니다.

fun multipleArgumentFunction(){
    val bungalow = House(1,"Bungalow","Seattle");
    val flat = House(2,"Flat","Texas")
    val houses: List<House> = House.of(bungalow, flat);
    houses.forEach(::println);
}

fun main(){
    multipleArgumentFunction();
}

이 코드에서 우리는 두 개의 집 개체를 만들고 개체를 of() 메서드의 인수로 전달하여 이러한 개체 목록을 반환하는 메서드를 만들었습니다.

정적 of() 메소드를 정의할 때 하나의 매개변수를 제공하면서 왜 두 개의 인수를 전달했는지 궁금할 것입니다. vararg 키워드가 있는 경우 둘 이상의 인수를 허용할 수 있는 메서드를 언급한 것을 기억하십시오.

정적 of() 메서드에는 vararg 키워드가 있으므로 둘 이상의 인수를 허용할 수 있습니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.

House(id=1, houseType='Bungalow', houseLocation='Seattle')
House(id=2, houseType='Flat', houseLocation='Texas')

Kotlin에서 스프레드 연산자를 사용하여 여러 인수 전달

스프레드 연산자는 둘 이상의 인수가 예상되는 여러 인수를 전달하는 데 사용되며 스프레드 연산자는 일반적으로 데이터 배열을 포함하는 개체에 접두사로 사용되는 * 연산자를 사용하여 표시됩니다.

이전 코드에 주석을 달고 주석 뒤에 다음 코드를 복사하여 Main.kt 파일에 붙여넣습니다.

fun multipleArgumentFunctionWithSpreadOperator(){
    val bungalow = House(1,"Bungalow","Seattle");
    val flat = House(2,"Flat","Texas")

    val apartments: Array<House> = arrayOf(
        House(3,"Apartment","San Francisco"),
        House(4,"Apartment","New York"),
        House(5,"Apartment","Florida")
    );

    val theHouses: List<House> = House.of(bungalow, flat, *apartments);
    theHouses.forEach(::println);
}

fun main(){
    multipleArgumentFunctionWithSpreadOperator();
}

이 예제는 이전 예제를 기반으로 하며 이 코드에서는 3개의 집 개체를 포함하는 Array를 추가했습니다.

of() 메서드를 사용하면 가변 개수의 인수를 전달할 수 있습니다. 스프레드 연산자를 사용하여 이 배열을 메서드에 전달합니다.

다른 개별 개체를 메서드에 전달할 수도 있습니다.

*아파트 구문을 사용하여 배열을 메서드에 전달하고 배열의 모든 객체를 메서드 내부의 코드에서 사용할 수 있습니다. 다음 코드를 실행하고 출력이 아래와 같은지 확인합니다.

House(id=1, houseType='Bungalow', houseLocation='Seattle')
House(id=2, houseType='Flat', houseLocation='Texas')
House(id=3, houseType='Apartment', houseLocation='San Francisco')
House(id=4, houseType='Apartment', houseLocation='New York')
House(id=5, houseType='Apartment', houseLocation='Florida')

Kotlin에서 기본 유형 배열을 사용하여 여러 인수 전달

Kotlin은 IntArray, ShortArray, ByteArray, LongArray 등을 포함하는 기본 유형 배열을 제공합니다.

애플리케이션에서 이러한 유형을 사용하는 경우 유형 불일치 오류가 발생하는 경향이 있으며 이 예에서는 이를 해결하는 방법을 보여줍니다.

이전 코드에 주석을 달고 주석 뒤에 다음 코드를 복사하여 Main.kt 파일에 붙여넣습니다.

fun multipleArgumentFunctionWithTypedArray(){
    val bungalow = House(1,"Bungalow","Seattle");
    val flat = House(2,"Flat","Texas")

    val apartments: Array<House> = arrayOf(
        House(3,"Apartment","San Francisco"),
        House(4,"Apartment","New York"),
        House(5,"Apartment","Florida")
    );

    val apartmentCount: IntArray =
        apartments.map(House::getId).toIntArray();

    val totalHouses: List<Int> =
        House.of(bungalow.getId(),flat.getId(), *apartmentCount.toTypedArray());

    totalHouses.forEach(::println);
}

fun main(){
    multipleArgumentFunctionWithTypedArray();
}

이 예제에서 우리의 목표는 List<Int> 정수 컬렉션으로 of() 메서드에 전달된 모든 id를 반환하는 것입니다.

map() 메서드는 집 개체 배열 Array<House>를 사용하여 toIntArray() 메서드를 사용하여 프리미티브 유형 배열 IntArray를 반환합니다.

개체의 모든 id를 반환하기 위해 getId() 메서드를 사용하여 개별 개체의 idof() 메서드에 전달했습니다.

확산 연산자를 사용하여 나머지 개체 idof() 메서드에 전달했습니다. 그러나 유형 불일치 오류를 방지하기 위해 toTypedArray() 메서드를 사용하여 기본 유형 배열 IntArray를 일반 유형 배열 Array<Int>로 먼저 변환했습니다.

이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.

1
2
3
4
5

결론

이 튜토리얼에서는 Kotlin에서 Spread 연산자를 사용하는 방법을 배웠으며, Spread 연산자를 사용하여 여러 인수를 전달하는 방법과 Spread 연산자를 사용하여 여러 인수를 전달하는 방법을 다룬 주제를 다루었습니다. 마지막으로 원시 유형 배열을 사용하여 여러 인수를 전달하는 방법을 다루었습니다.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub