티스토리 뷰

JAVA

Clone() 클론 함수.

JSvsJS 2018. 12. 26. 22:27

clone() is a method in the Java programming language for object duplication. In java, objects are manipulated through reference variables, and there is no operator for copying an object—the assignment operator duplicates the reference, not the object. The clone() method provides this missing functionality.


Clone 은 객체 복제를 위해 제공하는 자바 프로그래밍 함수다. 자바에서는 객체변수로 접근 또는 조작할 수 있다.


1. Shallow Copy

 - Method : 레퍼런스지정


2. Deep Copy

 - Method : clone()


3. Copy 형태

 - primitive type : data duplicate(데이터 복제)

   => 데이터 복제를 통해 원데이터의 복제본을 제공

 - Object type : reference duplicate(레퍼런스 복제) => Deep Copy 필요이유

    => 레페런스 복제를 통해 원데이터의 레퍼런스 복제를 제공하고, 원데이터는 공유한다.


 - 소스코드 예시

가. ShallowCopy vs DeepCopy 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Foo {
  
  public Bar myBar;
  
  public Foo() {
      myBar = new Bar();
  }
  
  public Foo shallowCopy() {
      
    Foo newFoo = new Foo();
    newFoo.myBar = myBar;
    return newFoo;
    
  }
 
  public Foo deepCopy() {
      
    Foo newFoo = new Foo();
    newFoo.myBar = (Bar) myBar.clone(); 
    return newFoo;
    
  }
}
cs


나. Deep Copy 

public class Bar implements Cloneable{
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}


다. TEST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class CloneCopy {
    public static void main(String args[]) {
 
        Foo myFoo = new Foo();
 
        Foo sFoo = myFoo.shallowCopy();
        Foo dFoo = myFoo.deepCopy();
 
        System.out.println(myFoo.myBar == sFoo.myBar);
        System.out.println(myFoo.myBar.equals(sFoo.myBar));
        System.out.println(myFoo.myBar == dFoo.myBar);
        System.out.println(myFoo.myBar.equals(dFoo.myBar));
 
    }
}
 
cs

결과

true true false false






'JAVA' 카테고리의 다른 글

ThreadLocal 은 언제써야할까??  (0) 2018.12.20
MultiThread 멀티스레드  (0) 2018.12.18
Model-View-Controller(MVC) Pattern  (0) 2018.12.16
이벤트버스 패턴  (0) 2018.12.07
브로커 패턴  (0) 2018.12.03
댓글