trait은 동작을 공유할 수 있게 해준다
- 아무래도 Generic Type T라고만 받으면 문제가 생길 수 있다보니, trait을 만든 것 같다
- 함수 내부에 사용되는 동작들에 대해, 명시적으로 동작함을 가르쳐 줘야 한다
- ducktyping과 interface 형식과 비슷하다
- scope에 따라서 trait 구현이 가능할 수도, 아닐수도 있다
- 외부의 타입에 대해 외부의 trait을 구현할 수는 없다 (golang에서 interface를 외부에서 구현할 수 없는것 처럼)
- trait 혹은 타입중 하나가 내부에서 정의되었다면 문제 없다
- 이는 타입이론에서
고아규칙
이라 부르는 것과 관련 있다고 한다