T 하나가 상태와 메서드의 타입을 끝까지 묶는다

선언에 타입 자리를 만들고 생성 시 구체 타입을 바인딩하면, 저장·입력·반환 계약에 함께 전파된다.

1

타입 자리를 선언

class Box<T> T는 아직 결정되지 않음

구조는 고정하고 값 타입만 비워 둔다.

2

인스턴스에서 바인딩

new Box<string>("hi") T → string

타입 인자나 생성자 값에서 T를 정한다.

3

모든 위치에 전파

value: string setValue(v: string) getValue(): string

저장·입력·반환 타입이 함께 바뀐다.

Class<T>

인스턴스 상태를 묶기

필드와 메서드가 같은 T를 공유한다.

Interface<K, V>

외부 계약을 묶기

구현체가 달라도 K–V 관계는 유지한다.

T extends HasId

필요한 능력만 제한

내부에서 쓸 최소 속성만 요구한다.

설계 기준 같은 타입 관계가 둘 이상 이어질 때 사용한다.