본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 제네릭 메소드를 애용하자.

by 돼지왕 왕돼지 2016. 12. 1.
반응형

 [Effective Java] 제네릭 메소드를 애용하자.


bounded wildcard types, Comparable, comparable interface, compareTo, Effective JAVA, extends, generic method, Interface, recursive type bound, Return, return 타입 사이, static utility method, static 유틸리티 메소드, type inference, [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


메소드 인자와 반환 값을 클라이언트에서 캐스팅해야 하는 메소드에 비해 제네릭 메소드는 안전하고 쓰기 쉽다.
가능하면 기존 메소드들을 제네릭화 하자.
그럼 기존 클라이언트 코드에 영향을 주지 않고 더 쉽고, 유연하게 사용할 수 있을 것이다.





반응형

댓글