변하는 타입 찾기
구조는 같고 값 타입만 달라지는 위치를 타입 매개변수로 분리한다.
무엇이 변하지 않는지도 중요하다제네릭을 여러 타입에서 재사용한다는 설명만으로는 설계 기준이 부족하다. 클래스의 상태가 어떤 T를 저장하는지, 인터페이스의 메서드들이 같은 T를 공유해야 하는지, 제약 조건이 내부 구현을 얼마나 안전하게 만드는지 봐야 한다.
구조는 같고 값 타입만 달라지는 위치를 타입 매개변수로 분리한다.
무엇이 변하지 않는지도 중요하다클래스가 저장하는 값과 반환하는 값이 같은 T를 공유해야 하는지 확인한다.
생성자와 메서드가 같은 계약을 본다읽기, 쓰기, 비교, 변환 같은 메서드가 T를 어떻게 입력과 출력에 쓰는지 명시한다.
메서드마다 독립 제네릭인지 타입 전체 제네릭인지 나눈다내부에서 id, length, key 같은 속성을 쓰려면 extends로 최소 조건을 둔다.
제약 없는 T에서는 아무 속성도 안전하게 읽을 수 없다한 번만 쓰거나 추론이 어려운 제네릭은 구체 타입이나 overload가 더 읽기 쉬운지 본다.
제네릭은 복잡도를 빌려오는 도구다