goal
clone() 메서드에 대해서 이해한다.
1] clone() 메소드
- clone()메소드는 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 반환한다.
- 하지만, Object클래스의 clone()메소드는 단지 필드의 값만을 복사하므로, 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다.
- 따라서 이러한 경우에는 해당 클래스에서 clone() 메소드를 오버 라이딩하여, 복제가 제대로 이루어지도록 재정의한다.
1. 예제 코드
package first_package;
import java.lang.Cloneable;
import java.util.ArrayList;
class Car implements Cloneable{
private String modelName;
private ArrayList<String> owners = new ArrayList<String>();
public String getModelName() {return this.modelName;}
public void setModelName(String modelName) {this.modelName = modelName;}
public ArrayList getOwners() {return this.owners;}
public void setOwners(String ownerName) {this.owners.add(ownerName);}
public Object clone() {
try {
Car clonedCar = (Car)super.clone();
//clonedCar.owners = (ArrayList)owners.clone();
return clonedCar;
} catch(CloneNotSupportedException ex) {
ex.printStackTrace();
return null;
}
}
}
public class clonePractice {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car01 = new Car();
car01.setOwners("홍길동");
car01.setModelName("아반떼");
System.out.println(car01.getModelName() + car01.getOwners());
Car car02 = (Car)car01.clone();
car02.setOwners("이순신");
System.out.println("car01 객체 : " + car01.getModelName() + car01.getOwners());
System.out.println("car02 객체 : " + car02.getModelName() + car02.getOwners());
}
}
2. 텍스트로 보는 클래스 가시화
- 내 맘대로 알아보기 위한 가시화
- 추후에 UML에 대해서 포스팅할 예정 (UML과 전혀 관계없다. 내 맘대로 가시화 했을 뿐...)
클래스명 | 상속관계 | 변수(멤버변수) |
메소드 |
clonePractice | Car01 : Car Car02 : Car |
||
Car | interface :: Cloneable | -modelName: String -owners: ArrayList<string> |
+getModelName() : String +setModelName(modelName: String): void +getOwners(): ArrayList +setOwners(ownerName: String): void +clone(): Object .... overriding |
3. 출력 결과
- 19번째 라인이 주석인 경우 :
-
- 19번째 라인의 주석을 풀 경우 :
-
4. 설명
'Java > java' 카테고리의 다른 글
java :) generic method (0) | 2022.03.14 |
---|---|
java :) generic class의 이해 (0) | 2022.03.13 |
java :) interface (0) | 2022.03.13 |
java :) 20220311 java 복습 (0) | 2022.03.11 |
java :) 참조변수 캐스팅이 안 되는 경우 (0) | 2022.03.09 |