타입클래스와 모듈 비교

4 days ago 13

타입클래스는 여러 타입에서 같은 식별자를 사용하는 애드혹 다형성을, 모듈 시스템은 프로그램을 명시적으로 분해하고 조합하는 모듈식 추상화를 주목적으로 함 타입클래스는 + 같은 기호를 여러 타입에 재사용하되 공통된 의미를 유지하려는 장치임. 법칙과 테스트 또는 증명을 함께 두면 구현이 그 의미를 따르는지 확인할 수 있음 모듈은 캡슐화와 매개변수화를 통해 함수보다 큰 단위로 프로그램을 구성하고 추론하게 해 줌. 시그니처에 맞는 모듈을 입력받는 펑터로 의존성을 추상화할 수 있음 타입클래스로 모듈식 추상화를 구현할 수 있지만 인터페이스의 조합성, 함수마다 붙는 제약, 컴파일 시 인스턴스 탐색 비용에서 한계가 있음 두 기능은 양자택일 대상이 아니며 함께 지원할 수 있음. 언어 설계에서는 고품질 프로그램 작성을 위해 애드혹 다형성보다 모듈식 추상화 지원을 우선할 것을 권함 서로 다른 목적과 혼동의 원인 애드혹 다형성(ad-hoc polymorphism) 은 연산자 오버로딩 또는 타입 기반 디스패치라고도 하며, 작은 단위의 코드를 편리하게 작성하도록 같은 식별자를 여러 타입에서 재사용하게 함 +를 정수 덧셈과 부동소수점 벡터 덧셈에 함께 사용할 수 있음 벡터 타입은 임의의 라이브러리에서 정의할 수 있으므로, 언어가 모든 동작을 미리 내장할 수는 없음 모듈식 추상화(modular abstraction) 는 큰 프로그램을 효율적으로 구성하기 위한 기능으로, 프로그램을 구성 요소로 재귀적으로 분해하고 결합 관계를 명시하게 함 의존성 주입, 캡슐화, 정보 은닉이 이 기능의 일부에 해당함 두 기능을 혼동하는 데는 역사적 선택과 공통 메커니즘이 영향을 줌 프로그래밍 언어는 역사적으로 둘 중 하나를 택하는 경향이 있었음 둘 다 인터페이스를 명시하고, 코드 묶음이 그 인터페이스에 부합함을 나타내는 수단을 가짐 서로를 어느 정도 흉내 낼 수 있지만, 대체로 최적의 방식은 아님 타입클래스: 같은 기호에 공통된 의미 부여하기 타입클래스의 출발점은 오버로딩한 기호가 타입별로 구현은 달라도 의미상 같은 연산이어야 한다는 것임 +는 추상적인 덧셈을 뜻하고, 각 타입이 구체적인 구현을 제공함 반면 C++의 <<는 타입에 따라 비트 시프트나 스트림 리디렉션을 뜻하며, 두 연산은 공통된 의미가 없음 +, >>=처럼 추상 구조에 적용되는 소수의 기호를 배우고 여러 구체적인 구조에 재사용하면 기호 수와 인지 부담을 줄이면서 프로그램을 더...

Read Entire Article