복제(프로그래밍)
Cloning (programming)컴퓨터 과학에서, 복제는 종종 인스턴스 기반 프로그래밍 또는 객체 지향 프로그래밍(OOOP)의 패러다임 아래에서, 물체의 정확한 복사본을 만드는 것을 말한다.
얄팍한부
대부분의 프로그래밍 언어(예외:Ruby), 다음과 같은 원시 유형double,float,int,long, 등은 단순히 컴퓨터의 메모리(통화 스택에 저장) 어딘가에 자신의 가치를 저장한다.간단한 할당을 사용하여 변수의 내용을 다른 할당에 복사할 수 있다.
Java 또는 C++에서 원시 유형 복사:
안쪽에 독창적인 = 42; 안쪽에 베끼다 = 0; 베끼다 = 독창적인; 많은 OOP 프로그래밍 언어(Java, D, ECMAScript 및 C# 포함)는 객체 참조를 사용한다.다른 언어의 포인터와 유사한 객체 참조는 전체 객체를 복사할 필요가 없도록 객체를 주소별로 전달할 수 있도록 한다.
Java의 예: 단순 할당을 사용하여 개체를 "복사"하는 경우:
오브젝트 독창적인 = 새로운 오브젝트(); 오브젝트 베끼다 = 무효의; 베끼다 = 독창적인; // 객체를 복사하지 않고 참조만 복사 개체는 중복되지 않고, '원래'와 '복사'라는 변수는 실제로 같은 개체를 가리키는 것이다.C++에서 등가 코드
오브젝트* 독창적인 = 새로운 오브젝트(); 오브젝트* 베끼다 = NULL; 베끼다 = 독창적인; 복사되는 객체에 대한 포인터이지 객체 자체가 아님을 분명히 한다.
복제
단순히 참조만 하는 것이 아니라 실제로 또 다른 정확한 복제물을 만드는 과정을 복제라고 한다.대부분의 언어에서, 언어나 도서관은 어떤 종류의 복제를 촉진할 수 있다.자바에서는Object클래스는 객체를 복사하고 해당 복사 객체에 대한 참조를 반환하는 메소드를 포함한다.이제 시작이니까.Object클래스, Java에 정의된 모든 클래스는 프로그래머가 사용할 수 있는 클론 방법을 가질 것이다(올바르게 기능하기 위해서는 사용하는 각 레벨에서 오버라이드되어야 한다).
Java에서 개체 복제:
오브젝트 오리지널 오브제 = 새로운 오브젝트(); 오브젝트 카피오브지 = 무효의; 카피오브지 = 오리지널 오브제.복제하다(); // 개체를 복제하고 새 참조를 'copyObj'에 할당 일반적으로 C++ 개체는 원시 유형처럼 동작하므로 C++ 개체를 복사하려면 ''를 사용할 수 있다.=' 연산자.모든 클래스에 기본 할당 운영자가 제공되지만, 운영자 과부하 사용으로 그 효과가 변경될 수 있다.이 기법을 사용할 때 위험이 있다(슬라이싱 참조).슬라이싱을 피하는 방법은 자바와 유사한 솔루션을 구현하는 것이다.clone()클래스 및 포인터를 사용하는 방법(기본 제공되지 않음)clone()방법)
개체 복제의 C++ 예:
오브젝트 오리지널 오브제; 오브젝트 카피오브지(오리지널 오브제); // copyObj라는 원본 Obj의 복사본 생성 포인터를 사용한 객체 복제의 C++ 예(슬라이싱을 방지하기 위한 참조):
오브젝트* 오리지널 오브제 = 새로운 오브젝트; 오브젝트* 카피오브지 = 무효의; 카피오브지 = 새로운 오브젝트(*오리지널 오브제); // originalObj의 복사본을 생성하고 copyObj에 주소를 할당 참조
- ^ Wayback Machine에 2009-07-18 보관된 en.allexperts.com의 Q&A를 참조하십시오.