주요 배열 복사 메서드
Java에서 배열을 복사하는 주요 메서드들을 간단히 정리하면 다음과 같습니다.
1. Object.clone()
int[] original = {1, 2, 3, 4, 5};
int[] copy = original.clone();
- 배열 전체를 깊은 복사하는 가장 보편적인 방법
- 새로운 메모리 공간에 값을 복사하므로 원본과 독립적
2. Arrays.copyOf()
int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(original, original.length);
- 배열을 처음부터 지정한 길이만큼 복사
- 길이가 원본보다 크면 나머지는 0으로 채워짐
- Arrays.copyOf() 범위 초과 예시
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5); // 길이 5로 복사
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]
3. Arrays.copyOfRange()
int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(original, 1, 4); // [2, 3, 4]
- 배열의 특정 범위를 복사
from
은 포함,to
는 제외- 범위를 넘어서면 0으로 채워짐
- Arrays.copyOfRange() 범위 초과 예시
int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(original, 2, 8); // 인덱스 2부터 8까지
System.out.println(Arrays.toString(copy)); // [3, 4, 5, 0, 0, 0]
4. System.arraycopy()
int[] original = {1, 2, 3, 4, 5};
int[] copy = new int[original.length];
System.arraycopy(original, 0, copy, 0, original.length);
- 가장 빠른 성능을 제공하는 메서드
- 기존 배열에 덮어쓰기 방식으로 복사
- 매개변수:
(원본배열, 원본시작위치, 대상배열, 대상시작위치, 복사길이)
성능 비교
System.arraycopy() > Arrays.copyOf() > Object.clone() 순으로 성능이 좋습니다.
복사 방식
- 깊은 복사: 새로운 메모리 공간에 값을 복사 (위 모든 메서드)
- 얕은 복사: 주소값만 복사 (
int[] copy = original;
)
참조 자료형 배열의 경우 요소 객체까지 복사하려면 각 요소에 대해 별도로 clone() 처리가 필요합니다.
'Backend > Java' 카테고리의 다른 글
[Java] replace()와 replaceAll()의 차이점 (0) | 2025.07.22 |
---|---|
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리 (0) | 2025.07.16 |
[Java, String] split() 메서드 정리 - 문자열 자르기 (0) | 2025.07.13 |
[Java, Stack] 왜 Stack이 아닌 Deque로 스택을 구현해야 할까? (1) | 2025.07.10 |
[Java] StringTokenizer 란? (0) | 2025.07.10 |