[Java] Item 30 : 이왕이면 제네릭 메서드로 만들라
Effective Java를 읽고 정리한 정리본입니다.
📌 Item 30 : 이왕이면 제네릭 메서드로 만들라
🫧 제네릭 메서드
제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷하다.
다음 코드는 두 집합의 합 집합을 반환하는 메서드이다.
public static Set union (Set s1, Set s2) {
Set result = new HashSet(s1);
result.addAll(s2);
return result;
}
컴파일은 되지만 타입 안전하지 않다는 메서드에 대한 경고가 발생한다.
메서드 선언에서의 세 집합 (입력 두 개, 반환 하나)의 원소 타입을 타입 매개변수로 명시하고, 메서드 안에서도 이 타입 매개변수만 사용하게 수정하면 된다.
타입 매개변수들을 선언하는 타입 매개변수 목록은 메서드의 제한자와 반환 타입 사이에 온다.
public static <E> Set<E> union (Set<E> s1, Set<E> s2) {
Set<E> result = new HashSet<>(s1);
result.addAll(s2);
return result;
}
🫧 불변 객체의 활용
불변 객체를 여러 타입으로 만들어야 할 때는 어떻게 해야할까?
제네릭은 런타임에 타입 정보가 소거되므로 제네릭을 활용하면 해당 문제를 쉽게 해결할 수 있다.
다만, 제네릭을 사용하기 위해서는 요청한 타입 매개변수에 맞게 매번 그 객체의 타입을 바꿔주는 정적 팩터리를 만들어야 한다.
이러한 패턴을 제네릭 싱글턴 팩터리라 부른다.
🫧 항등함수
항등함수는 자바 라이브러리의 Function.identity를 사용해 만들 수 있다.
그렇지만 해당 챕터에서는 공부를 위해 직접 작성하고자 한다.
항등함수 객체는 상태가 없으니 요청할 때마다 새로 생성해서는 안 된다.
다행히 자바의 제네릭은 소거 방식을 사용하고 있어 제네릭 싱글턴 하나로 충분히 표현 가능하다.