NMP-Study / EffectiveJava2022

Effective Java Study 2022
5 stars 0 forks source link

아이템 30. 이왕이면 제네릭 메서드로 만들라 #30

Closed okhee closed 2 years ago

qlqhqo2341 commented 2 years ago

이왕이면 제너릭 메서드로 만들라

아래 메서드를 제너릭으로 만들어보자.

public static Set union(Set s1, Set s2) {
    set result = new hashSet(s1); // 경고!
    result.addAll(s2); // 경고!
    return result;
}

컴파일은 되지만, 위의 두 라인에서 unchecked call 경고가 뜬다.

// 아래와 같이 사용할 수 있다. public static void main(String[] args) { Set guys = Set.of("톰", "딕", "해리"); Set stooges = Set.of("래리" ,"모에", "컬리"); Set aflCio = union(guys, stooges); System.out.println(aflCio); }

- 여기에서 만든 union  함수는 입력 2개, 반환 1개의 타입이 모두 같아야 하는 문제가 있음.
    - #31 을 이용해 더 유연하게 만들 수 있음.

## 제너릭 싱글턴 팩터리
- 때때로 하나의 불변 객체를 여러 타입으로 활용 해야할 필요가 있다.
- 제너릭은 런타임에 타입정보가 소거되므로, 어떤 타입으로든 매개변수화 할 수 있다.
    - 이렇게 바꿔주는 것을 **제너릭 싱글턴 팩터리** 라고한다.
- 예시)
    - `Collections.reverseOrder` (#42)
    - `Collections.emptySet`

### 항등 함수를 한번 구현해보자.
- 자바 라이브러리에는 이미 구현되있음 `Functions.identity`
- 항등 함수객체는 상태가 없으니, 계속 객체를 만들필요가 없음.
```java
private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;

@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identityFunction() {
    return (UnaryOperator<T>) IDNEITTY_FN;
}

재귀적 타입 한정

정리