제네릭 소개(Generics: Introduction)

제네릭 소개(Generics: Introduction)

여러 타입에 대해 똑같은 코드를 반복해서 쓰다 보면, '타입만 바꿔서 재사용하면 좋겠다'는 생각이 들어요. 그걸 도와주는 게 제네릭(Generic)이에요. 제네릭은 다른 타입을 만들어 내기 위한 템플릿이에요. Free Pascal은 2.2 버전부터 공식 지원해요.

출처: Introduction

본문

제네릭은 다른 타입을 생성하기 위한 템플릿이에요. 클래스, 객체, 인터페이스는 물론 함수, 배열, 레코드까지 다양한 타입을 만들 수 있어요. 이 개념은 C++에서 유래했는데, C++에서는 언어에 깊이 통합돼 있죠. Free Pascal도 2.2 버전부터 템플릿, 즉 제네릭을 공식적으로 지원해요.

제네릭은 일종의 매크로로 구현돼요. 컴파일러가 생성하는 유닛 파일 안에 저장되고, 제네릭 클래스가 특수화(specialize)되는 순간 다시 재생(replay)되는 방식이에요.

제네릭의 생성과 사용은 2단계 과정이에요.

  1. 제네릭 정의: 제네릭을 새로운 타입으로 정의해요. 이건 코드 템플릿, 즉 컴파일러가 나중에 재생할 수 있는 매크로예요.
  2. 제네릭 특수화: 제네릭 타입을 특수화해요. 그러면 제네릭 타입의 구체적인 구현인 두 번째 타입이 정의돼요. 컴파일러는 제네릭 타입을 정의할 때 저장했던 매크로를 재생해요.

Free Pascal과 함께 배포되는 유닛 중에는 제네릭 컨테이너와 클래스를 구현한 것들이 여럿 있어요. 예를 들어 fgl 유닛이 그래요.

더 알아보기

  • 제네릭 타입을 정의하는 방법은 8.2 절에서 다뤄요.
  • 제네릭 타입을 특수화하는 방법은 8.3 절에서 확인할 수 있어요.
  • 제네릭 타입에 제약을 거는 방법은 8.4 절을 참고해요.
  • fgl 유닛이 제공하는 제네릭 컨테이너는 Free Pascal 배포판 문서를 확인해 보세요.