[Effective Java] 제네릭 메소드를 애용하자. |
-
클래스를 제네릭화 하듯 메소드 또한 제네릭화 하면 좋다.
특히 static 유틸리티 메소드가 제네릭화의 좋은 후보이다.
제네릭 메소드는 제네릭 타입과 유사한 방법으로 작성한다.
-
타입 매개변수를 메소드 선언부에 추가한 후 그 타입 매개변수를 메소드 내부에서 사용하면 된다.
타입 매개변수를 선언하는 타입 매개변수 목록은 return 타입 앞에 둔다.
-
바운드 와일드 카드 타입 ( bounded wildcard types ) 를 사용하면 그 메소드를 더 유연하게 만들 수 있다.
-
제네릭 메소드는 제네릭 생성자를 호출할 때 반드시 지정해야 하는 타입 매개변수 값을 명시적으로 지정할 필요가 없다.
컴파일러가 메소드 인자의 타입을 조사하여 타입 매개변수 값을 찾기 때문이다.
이를 타입 추론 ( type inference ) 라고 한다.
타입 추론을 이용하면, 매개변수화 타입의 인스턴스 생성 과정을 간편하게 할 수 있다. ( 1.6 배포판까지는 지원 안되지만.. )
-
재귀적 타입 바운드 ( recursive type bound ) 는 타입 매개변수가 자신을 포함하는 수식에 의해 한정되는 것을 말한다.
잘 사용되지는 않지만 경우에 따라 유용할 수 있다.
대표적 예는 Comparable interface 이다.
public interface Comparable<T>{
int compareTo( T o );
}
아래와 같이 사용될 수 있다.
public static <T extends Comparable<T>> T max( List<T> list ) { ... }
Summary
메소드 인자와 반환 값을 클라이언트에서 캐스팅해야 하는 메소드에 비해 제네릭 메소드는 안전하고 쓰기 쉽다.
가능하면 기존 메소드들을 제네릭화 하자.
그럼 기존 클라이언트 코드에 영향을 주지 않고 더 쉽고, 유연하게 사용할 수 있을 것이다.
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] int 상수 대신 enum 을 사용하자. (0) | 2016.12.19 |
---|---|
[Effective Java] 바운드 와일드 카드를 사용해서 API 의 유연성을 높이자. (0) | 2016.12.05 |
[Effective Java] 제네릭 타입을 애용하자. (0) | 2016.11.29 |
[Effective Java] 배열보다는 List 를 사용하자. (0) | 2016.11.28 |
[Effective Java] 컴파일 경고 메세지가 없게 하자. (0) | 2016.11.24 |
댓글