주니어 자바 개발자를 위한 질문(object copy)

박재언·2023년 9월 18일
0
post-thumbnail

복사가 사용되는 이유는 무엇인가요?

  • 객체를 복제하는 이유는 복제된 객체를 가지고 작업을 수행한다면 원본 객체는 아무런 영향을 받지 않기 때는다. 따라서 원본 객체를 안전하게 보호하기 위해 복사를 사용한다.

객체 복사는 어떻게 할 수 있나요?

  • 객체 복사는 얕은 복사와 깊은 복사가 있다. 얕은 복사는 주소 값을 복사하여 기존 데이터를 가져오는 방식이다.
    깊은 복사는 java.lang.Cloneable 인터페이스를 구현하여 clone() 메서드를 재정의 하여 복사를 진행한다. clone()메서드는 예외처리가 필요한 메서드이므로 try-catch를 이용해야한다.

  • 깊은 복사 예제

import java.lang.Cloneable;

class Person implements Cloneable {
	
    public Object clone() throws CloneNotSupportedException { // CloneNotSupportedException는 checked exception 이라 반드시 예외처리
        return super.clone(); // 기본적으로 부모의 clone을 그대로 불러와 반환
    }
}

public class Main {
    public static void main(String[] args) {
   		try {
            Person p = new Person("홍길동", 11);
        	Person p_copy = (Person) p.clone();
        } catch(Exception e) {}
    }

깊은 복사와 얕은 복사의 차이를 말해주세요.

  • 얕은 복사는 주소 값을 복사하는 것이다. 그래서 기본형 타입이 아닌 객체와 같은 참조형 타입의 변수를 얕은 복사한다면 결국 같은 객체를 호출하는 것이기 때문에 복사본이 변경되면 원본도 영향을 받게 된다.
  • 반면 깊은 복사는 원본이 참조하고 있는 데이터 값까지 복사한다. 따라서 깊은 복사에서는 원본과 복사본이 서로 다른 객체를 참조하기 때문에 원본의 변경이 복사본에 영향을 미치지 않는다.

질문 출처: https://medium.com/@xjpp22/top-100-java-interview-questions-for-1-to-3-years-experienced-programmers-63ad74069cb6

0개의 댓글