배열 복사 메서드
System.arrayCopy(src, srcPos, dest, destPos, length)
Object src : 원본 소스
int srcPos : 원본 소스에서 복사를 시작할 위치
Object dest : 복사하려는 대상
int destPos : 복사하는 대상에서의 시작할 위치
int length : 얼마만큼 복사할지
e.g.
System.arraycopy(library, 0, copyLibrary, 0, 5);
// library 배열의 0번째 요소부터 복사해서 copyLibrary 배열의 0번째 부터 5개를 붙여넣기
얕은 복사(Shallow Copy)
객체 주소만 복사되어 한쪽 배열의 요소를 수정하면 같이 수정 된다.
즉, 두 배열이 같은 객체를 가리킨다
public class AquariumCopyTest {
public static void main(String[] args) {
Aquarium[] fishTank = new Aquarium[3];
Aquarium[] copyFishTank = new Aquarium[3];
fishTank[0] = new Aquarium("betta", 1);
fishTank[1] = new Aquarium("guppy", 5);
fishTank[2] = new Aquarium("otocinclus", 2);
System.arraycopy(fishTank, 0, copyFishTank, 0, 3);
System.out.println("====copy fish tank====");
for (Aquarium fish : copyFishTank){
fish.showInfo();
}
fishTank[0].setFishName("goldfish");
fishTank[0].setFishCount(3);
System.out.println("====fish tank====");
for(Aquarium fish : fishTank){
fish.showInfo();
}
System.out.println("====copy fish tank====");
for (Aquarium fish : copyFishTank){
fish.showInfo();
}
}
}
깊은 복사(Deep Copy)
각각의 객체를 생성하고
그 객체의 값을 복사하여 배열이 서로 다른 객체를 가리키도록 한다.
public class AquariumCopyTest {
public static void main(String[] args) {
Aquarium[] fishTank = new Aquarium[3];
Aquarium[] copyFishTank = new Aquarium[3];
fishTank[0] = new Aquarium("betta", 1);
fishTank[1] = new Aquarium("guppy", 5);
fishTank[2] = new Aquarium("otocinclus", 2);
// 이렇게 따로 만들어야 한다.
copyFishTank[0] = new Aquarium();
copyFishTank[1] = new Aquarium();
copyFishTank[2] = new Aquarium();
for (int i=0; i<fishTank.length; i++){
copyFishTank[i].setFishName(fishTank[i].getFishName());
copyFishTank[i].setFishCount(fishTank[i].getFishCount());
}
fishTank[0].setFishName("goldfish");
fishTank[0].setFishCount(3);
System.out.println("====fish tank====");
for(Aquarium fish : fishTank){
fish.showInfo();
}
System.out.println("====copy fish tank====");
for (Aquarium fish : copyFishTank){
fish.showInfo();
}
}
}
'Java > Java' 카테고리의 다른 글
Java의 SCE(Short-Circuit Evaluation, 단락 회로 평가) (0) | 2022.07.16 |
---|---|
상속(Java) (0) | 2022.04.27 |
static 제어자 (Java) (0) | 2022.04.25 |
클래스 접근 지정자와 생성자 접근 지정자(java) (0) | 2022.04.20 |
가변 길이 배열 입력매개변수 메서드 (Java) (0) | 2022.04.11 |