본문

[2017.08.22] 15. 복제와 참조

두 객체가 같다는 것은 

1. 객체의 값이 같다는 것 

2. 참조 주소가 같다는 것

으로 나눌 수 있다.


1. 객체의 값이 같다는 것은 'Object Equality''복제'와 관련이 있고

2. 참조 주소가 같다는 것은 'Reference Equality''참조'와 관련이 있다.


그렇다면 기본 개념인 복제참조의 개념부터 먼저 알아보자.



복제는 그림과 같이 독립적인 객체를 생성하는 것이고 원본 파일이 변경되어도 복제 파일에 영향을 미치지 않는다.

참조는 그림과 같이 원본 파일의 내용을 참조하는 링크를 생성하는 것이기 때문에 원본 파일이 변경되면 참조 파일도 함께 변경된다.


이러한 개념을 바탕으로 Object EqualityReference Equality의 개념을 알아보자.



실습

복제와 Object Equality


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
32
33
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("heepie");
        Person p2 = null;
        
        try {
            p2 = (Person) p1.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }    
    }
}
 
class Person implements Cloneable {
    private String name;
 
    public Person (String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
cs



참조와 Reference Equality


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
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("heepie");
        Person p2;
        
        p2 = p1;
        
        System.out.println(p1.getName());
        System.out.println(p2.getName());        
    }
}
 
class Person {
    private String name;
 
    public Person (String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
cs



#복제 #참조 #Object Equality #Reference Equality 

공유

댓글