Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 객체 복제(clone)란 무엇이고, 왜 사용할까?

객체 복제(Object Cloning)는 기존 객체의 완전히 동일한 복사본을 생성하는 방법입니다. 이를 위해 Object 클래스가 제공하는 clone() 메서드를 사용하며, 복제 대상이 되는 클래스는 반드시 Cloneable 인터페이스를 구현해야 합니다. 만약 Cloneable 인터페이스를 구현하지 않은 상태에서 clone() 메서드를 호출하면 CloneNotSupportedException 예외가 발생합니다.

객체 복제의 가장 큰 장점은 성능에 있습니다. new 키워드로 새 객체를 생성하고 필드 값을 하나씩 복사하는 방식은 많은 처리 비용이 들지만, clone() 메서드를 사용하면 JVM이 메모리 수준에서 객체를 그대로 복사하기 때문에 불필요한 처리 과정을 생략할 수 있습니다.

문법(Syntax)

protected Object clone() throws CloneNotSupportedException

clone() 메서드는 protected로 선언되어 있으므로, 외부에서 호출하려면 해당 클래스 안에서 오버라이딩하여 public으로 공개하는 것이 일반적입니다.

예제 코드(Example)

public class Employee implements Cloneable {
    int id;
    String name = "";

    Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Employee clone() throws CloneNotSupportedException {
        return (Employee) super.clone();
    }

    public static void main(String[] args) {
        Employee emp = new Employee(115, "Raja");
        System.out.println(emp.name);

        try {
            Employee emp1 = emp.clone();
            System.out.println(emp1.name);
        } catch (CloneNotSupportedException cnse) {
            cnse.printStackTrace();
        }
    }
}

실행 결과(Output)

Raja
Raja

위 예제에서 원본 객체 emp와 복제된 객체 emp1 모두 같은 이름 "Raja"를 출력하는 것을 확인할 수 있습니다. 즉, clone() 메서드가 객체의 상태를 그대로 복사했음을 의미합니다.

참고 사항

clone() 메서드는 기본적으로 얕은 복사(shallow copy)를 수행합니다. 따라서 객체 내부에 참조 타입 필드가 있다면 원본과 복제본이 같은 참조를 공유하게 되며, 이 경우 깊은 복사(deep copy)가 필요한지 반드시 검토해야 합니다.