나도 완벽하게 이해했다는 생각은 안 들지만 복습 겸 설명을 시도해 봄.
C++의 concepts, 러스트의 trait은 하스켈의 typeclass에 영향을 받았다고 볼 수 있음.
그래서 이게 뭐냐면 OOP에 익숙한 사람 관점에서 설명하자면 컴파일 시간, 타입 수준에서 동작하는 인터페이스임.
그래서 구체적으로 인터페이스와 어떤 차이가 있는지 알고 싶다면 아래 번역문을 보면 될 거임.
Difference between OOP interfaces and FP type classes 번역
타입클래스와 비교했을 때 러스트 트레잇의 차이점 중 하나는 orphan instance라고 부르는 걸 허용하지 않는다는 거임.
즉 하스켈관 달리 impl 구문(인터페이스 구현선언)을 trait 선언 모듈이나 impl 대상 타입 모듈 외엔 사용할 수 없게 했음. 이건 중복 impl 선언을 막기 위한 타협임.
그럼 동적인 것이 필요할 땐 어떡하냘 수 있는데, 러스트는 dyn trait란 걸 쓰고 하스켈은 existential type을 쓸 수 있음.
댓글 0