Kotlin에서 객체 복제

David Mbochi Njonge 2023년6월20일
  1. Kotlin 프로젝트 생성
  2. 데이터 클래스의 copy() 메서드를 사용하여 Kotlin에서 개체 복제
  3. ArrayList의 clone() 메서드를 사용하여 Kotlin에서 개체 복제
  4. Kotlin에서 객체 복제를 위한 확장 함수 만들기
  5. Kotlin에서 개체를 복제하기 위한 복제 가능한 인터페이스 구현
  6. 결론
Kotlin에서 객체 복제

복제 기능은 일반적으로 객체 지향 프로그래밍 언어에서 사용됩니다. 복제는 객체의 복사본을 생성하는 것으로 정의되며, 이는 복사된 객체가 원본 객체의 정확한 속성과 메서드를 가짐을 의미합니다.

객체를 복사하면 객체를 생성하고 힙에 추가하는 전 과정을 거치지 않고 기존 객체를 재사용하기 때문에 리소스 낭비를 방지하는 데 도움이 됩니다.

이 자습서에서는 개체의 복사본 또는 복제본을 만드는 데 활용할 수 있는 다양한 접근 방식을 설명합니다.

Kotlin 프로젝트 생성

IntelliJ 개발 환경으로 이동하여 파일>새로 만들기>프로젝트를 선택합니다. 프로젝트 이름을 kotlin-copy-object로 입력하고 언어 섹션에서 Kotlin을 선택한 다음 빌드 시스템 섹션에서 Intellij를 선택합니다.

src/main/kotlin 폴더 아래 Main.kt라는 파일을 만듭니다. 다음 코드를 복사하여 파일에 붙여넣습니다.

data class Movie(var id: Int,
                 var name: String,
                 var genre: String,
                 var duration: Int);

fun fetchMovies(): ArrayList<Movie>{
    return arrayListOf(
        Movie(1,"Paws of fury","animation",60),
        Movie(2,"Green lantern","animation",80),
        Movie(3,"Hot seat","action",70),
        Movie(4,"Chip n Dale","fantasy",60),
        Movie(5,"Bullet train","mystery",80)
    );
}

이 코드에서는 Movie 개체의 ArrayList를 반환하는 fetchMovies()라는 메서드를 만들었습니다. 동영상 개체는 이 코드에서도 정의한 데이터 클래스를 사용하여 생성됩니다.

동영상 개체의 속성에는 id, name, genre 및 기간이 포함됩니다. id 속성은 int 유형이고 다른 속성은 문자열 유형입니다.

Kotlin에서 개체의 복사본을 만드는 방법을 보여주기 위해 이 자습서에서 다루는 몇 가지 예제에서 fetchMovies() 메서드를 사용할 것입니다.

데이터 클래스의 copy() 메서드를 사용하여 Kotlin에서 개체 복제

데이터 클래스는 데이터를 임시로 보유하는 데 사용되는 클래스이며 개발자에게 일부 기본 기능을 제공합니다. 데이터 클래스는 개발자가 논리를 구현하지 않고 활용할 수 있는 다음 메서드를 제공합니다. equals(), hashCode(), toString()copy().

Main.kt 파일에서 fetchMovies() 메서드 뒤에 다음 코드를 복사하여 붙여넣습니다.

fun usingCopyOnDataClass(){
    val movie: Movie = fetchMovies()[2];
    val copyOfMovie: Movie = movie.copy();
    println(copyOfMovie);
}

fun main(){
    usingCopyOnDataClass();
}

이 코드에서는 Movie 객체의 ArrayList를 반환하는 fetchMovies() 메서드를 사용하여 인덱스 2에서 Movie 객체를 가져왔습니다.

우리의 목표는 데이터 클래스에서 제공하는 copy() 메서드를 활용하여 개체의 복사본을 만드는 것입니다. 데이터 클래스의 copy() 메서드는 개체의 동일한 복사본을 제공합니다.

참고: 이를 실현하기 위해 새로운 개체가 생성되지 않습니다.

변경하려는 속성의 값을 copy() 메서드의 인수로 전달하여 나머지 속성을 유지하면서 객체의 일부 속성을 변경할 수도 있습니다.

예를 들어 copy(name = "Avengers") 인수를 전달하면 개체의 새 복사본 이름이 사용자가 제공한 이름으로 변경되고 나머지는 변경되지 않습니다.

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

Movie(id=3, name=Hot seat, genre=action, duration=70)

