Java System.arraycopy() 배열 복사

dropKick·2020년 6월 1일
0

Deep Java See

목록 보기
3/21

자바 배열 복사

배열 복사를 쉽게 해보자

for-loop 복사

for(int i = 0; i <= arr.length - 1; i++) {
	newArr[i] = arr[i];
}

특징

  • 매 루프마다 배열을 호출하고 복사해서 메모리와 시간이 불필요하게 낭비
  • 특정 인덱스 지정 불가

System.arraycopy() 복사

if (endIdx + 1 - startIdx >= 0) {
	System.arraycopy(arr, startIdx, newArr, startIdx, endIdx + 1 - startIdx)
}

원본

  • public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
    원본 배열, 시작점, 사본 배열, 시작점, 길이 5개 인자로 구성

특징

  • JNI에서 제공해주는 메소드로 최적화 되어있음
  • 타입에 대한 변환이 자유로움
  • 특정 인덱스 지정 가능
  • 코드 가독성 향상

결론

자바는 자체적인 System.arraycopy 메서드를 JNI(Java Native Interface)에 포함해서 효율적인 배열 복사 기능을 지원한다.
아울러 배열에서 리스트로 변경을 위한 Arrays.asList메서드도 제공한다.
이 두 메서드는 공통적으로 앞에서 나열한 방식에서 발생할 수 있는 불필요한 인스턴스 생성을 방지해 메모리 자원 낭비를 막고, 더 빠른 실행 속도를 보장한다는 장점이 있다.
가독성 측면에서도 단 한 줄의 소스코드로 배열을 복사할 수 있어 더욱 효율적이다.
(출처 : https://wikibook.co.kr/article/java-coding-with-pmd-usearraysaslist/)

0개의 댓글