배열은 loop를 이용해서 복사되어선 안됩니다

 

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. :star2:

원문으로 바로가기

Star This Project