Java의 복제와 유형은 무엇입니까?



Java의 복제에 대한이 기사에서는 복제 프로세스와 Java에서 지원하는 다양한 복제 유형에 대한 자세한 정보를 제공합니다.

프로그래밍하는 동안 종종 전체 코드를 재사용해야하는 시나리오를 접하게됩니다. 코드를 다시 작성하면 프로그램이 부피가 커지고 프로그램의 효율성이 저하됩니다. 따라서 Java는 이러한 부담스러운 작업에서 벗어나는 뛰어난 기능을 제공합니다. 이것은 Java에서의 복제로 알려져 있으며이 기사의 매체를 통해 이에 대한 완전한 통찰력을 제공 할 것입니다.

다음은이 기사에서 논의 할 주제입니다.





Java에서 복제

Java에서 개체 복제는 원본 개체의 정확한 복사본을 만드는 프로세스입니다. 즉, 원본 개체에서 모든 데이터와 특성을 복사하여 새 개체를 만드는 방법입니다. 이것은의 clone () 메서드를 구현해야만 가능합니다. java.lang.Object 수업. 복제 방법은 개체의 정확한 복사본을 만듭니다.필드 별 할당 순서로 호출되고 새 개체 참조를 반환합니다. . 기억해야 할 한 가지는 Java에서 마커 인터페이스 인 복제 인터페이스를 구현하는 객체는 clone ()을 사용할 수 있습니다.

이제 Java에서 복제가 무엇인지 알게되었으므로이 기능을 사용하여 얻을 수있는 다양한 이점을 살펴 보겠습니다.



Java 복제의 장점

아래에 Java에서 복제를 사용하는 가장 흥미로운 기능 몇 가지를 나열했습니다.

  • 코드 줄을 줄이는 데 도움이됩니다.
  • 가장 효과적이고 효율적인 복사 방법사물.
  • 또한 clone ()은 배열을 복사하는 가장 빠른 방법으로 간주됩니다.

참고 : 복제를 사용하면 일부 디자인 문제가 발생할 수 있지만 적절한 전략적인 방식으로 사용하면 이점을 얻을 수 있습니다.

Java의 복제 유형

Java에서 복제를 그룹화 할 수 있습니다.두 가지 범주로 :



Java 용 Eclipse 설정 방법
  1. 얕은 복제
  2. 딥 클로닝

하나씩 이해합시다.

얕은 복제

Java에서는 clone () 메서드를 호출하여 복제 프로세스를 수행 할 때 Shallow Cloning이라고합니다. 원본 개체의 얕은 복사본이 정확한 필드로 생성되는 Java의 기본 복제 프로세스입니다. 원본 개체에 필드로 다른 개체에 대한 참조가있는 경우 새 개체 생성 대신 해당 개체의 참조 만 복제됩니다. 즉, 복제 된 개체의 값을 변경하면 원본에도 반영됩니다. 따라서 얕은 복제는 원본 개체에 따라 다릅니다.

얕은 복사-Java로 복제-Edureka아래에서 동일한 예를 들었습니다.

package edureka class EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} class EduLearner는 Cloneable을 구현합니다 {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // 기본 버전 clone () 메서드 protected Object clone () throws CloneNotSupportedException {return super .clone ()}} public class ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ( 'Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// learner1의 복제본을 만들어 learner2에 할당하기 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Learner1의 세부 정보 인쇄 System.out.p rintln ( '학습자 2 세부 정보 :') System.out.println ( 'Id :'+ learner1.eduId) System.out.println ( 'Name :'+ learner1.learnerName) System.out.println ( '과정 ID : '+ learner1.eduCourse) //'learner1 '의 모든 과정 인쇄 System.out.println ('Courses of Learner 1 : ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Learner2 세부 정보 인쇄 System.out.println ( 'Learner 2 :') System.out.println ( 'Id :'+ learner2.eduId ) System.out.println ( 'Name :'+ learner2.learnerName) System.out.println ( 'Course Id :'+ learner2.eduCourse) // 'learner2'의 모든 과정 인쇄 System.out.println ( 'Courses of Learner 2 : ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) //'learner2의 코스 3 변경 'learner2.eduCourse.course3 ='JSP '//이 변경 사항은 원래'learner1 '에 반영됩니다 System.out.println (' 학습자 2 : ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

산출:

학습자 2 : ID : 2811 이름 : 최대 과정 ID : EduCourse @ 15db9742 학습자 과정 1 : Java Spring Microservices 학습자 2 : Id : 2811 이름 : 최대 과정 ID : EduCourse @ 15db9742 학습자 과정 2 : Java Spring Microservices 학습자 2 : Java Spring JSP의 업데이트 된 과정

자바의 딥 클로닝

Java에서는 Cloneable 인터페이스를 구현하여 복제 프로세스를 수행 할 때 Deep Cloning이라고합니다. 이 유형의 복제에서는 원본 개체의 모든 필드에 대한 정확한 복사본이 만들어집니다. 그러나 원본 객체가 다른 객체에 대한 참조를 필드로 가지고있는 경우 해당 객체의 복사본도 clone () 메서드를 호출하여 생성됩니다. 이렇게하면 복제 된 오브젝트가 원본 오브젝트와 독립적이고 오브젝트의 변경 사항이 다른 오브젝트에 반영되지 않습니다.

아래에서 동일한 예를 들었습니다.

package edureka class EduCourse는 Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3)을 구현합니다. {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protected Object clone () throws CloneNotSupportedException { return super.clone ()}} class EduLearner는 Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} //를 구현합니다. 개체 보호 개체의 전체 복사본을 만들기 위해 clone () 메서드를 재정의하면 개체 clone ()에서 CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} public class가 발생합니다. DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ( 'Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// learner1의 복제본을 만들어 learner2에 할당 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Learner1의 세부 정보 인쇄 System.out. println ( '학습자 2 세부 정보 :') System.out.println ( 'Id :'+ learner1.eduId) System.out.println ( 'Name :'+ learner1.learnerName) System.out.println ( '과정 ID : '+ learner1.eduCourse) //'learner1 '의 모든 과정 인쇄 System.out.println ('Courses of Learner 1 : ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Learner2 세부 정보 인쇄 System.out.println ( 'Learner 2 :') System.out.println ( 'Id :'+ learner2.eduId ) System.out.println ( 'Name :'+ learner2.learnerName) System.out.println ( 'Course Id :'+ learner2.eduCourse) // 'learner2'의 모든 과정 인쇄 System.out.println ( 'Courses of Learner 2 : ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // 'learner2'의 course3 변경 learner2.eduCourse.course3 = 'JSP'//이 변경 사항은 원래 '에 반영되지 않습니다. learner1 'System.out.println ('학습자 과정 1 : ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // learner2의 업데이트 된 과정 System.out.println ( '학습자 2 :') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

산출:

학습자 2의 세부 정보 : ID : 2811 이름 : 최대 과정 ID : edureka.EduCourse@15db9742 학습자 과정 1 : Java Spring Microservices 학습자 2 : Id : 2811 이름 : 최대 과정 ID : edureka.EduCourse@6d06d69c 학습자 2의 과정 : Java Spring Microservices 학습자 과정 1 : Java Spring Microservices 학습자 2 : Java Spring JSP

이것으로 Java에서 복제에 대한이 기사의 끝으로 이동합니다. Java에 대한 자세한 내용은 다음을 참조하십시오. .

이제 Java에서 복제가 무엇인지 이해 했으므로 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 '자바로 복제'기사의 주석 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.