프로그래밍공부노트

Day 26 - Java(Cloneable) 본문

JAVA

Day 26 - Java(Cloneable)

SANGJIN-YU 2021. 3. 18. 22:37
반응형

 61. 추가설명

   - 객체란 무엇인가?

    기본배열에 관련된 추가 내용

    선언 방법 int[] a = {1,2,3};  / int[] b = new int[3]; / int[]c = new int[] {1,2,3};  

 

  interface와 일반 클래스의 관계

   - interface와 interface는 서로 생성자를 가지고 있지 않기 때문에 구현과 생성의 대상이 아님

   - 따라서 interface는 extends 통해 A_I,B_I와 같이 확정의 개념으로 사용

   - interface와 일반 클래스는 구현의 관계이다. 따라서 일반클래스는 여러개의 interface를 구현의 대상으로 작성 가능

    ex) class implements A_I, B_I, C_I... 가능하다

   - 생성을 하는(자식이 생성되려면 부모가 먼저 생성되어야 한다) 방식에 따라서 부모 클래스는 무조건 한개!!

   - 일반 클래스는 extends를 한개 implements는 여러 개 선언 가능

   - extends 뒤에 implements 

   - class A extends B implements A_I, B_I,...()

   - A는 B의 생성자를 호출하여 객체화함 / A_I, B_I 구현을 강요하는 클래스가 됨

 

 62. Cloneable

    - 모든 클래스의 superClass는 java.lang.Object

    - Object 메소드 중에서 clone 메소드를 통해서 자식의 클래스 중 복제가 가능한 클래스를 구현

    - 자식의 객체가 복사되는 기능은 java.lang.Obejct의 clone()을 override하면 된다.

    - 하지만 자식 클래스가 복제가능한 기능이 없다면 CloneNotSupportException이 발생 

    - 따라서 복제가되는 대상 자식 클래스는 반드시 implements cloneable을 해야 한다. (템플릿 패턴 확장 가능)

 

package com.min.clone;

import java.io.Serializable;

public class Clone_Dto implements Cloneable, Serializable{

	public String name;
	public int age;
	
	@Override
	protected Object clone() throws CloneNotSupportedException  {
		
		return super.clone();
	}
}

 

Clone_Dto는 Object의 clone()을 갖고 있지 않았기 때문에 Cloneable을 implements 하였다.

순서대로 복제되어야 정확히 복제될 수 있기 때문에 Serializable도 implements 해준다.

자식 객체인 clone()을 복제하기 위해 Override를 통하여 복제되는 기능을 사용할 수 있도록 만들었다. 

 

package com.min.clone;

public class CloneUse_Main {

	public static void main(String[] args) throws CloneNotSupportedException {
		
		Clone_Dto cd = new Clone_Dto();
		cd.name = "홍길동";
		cd.age = 100;
		
		System.out.printf("%s / %d\n", cd.name, cd.age);
		
		//첫번째 복사
		Clone_Dto cd_Copy = (Clone_Dto)cd.clone();
		System.out.printf("%s / %d\n", cd_Copy.name, cd_Copy.age);
		
		System.out.println(cd.hashCode());
		System.out.println(cd_Copy.hashCode());
	}
}

값을 넣어주지 않고 객체를 직접 복제하였다.

 

반응형

'JAVA' 카테고리의 다른 글

Day 29 - Java(짝수 마방진)  (0) 2021.03.23
Day 27 - Java(예외 처리 정리, 마방진)  (0) 2021.03.19
Day 24 - JAVA(야구게임)  (0) 2021.03.16
Day 21 - JAVA(JCF, Set, List, Map)  (0) 2021.03.11
Day 20 - JAVA( JCF, SET)  (0) 2021.03.10