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