본문 바로가기
CS 지식 && 백엔드 기술

배열 복사 - Arrays.copyOfRange() 와 Arrays.copyOf()

by Won's log 2024. 4. 9.

Arrays.copyOf()와 Arrays.copyOfRange()은 둘 다 배열을 복사하여 새로운 배열을 생성하는 데 사용됩니다.

그러나 두 메서드 간에는 몇 가지 중요한 차이점이 있습니다.

Arrays.copyOf()

public static int[] copyOf(int[] original, int newLength)


- original: 복사할 원본 배열입니다.
- newLength: 새로운 배열의 길이를 지정합니다.

`Arrays.copyOf()` 메서드는 원본 배열의 일부가 아닌 전체를 복사하여 새로운 배열을 생성합니다.

이때, `newLength` 매개변수는 생성될 배열의 새로운 길이를 지정합니다. 만약 `newLength`가 원본 배열의 길이보다 크다면, 추가된 요소는 해당 데이터 타입의 기본값으로 채워집니다(예: `0` 또는 `null`).

int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(originalArray, 3); // {1, 2, 3}


`Arrays.copyOfRange()`

public static int[] copyOfRange(int[] original, int from, int to)


- original: 복사할 원본 배열입니다.
- from: 복사를 시작할 인덱스(포함됨).
- to: 복사를 종료할 인덱스(포함되지 않음).

`Arrays.copyOfRange()` 메서드는 원본 배열의 일부를 복사하여 새로운 배열을 생성합니다. 

`from`부터 `to - 1`까지의 요소가 새 배열에 복사됩니다. 반환된 배열의 길이는 `(to - from)`와 같습니다.

int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOfRange(originalArray, 1, 4); // {2, 3, 4}

 


비교해 보기
복사 범위: `copyOf()`는 배열의 전체를 복사하는 반면, `copyOfRange()`는 지정된 범위만큼의 일부를 복사합니다.
- 반환 배열의 길이: `copyOf()`에서는 새 배열의 길이를 직접 지정할 수 있지만, `copyOfRange()`에서는 복사된 범위에 따라 길이가 결정됩니다.
- 요소 값 초기화: `copyOf()`에서는 새 배열이 원본 배열보다 길이가 큰 경우 추가된 요소가 기본값으로 초기화됩니다. 그러나 `copyOfRange()`에서는 범위 내의 원본 배열 요소만을 복사하므로 초기화 과정이 필요하지 않습니다.

때문에 두 메서드는 각각 다른 상황에 사용될 수 있으며, 필요에 따라 적절히 선택하여 사용하면 될 것 같습니다 :)

'CS 지식 && 백엔드 기술' 카테고리의 다른 글

TCP/IP 프로토콜  (0) 2023.10.17
OSI 7계층  (1) 2023.10.17
DDD (Domain-Driven Design)  (0) 2023.10.17
CS) 프레임워크와 라이브러리의 차이  (0) 2023.10.16
CS) 동기와 비동기의 차이  (0) 2023.10.16