>  기사  >  Java  >  Java의 객체 복제

Java의 객체 복제

WBOY
WBOY원래의
2024-08-30 16:04:50754검색

가장 널리 사용되는 프로그래밍 언어 중 하나인 Java는 다양한 특징과 기능을 제공합니다. Java의 객체는 작업을 완료하는 데 사용됩니다. 객체를 생성하고, 변경하고, 이동하고, 해당 메소드를 호출하는 등의 작업을 수행합니다. 우리 모두 알고 있듯이 객체에 대한 참조는 Java에 저장됩니다. 따라서 동일한 객체를 가리키는 두 개의 참조가 있는 경우 누군가의 변경 사항은 다른 사람의 동일한 변경 사항에 완전히 반영됩니다. 이제 이 요소가 매번 우리에게 유리하게 작용하지 않을 수 있으므로 이러한 상황을 방해하는 방법은 복제입니다. 즉, 이러한 객체의 정확한 복제본을 생성하는 것을 Java에서는 객체 복제라고 합니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

정의에 따르면 객체 복제는 유사한 상태를 가진 원본 객체의 정확한 복사본을 생성하는 프로세스입니다. 복제할 때 모든 속성은 새로 복제된 객체로 전달되지만 이러한 속성은 필요에 따라 변경하거나 조작할 수 있습니다. clone() 메소드는 Object 클래스에 정의되어야 합니다. 객체를 복제하려는 클래스에는 java.lang.A 복제 가능한 인터페이스의 구현이 필수입니다. Cloneable 인터페이스 구현에 실패하는 경우 예외가 발생합니다. 이제 객체 복제 구문을 살펴보겠습니다.

구문:

protected Object clone() throws CloneNotSupportedException

Object 클래스의 경우 clone 메소드를 통해 특정 복제 작업이 수행됩니다. 이 메소드는 클래스의 정확한 복제본을 생성하고 객체 필드의 내용으로 모든 필드를 초기화합니다. Cloneable 인터페이스가 언급된 객체의 클래스에 의해 구현되지 않은 경우 "CloneNotSupportedException"이 발생합니다. 모든 배열은 Cloneable 인터페이스를 구현하는 것으로 간주됩니다. 여기서 Cloneable 인터페이스는 Object 클래스에서 구현되지 않습니다. 따라서 객체에 대해 clone 메소드를 호출하면 런타임 오류가 발생합니다.

Java에서 객체 복제 작업

이제 데모를 통해 clone() 메소드의 작동을 이해해 보겠습니다.

코드:

class obj_clone implements Cloneable{
int phone_code;
String f_name;
obj_clone(int phone_code,String f_name){
this.phone_code=phone_code;
this.f_name=f_name;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public static void main(String args[]){
try{
obj_clone s1=new obj_clone(99,"sulaksh");
obj_clone s2=(obj_clone)s1.clone();
System.out.println(s1.phone_code+" "+s1.f_name);
System.out.println(s2.phone_code+" "+s2.f_name);
}catch(CloneNotSupportedException c){}
}
}

코드 설명: 보시다시피 클래스를 초기화하고 복제 가능을 구현했습니다. 여기서는 실제 클래스가 객체에 clone()을 사용하여 복제 가능 항목을 구현하는지 확인한 후 복사본 생성을 진행합니다. 그런 다음 정수 데이터 유형의 두 변수 전화번호와 문자열 데이터 유형의 이름이 있습니다. 그런 다음 .this 키워드가 있는 변수와 함께 obj_clone 클래스의 생성자를 만들었습니다. 보시다시피, 앞서 논의한 clone() 메서드와 CloneNotSupportedException 예외가 있는 개체가 있습니다. 게다가 여기서 super.clone()은 나중에 발견한 CloneNotSupportedException 오류를 발생시킬 수도 있습니다.

그런 다음 메인 클래스가 있고 그 안에 있는 모든 것에 try-catch를 사용했습니다. 그런 다음 클래스의 객체를 s1 및 s2로 만들었습니다. 첫 번째 개체인 s1에 대한 두 매개 변수를 모두 전달한 다음 s1을 s2에 복제하는 clone() 메서드를 구현했습니다. 마지막으로 두 개의 출력 print 문이 있습니다. try 블록에는 앞에서 설명한 예외를 제외하고 catch 블록이 있습니다. 예제의 8번째 줄에서는 구문 부분에서 언급하고 설명한 대로 clone()을 구현했습니다. 실행 시 위 프로그램은 "99sulaksh 99sulaksh"로 출력됩니다. 출력은 아래 첨부된 스크린샷을 참조하세요.

출력:

Java의 객체 복제

Java의 객체 복제 유형

이제 객체 복제가 무엇인지, 어떻게 수행되는지 이해했으므로 Java가 지원하는 복제 유형이 무엇인지 이해하겠습니다.

