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를 사용해 만들 수 있다.

그렇지만 해당 챕터에서는 공부를 위해 직접 작성하고자 한다.

항등함수 객체는 상태가 없으니 요청할 때마다 새로 생성해서는 안 된다.

다행히 자바의 제네릭은 소거 방식을 사용하고 있어 제네릭 싱글턴 하나로 충분히 표현 가능하다.