☕️ Java

[Java/Kotlin] 깊은복사 Cloneable 이용하기

콩드로이드 2020. 12. 6. 01:26

이전 포스팅에 이어서 Cloneable을 사용해서 깊은 복사를 하는 방법에 대해 적어보겠습니다.

깊은 복사에 대해 알고싶으시다면, 이전 포스팅을 참조해주세요

 

클래스에 Cloneable을 참조해서 구현하면 되는 방식이라 생각보다 간단합니다.

 

 

1. Cloneable implements 

 예제로 이름과 나이를 가지는 클래스를 구현해보겠습니다.

 

클래스에 Cloneable을 implements 해주고 Clone() Method를 생성해줍니다 

 

 

✔ Java

public class User implements Cloneable {
    String name = "";
    int age = 0;
    
    User(String name, int age){
        this.name= name;
        this.age = age;
    }
    
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

 

✔ Kotlin

class User(var name: String, var age: Int) : Cloneable {
    public override fun clone(): User {
        return User(name = name, age = age)
    }
}

 

2. 사용

 새 객체를 생성한 후 클래스를 clone()해서 받아오면 됩니다

 

✔ Java

User user = new User("Dod", 12);
User userCopy =  (User)user.clone();
userCopy.age = 24;

 

 

✔ Kotlin

var user = User("Dod", 12)
var test = user.clone()
test.age=24

 

간단하게 해당 클래스로 부터 clone()을 해서 받아온 후, 데이터 조작 작업을 하게 되면 

새로 생성된 객체의 데이터만 변화되고, 기존 객체의 데이터는 변경되지 않습니다

 

이름과 나이만 들어있는 클래스를 예제로 만들어서 더 단순해보이지만 깊은 복사 자체가 

생각보다 많은 작업을 요구하지 않기 때문에 객체 복사에 있어서 데이터를 다루기가 좀 더 편리할 것이라 생각됩니다

 

 

 

궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