Kotlin에서 개체의 인스턴스 가져오기

David Mbochi Njonge 2023년1월30일
  1. 제네릭과 함께 is를 사용하여 Kotlin에서 객체 인스턴스 가져오기
  2. iswhen 키워드와 함께 사용하여 Kotlin에서 개체 인스턴스 가져오기
  3. 결론
Kotlin에서 개체의 인스턴스 가져오기

객체의 인스턴스를 가져오는 것은 Kotlin, Java, TypeScript, JavaSript 등과 같은 대부분의 프로그래밍 언어에서 접하게 되는 일반적인 개발 방법입니다. 요소의 인스턴스를 찾으려는 상황의 예는 유형을 기반으로 요소를 정렬하려는 경우입니다.

요소의 인스턴스를 찾을 때 요소가 일치 대상 요소와 동일한 유형이면 결과는 true입니다. 그렇지 않으면 false를 반환합니다.

이 튜토리얼에서는 Kotlin을 사용하여 런타임에 객체의 인스턴스를 얻는 방법을 배웁니다.

제네릭과 함께 is를 사용하여 Kotlin에서 객체 인스턴스 가져오기

Generic은 모든 유형을 사용하여 재사용할 수 있도록 코드를 설계하는 데 사용되는 개발 접근 방식입니다.

IntelliJ로 이동하여 File > New Project를 선택하여 새 Kotlin 프로젝트를 만듭니다. 프로젝트 이름을 kotlinInstancOf 또는 원하는 이름으로 입력합니다.

언어 섹션에서 Kotlin을 선택하고 시스템 빌드 섹션에서 Intellij를 선택합니다. 생성 버튼을 눌러 프로젝트를 생성합니다.

프로젝트가 생성되면 kotlin 폴더 아래에 com/instanceOf 폴더 구조를 만듭니다. instanceOf 폴더 아래에 Main.kt라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

package com.instanceOf

interface Employee{
    fun work(): String;
}
class Manager(private val name: String): Employee{
    override fun work(): String {
        return "$name is preparing the project schedule";
    }

}
class Janitor(private val name: String): Employee{
    override fun work(): String {
        return "$name is cleaning the office";
    }

}
fun <T> doWork(Object: T): String {
    if (Object is Employee){
       return Object.work();
    }else{
        throw RuntimeException("$Object is not of type Employee")
    }
}

fun main() {
    println(doWork(Manager("John")));
    println(doWork(Janitor("Peter")));
    println(doWork("mary"));
}

이 예에서는 Employee라는 인터페이스와 ManagerJanitor라는 두 개의 구체적인 구현을 만들었습니다.

doWork()는 위에서 정의한 일반 메소드로 is 키워드를 사용하여 인수로 전달된 객체가 Employee와 동일한 유형인지 여부를 찾습니다. 조건이 true를 반환하면 객체의 work() 메서드를 호출합니다. 그렇지 않으면 RuntimeException()이 발생합니다.

메인 메소드에서 doWork() 메소드를 3번 호출하고 Manager, Janitor 및 문자열을 각각 인수로 전달합니다.

메서드의 처음 두 호출은 Employee와 관계가 있기 때문에 true로 평가됩니다. 그러나 문자열 인수가 Employee와 관계가 없기 때문에 마지막 호출은 false로 평가됩니다.

코드를 실행하여 출력이 아래와 같이 표시되는지 확인합니다.

Exception in thread "main" java.lang.RuntimeException: mary is not of type Employee
John is preparing the project schedule
Peter is cleaning the office

is 키워드는 부울을 반환하므로 ! 문자를 추가하여 is 키워드의 반대를 반환할 수 있습니다. 키워드 앞에. 캐릭터 ! 논리 게이트로 작업할 때 일반적으로 사용되는 not으로 발음됩니다.

doWork() 메서드에 주석을 달고 다음 코드로 바꿉니다.

fun <T> doWork(Object: T): String{
    if (Object !is Employee){
        throw RuntimeException("$Object is not of type employee");
    }
    return Object.work();
}

코드를 다시 실행하고 결과가 이전 예제의 출력과 동일함을 확인합니다.

John is preparing the project schedule
Peter is cleaning the office
Exception in thread "main" java.lang.RuntimeException: mary is not of type employee

iswhen 키워드와 함께 사용하여 Kotlin에서 개체 인스턴스 가져오기

when 키워드는 switch 키워드가 Java에서 작동하는 것과 같은 방식으로 작동합니다. 유일한 차이점은 구문입니다.

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

fun fetchData() = listOf<Any>("book",3,true,"computer");

fun main() {
    for (data in fetchData()) {
        when(data){
            is String -> println(data)
            is Int -> println(data)
            is Boolean -> println(data)
        }
    }
}

위의 예에서 listOf() 도우미 메서드에 할당하여 Any 유형의 목록을 반환하는 fetchData() 메서드를 만들었습니다. listOf() 메서드는 String, Int 및 Boolean 유형이 포함된 목록을 반환합니다.

main 메소드에서 루프를 사용하여 목록을 반복하고 각 값을 when() 메소드에 위임하여 런타임 시 요소 유형을 결정했습니다. when() 블록 내에서 전달된 값의 유형은 is를 사용하여 결정되며 조건이 true로 평가되면 값이 콘솔에 기록됩니다.

when() 블록 내에서 유형을 찾지 않고 목록에 다른 유형을 추가하면 값이 콘솔에 기록되지 않습니다.

코드를 실행하고 출력이 아래와 같은지 확인합니다.

book
3
true
computer

결론

이 튜토리얼에서는 Kotlin 프로그래밍 언어를 활용하여 런타임에 요소의 인스턴스를 가져오는 방법을 배웠습니다. 다루는 접근 방식에는 is 키워드를 제네릭과 함께 사용하고 is 키워드를 when 키워드와 함께 사용하는 방법이 있습니다.

제네릭을 사용할 때 reified 유형을 사용하고 있는지 확인해야 합니다. 이는 런타임에 유형 정보를 사용할 수 있음을 의미합니다. 그렇지 않으면 유형 검사가 작동하지 않습니다.

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

관련 문장 - Kotlin Object