ArrayList의 clone() 메서드를 사용하여 Kotlin에서 개체 복제

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

fun usingCloneWithArrayList(){
    @Suppress("UNCHECKED_CAST")
    val movies: ArrayList<Movie> =
        fetchMovies().clone() as ArrayList<Movie>;
    movies.forEach(::println);
}

fun main(){
    usingCloneWithArrayList();
}

이 코드에서는 fetchMovies() 메서드를 사용하여 clone() 메서드를 사용하여 반환된 ArrayList 인스턴스의 복사본을 생성했습니다.

ArrayList의 clone() 메서드는 Object 클래스에서 상속됩니다. 이 메서드는 요소가 복사되지 않음을 의미하는 목록 인스턴스를 반환합니다.

clone() 메서드는 Object를 반환하므로 as 키워드를 사용하여 ArrayList<Movie>로 캐스팅했습니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.

Movie(id=1, name=Paws of fury, genre=animation, duration=60)
Movie(id=2, name=Green lantern, genre=animation, duration=80)
Movie(id=3, name=Hot seat, genre=action, duration=70)
Movie(id=4, name=Chip n Dale, genre=fantasy, duration=60)
Movie(id=5, name=Bullet train, genre=mystery, duration=80)

Kotlin에서 객체 복제를 위한 확장 함수 만들기

확장 함수는 기본 코드를 수정하지 않고 기존 클래스에 기능을 추가할 수 있게 해주는 함수입니다. 이전 코드를 주석 처리하고 주석 뒤에 다음 코드를 복사하여 Main.kt 파일에 붙여넣습니다.

fun Movie.clone(): Movie{
    val movie = Movie(
        this.id,
        this.name,
        this.genre,
        this.duration);
    return movie;
}

fun usingCloneExtensionFunction(){
    val movie = fetchMovies()[4];
    val clonedMovie = movie.clone();
    println(clonedMovie);
}

fun main(){
    usingCloneExtensionFunction();
}

이 코드에서는 영화 데이터 클래스의 clone()이라는 확장 함수를 만들었습니다. 복제 확장 기능이 호출되면 개체의 현재 인스턴스를 반환합니다.

clone() 확장 기능을 사용하기 위해 fetchMovies() 메서드를 사용하여 인덱스 4에서 동영상을 검색한 다음 clone() 기능을 호출했습니다. 이렇게 하면 인덱스 4에 있는 개체와 동일한 개체의 복사본이 생성됩니다.

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

Movie(id=5, name=Bullet train, genre=mystery, duration=80)

Kotlin에서 개체를 복제하기 위한 복제 가능한 인터페이스 구현

애플리케이션을 개발하고 특정 클래스를 복사하려는 경우 일반적으로 Cloneable 인터페이스를 구현하여 이 기능을 클래스에 추가합니다.

Cloneable 인터페이스에는 클래스의 문자열 표현을 반환하는 clone()이라는 메서드가 있습니다. 우리가 해야 할 유일한 일은 clone()toString() 메서드를 재정의하는 것입니다.

clone() 메서드도 public으로 만들어야 합니다.

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

class Student(
    private val firstName: String,
    private val lastName: String): Cloneable{

   public override fun clone(): Any {
        return super.clone()
    }

    override fun toString(): String {
        return "Student(firstName='$firstName', lastName='$lastName')"
    }

}

fun implementingCloneable(){
    val student: Student = Student("john","doe");
    val clonedStudent = student.clone();
    println(clonedStudent.toString());
}

fun main(){
    implementingCloneable();
}

이 코드에서는 firstNamelastName 속성을 사용하여 Student라는 클래스를 만들었습니다. 이 클래스는 Cloneable 인터페이스를 구현하고 해당 clone() 메서드를 재정의합니다.

복제된 개체를 콘솔에 기록할 수 있도록 toString() 메서드도 재정의했습니다.

implementingCloneable()Student 개체의 인스턴스를 만들고 clone() 메서드를 호출하여 개체의 복사본을 만듭니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.

Student(firstName='john', lastName='doe')

결론

이 튜토리얼에서는 Kotlin에서 객체의 복사본을 만드는 방법을 배웠습니다. 우리가 다룬 접근 방식에는 데이터 클래스의 copy() 메서드 사용, ArrayList의 clone() 메서드 사용, 확장 함수 생성 및 Cloneable 인터페이스 사용이 포함됩니다.

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