
Shallow Copy (얕은 복사)
배열을 복사하는 방법에는 Shallow Copy와 Deep Copy가 있는데
먼저 Shallow Copy에 대해서 알아 보았다.
- 얕은 복사라고도 불리며 원본 객체와 복사한 객체는 메모리에서 같은 배열을 가르키게 된다
- 복사본을 변경할 경우 당연히 원본도 변경

얕은 복사를 하는 방법
public class Array_Copy{
public static void main(String[] args) {
int[] original = { 2, 5, 10, 15, 1557, 31, 488 };
int[] copied = original;
}
}
Deep Copy (깊은 복사)
- 원본의 전체 배열을 복사해서 메모리의 다른 위치에 지정한 후 복사한 객체에 할당한다.
- 원본 객체와 복사본 객체는 메모리에서 서로 다른 위치에 있는 배열을 할당하고 있기 때문에 서로의 변화에 영향을 받지 않는다.

깊은 복사를 하는 방법
1. System 클래스
public class Array_Copy{
public static void main(String[] args) {
int[] original = { 1, 5, 5, 7 };
int[] copied = new int[original.length];
System.arraycopy(original, 0, copied, 0, original.length);
}
}
System의 arraycopy를 사용할 경우 (원본, 복사하려는 원본의 시작 index, 복사본, 복사본의 시작 index, 복사하는 element의 개수)
2. Arrays 클래스 (copyOf)
public class Array_Copy{
public static void main(String[] args) {
int[] original = { 1, 5, 5, 7 };
int[] copied = Arrays.copyOf(original, original.length);
}
}
parameter 값으로 원본과 원본의 길이
3. Arrays 클래스 (copyOfRange)
public class Array_Copy{
public static void main(String[] args) {
int[] original = { 1, 5, 5, 7 };
int[] copied = Arrays.copyOfRange(original, 1, 2);
}
}
parameter 값으로 원본의 시작 지점과 끝지점을 선택 가능
4. Object 클래스의 clone 사용
public class Array_Copy{
public static void main(String[] args) {
int[] original = { 1, 5, 5, 7 };
int[] copied = original.clone();
}
}
clone()을 사용할때의 주의할점은 기본형만 깊은 복사가 가능하고 참조형은 얕은복사를 한다
5. Stream API 사용
public class Array_Copy{
public static void main(String[] args) {
String[] original = {"orange", "red", "green'"};
String[] copied = Arrays.stream(original).toArray(String[]::new);
}
}
스트림 API를 사용할때의 주의할 점은 clone과 반대로 참조형을 사용할때 깊은 복사를 하지만 기본형을 사용할땐 얕은 복사를 한다는 점이다. 그래서 여태 int 배열을 예시로 사용하다가 여기선 String 배열을 예시로 사용하였다.
'Programming Languages > Java' 카테고리의 다른 글
[Java] - 오토박싱, 언박싱 (Autoboxing and Unboxing) (0) | 2021.12.29 |
---|---|
[Java] - 쓰레드(Thread)의 사용 (0) | 2021.05.22 |
[Java] - 싱글턴 패턴 (Singleton Pattern) (0) | 2021.04.15 |
[Java] - JDBC를 사용하여 데이터베이스 연결 (오라클db) (0) | 2021.04.05 |
[자바/Java] - 문자열 (String) (0) | 2021.03.24 |