일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 참조타입
- jar
- DB
- 자바스크립트
- mybatis
- jsp
- 정규화표현식
- extends
- regex
- String
- 형변환
- scope
- 자바
- java
- iBATIS
- for문
- 개선
- Selector
- 자료구조
- JCF
- 알고리즘
- controller
- 환경설정
- jdbc
- JavaScript
- interface
- html
- SQL
- jquery
- Set
- Today
- Total
프로그래밍공부노트
Day 26 - Java(Cloneable) 본문
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 |