메소드의 파라미터는 base 타입으로 지정되는게 좋습니다.

 

재사용성을 높이기 위해 메서드는 가능한 한 구체적이지 않은 매개 변수를 허용해야 합니다. 따라서 특정 기능 구현 요구가 덜한, 클래스 계층상의 상위에 있는 타입을 대신 사용하는 것이 좋습니다.

규칙을 어긴 코드

public void printSize(ArrayList<Object> list) {  // Collection 을 사용하는 것이 더 낫습니다
    System.out.println(list.size());
}

public static void loop(List<Object> list) { // java.lang.Iterable 을 사용하는 것이 더 낫습니다
   for (Object o : list) {
     o.toString();
  }
}

규칙을 준수한 해결책

public void printSize(Collection<?> list) {
    System.out.println(list.size());
}

public static void loop(Iterable<?> list) {
   for (Object o : list) {
     o.toString();
  }
}

예외

public 메소드가 아닌 파라미터들에는 이 규칙이 적용되지 않습니다. 왜냐하면 이러한 메소드는 일반적으로 재사용성이 낮은 경우가 많기 때문입니다. 또한 immutable인 java.lang.String는 더 이상 generic한 대체재가 없기 때문에 예외 처리됩니다. 더불어 메소드 호출이 아닌 다른 컨텍스트에서 사용되거나 loop에 대해 enhance된 파라미터도 예외 처리됩니다.


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project