  • 얕은 복제: 기본 복제 방법이 구현될 때마다 얕은 복제가 발생합니다. 얕은 복제는 단순히 개체의 모든 필드를 새 인스턴스에 복사합니다. 얕은 복제는 clone()에서 지원됩니다.
  • Deep Cloning: 이제 기본 클로닝 방법을 구현하지 않을 때마다 Deep Cloning을 실행하고 있습니다. Deep Cloning은 우리의 필요에 따라 작동합니다. 여기서 가장 큰 차이점은 Deep Cloning은 객체의 값과 함께 모든 필드를 복사하는 반면 Shallow Cloning은 필드만 복사한다는 것입니다.
  • 지연 복제: Java에서 지원되는 세 번째 유형의 복제가 있는데, 이는 위에서 언급한 두 가지 유형의 복제를 결합한 것입니다. 이는 지연 복제로 알려져 있습니다. 그리고 언제 어떤 복제 유형을 사용해야 하는지에 대한 구체적인 규칙은 없습니다. 필요에 따라 결정하는 것은 우리의 몫입니다.

객체 복제의 장점과 단점

이제 객체 복제의 장점과 단점을 알아보겠습니다.

장점

모든 방법, 모든 방법에는 고유한 한계와 기능이 있다는 점을 이해하면 다음과 같은 Cloning의 장점을 알 수 있습니다.

  • 복제는 시간을 절약해 주는 방법이므로 시간과 작업이 절약됩니다. 똑같은 긴 코드를 작성할 필요가 없습니다.
  • 이미 개발된 프로젝트를 구현할 때 개체를 복사하는 가장 효율적인 방법은 복제입니다.
  • Clone()을 사용하여 배열을 복사하는 가장 빠른 방법이 있습니다.

단점

앞서 언급한 것처럼 모든 메소드에는 한계와 기능이 있습니다. 이제 Clone()의 단점을 살펴보겠습니다.

  • JVM이 clone()을 사용할 것임을 이해하려면 이 복제 가능한 인터페이스에 메서드가 없더라도 Cloneable 인터페이스를 구현해야 합니다.
  • 심층 복제의 경우 기본적으로 얕은 복제를 지원하는 object.clone()을 재정의해야 합니다.
  • clone()이 생성자를 호출하지 않으므로 객체 생성을 제어할 수 없습니다.
  • 기본적으로 object.clone()을 구현하려면 Cloneable 인터페이스 구현부터 시작하여 clone() 메서드 정의를 CloneNotSupportedException 처리 등으로 변경해야 합니다.

clone() 또는 다른 방법의 장점과 단점을 올바르게 이해하면 이러한 훌륭한 방법과 기능을 구현하는 것이 프로그래머에게 큰 도움이 될 수 있습니다.

결론

clone()이 무엇인지, 그 기능과 용도를 이해했습니다. 지연 복제와 함께 깊은 복제와 얕은 복제의 차이점 얕은 복제는 필드만 복사하는 반면, 심층 복제는 필드와 값을 복사하여 필요에 따라 구현할 수 있습니다. Lazy Copy는 이 두 가지를 모두 결합한 것입니다. 클론()의 장점과 단점도 이해했습니다.

위 내용은 Java의 객체 복제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.