trait bound는 제네릭 코드의 사용 권한 증명이다

컴파일러는 구체 타입이 약속한 동작을 제공할 때만 해당 메서드와 구현을 연다.

읽는 순서“T가 무엇인가?”보다 “본문이 어떤 동작을 쓰며, 그 동작을 어느 bound가 증명하는가?”를 먼저 본다.

입력아직 모르는 T

구체 타입은 호출 지점에서 결정

증명T: Display + PartialOrd

출력과 비교 동작을 컴파일 시 확인

결과허용된 메서드만 사용

bound 미충족 타입은 호출 전에 컴파일 오류

함수

매개변수 bound

fn notify<T: Summary>(&T)

impl Summary는 단순한 매개변수에서 같은 제약을 간결하게 쓴다.

메서드

조건부 impl

impl<T: Display + PartialOrd> Pair<T>

두 trait를 모두 구현한 T에서만 비교·출력 메서드가 생긴다.

확장

포괄 구현

impl<T: Display> ToString for T

Display를 구현한 모든 타입이 ToString 구현을 얻는다.

구현 가능 경계trait와 type이 모두 외부 crate 소유면 직접 구현할 수 없다. coherence가 구현 충돌을 막는다.