Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
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
Archives
Today
Total
관리 메뉴

우주코딩

Object 클래스와 getClass() 메서드, Object 클래스와 clone() 메서드, shallow copy & deep copy 본문

카테고리 없음

Object 클래스와 getClass() 메서드, Object 클래스와 clone() 메서드, shallow copy & deep copy

우주코딩 2021. 8. 10. 22:30

Object 클래스와 getClass() 메서드

Object 클래스의 getClass() 메서드는 인스턴스의 클래스 정보를 리턴한다.

리턴타입이 클래스이다.

My obj1 = new My();

Class classInfo = obj1.getClass();

이 클래스는 오버라이딩 하지 않는다.

Object 클래스와 clone() 메서드

clone()은 인스턴스를 복제할 때 호출하는 메서드이다.

인스턴스 복제
방법1: 직접 복제한다. 즉 새 객체를 만들어 기존 객체의 값을 저장한다.

static class Score{
String name;
}

Score s1 = new Score("홍길동");
System.out.println(s1);

Score s2 = new Score(s1.name);

// s1과 s2는 서로 다른 인스턴스이다.
System.out.println(s1 == s2);

// s1과 s2에 들어 있는 값은 같다.
System.out.println(s1);
System.out.println(s2);

방법2:
Object에서 상속 받은 clone()을 호출한다.

clone() : 인스턴스 변수와 값을 그대로 복제

제약 조건

  1. clone() 을 오버라이딩하고 public 으로 공개
  2. cloneable 인터페이스 구현 -> 복제 기능을 활성화

Object 의 서브 클래스가 cloneable 인터페이스를 구현하면 복제 기능이 활성화된다. 즉 clone() 메서드를 실행할 수 있다.

cloneable 인터페이스는 메서드가 없다. 클래스의 복제 기능을 활성화시킨다는 표시자로서 역할을 할 뿐이다.

shallow copy & deep copy

Object의 clone()은 해당 객체의 필드 값만 복제한다. 그 인스턴스 변수가 가리키고 있는 객체는 복제하지 않는다.
이런 방식의 복제를 "shallow copy(얕은 복제)"라 부른다.

그 객체의 인스턴스 변수가 가리키고 있는 의존객체까지 복제하는 것을 "deep copy(깊은 복제)"라 부른다.
deep copy는 개발자가 직접 clone() 메서드 안에 deep copy를 수행하는 코드를 작성해야 한다.

deep copy
=> 포함하고 있는 하위 객체에 대한 복제를 수행하려면 다음과 같이 개발자가 직접 하위 객체를 복제하는 코드를 작성해야 한다.

Subclass copy = (Subclass) super.clone();
copy.do = this.do.clone();
return copy;
Comments