loop를 사용해서 배열이나 배열의 하위 집합을 복사하는 행위는 코드 낭비입니다.
전체 배열을 다른 배열로 복사하고 싶다면 Arrays.copyOf
를 사용하세요.
배열의 하위 집합을 다른 배열로 복사하고 싶다면 System.arraycopy
을 사용하세요.
배열을 새로운 List로 만들고 싶다면 Arrays.asList
를 사용하세요.
단 Arrays.asList
는 원래 배열에 Collections 래퍼를 배치할 뿐이므로, 고정되지 않은 크기의 List로 만들고 싶다면 몇개의 추가적인 작업이 요구될 수 있습니다.
규칙을 어긴 코드
public void makeCopies(String[] source) {
this.array = new String[source.length];
this.list = new ArrayList(source.length);
for (int i = 0; i < source.length; i++) {
this.array[i] = source[i]; // 규칙을 어긴 코드
}
for (String s : source) {
this.list.add(s); // 규칙을 어긴 코드
}
}
규칙을 준수한 해결책
public void makeCopies(String[] source) {
this.array = Arrays.copyOf(source, source.length);
Collections.addAll(this.list, source);
}
예외
이 규칙은 관용적인 패턴만을 감지합니다. 따라서 일반적이지 않은 제어 흐름이 있는 loop라면 규칙이 동작하지 않습니다. 예를 들면 조건부로 배열을 복사하는 로직은 규칙 적용 대상이 아닙니다.
public int[] getCopy(int[] source) {
int[] dest = new int[source.length];
for (int i = 0; i < source.length; i++) {
if (source[i] > 10) {
dest[i] = source[i]; // 규칙을 준수한 해결책
}
}
return dest;
}
If you like SONARKUBE, don’t forget to give me a star.