프로토 타입 패턴
- 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법(재활용, 프로토 타입)
- clone으로 복제를 해서 사용하면 동일한 작업을 반복하지 않아도 된다.
- 인스턴스를 만들 때 시간이 오래 걸리는 작업 등(데이터베이스를 읽어오거나, 네트워크를 거쳐서 가져온 데이터를 기반으로 데이터를 만든다거나 할때)을 할때 기존 데이터를 가져오거나, 복사를 해서 새로운 인스턴스를 만들고, 우리가 원하는 값만 변경해서 사용할 수 있게 하는 패턴
※ 클론은 새로운 인스턴스 이기 때문에 주소는 다르지만(!=, false), 내용은 같다(Equals, ture)
※ clone : 자바가 기본적으로 제공하는 매커니즘. 얕은 복사.
clone은 object안에 들어가 있으며, public이 아닌 protected이기 때문에 그냥 사용할 수 없다.
※ clone을 지원하고 싶은 메서드가 있다면 implements Cloneble을 해줘야 지원이 가능함.
※ 얕은 복사 & 깊은 복사
- 얕은 복사(Shallow Copy) : 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성
- 깊은 복사(Deep Copy) : 객체를 복사 할 때, 해당 객체와 인스턴스 변수까지 복사하는 방식
프로토 타입 패턴의 장/단점
장점
- 복잡한 객체를 만드는 과정을 숨길 수 있다.
- 기존 객체를 복제하는 과정이 새 인스턴스를 만드는 것보다 비용(시간 또는 메모리)적인 면에서 효율적일 수도 있다.
- 추상적인 타입을 리턴할 수 있다.
단점
- 복제한 객체를 만드는 과정 자체가 복잡할 수 있다.(특히, 순환 참조가 있는 경우)