자바를 사용하다보면 System.arraycopy 를 사용하는 곳을 심심치않게 볼 수 있다. 유틸 클래스던 라이브러리던. 뭐 일을 하면서는 실제로 사용할일은 거의 없는듯 하다. 결국 배열을 복사해주는 놈인데 for문을 직접 이용해서 복사해넣는것과 무엇이 빠를까?
1. System.arraycopy vs Array hardcopy
역시나 찾아보니 System.arraycopy는 native 코드를 호출해서 사용해서 그런지 훨씬 더 빠른 결과가 나온다고 한다. https://stackoverflow.com/questions/18638743/is-it-better-to-use-system-arraycopy-than-a-for-loop-for-copying-arrays
직접 실험해보진 않았지만 내용만으로도 2배 이상 차이가 난다고 한다.
2. System.arraycopy vs Arrays.copyOf
Arrays.copyOf는 System.arraycopy를 래핑한 함수일뿐이다. 동일하다는 뜻이다.
System.arraycopy == Arrays.copyOf
public static int[] copyOf(int[] original, int newLength) {
int[] copy = new int[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
왠만하면 배열복사를 for문으로 하지는 말고 System.arraycopy나 Arrays.copyOf를 이용하면 될텐데, copyOf가 간편하며 직관적이라 좋다. 전체 길이를 전부 복사하거나, 복사 대상의 객체를 유지하지 않아도 된다면 copyOf를 사용하자.
복사하는 길이를 명시해야하거나, 객체를 유지해야 한다면 System.arraycopy를 사용해주면 되겠다.
'dev' 카테고리의 다른 글
git 저장소 이동(bitbucket to github) (0) | 2019.07.20 |
---|---|
git에서 amend와 signed off는 무슨 옵션일까? (0) | 2019.07.20 |
atom 안 열릴 때 ( atom not opening ) (0) | 2019.07.12 |
개발자는 공부할 것도 산더미. (0) | 2019.07.05 |
톰캣 로그 언어 영어로 바꾸기(이클립스) - tomcat language change (2) | 2019.06.15 |
UTF8과 UTF16의 차이 (0) | 2019.05.07 |
ios 앱 버전 체크(애플) (0) | 2019.03.23 |
빅 엔디안 vs 리틀 엔디안 (0) | 2019.03.23 |