본 내용은 "델파이 프로그래밍 언어" 도서의 일부분을 정리한 것입니다. 보다 자세한 내용은 해당 도서를 통해 확인할 수 있습니다.

 "델파이 프로그래밍 언어" 자세히 보기: http://tech.devgear.co.kr/devgearbook/2431 


제네릭, 혹은 제네릭 타입이라는 용어들은 타입으로 파라미터화될 수 있는 기반 내의 것들 의 집합을 설명합니다. 제네릭이라고 말했을 때 제네릭 타입과 제네릭 메소드(제네릭 프로 시저와 제네릭 함수)를 의미하기도 합니다.


제네릭은 알고리즘(프로시저나 함수 등)이나 데이터 구조(클래스, 인터페이스, 레코드 등) 를 그 알고리즘 혹은 데이터 구조가 사용하는 하나 이상의 구체적인 타입으로부터 관계를 끊는 것을 허용하는 추상화 방법들의 집합입니다.


그 정의에서 다른 타입들을 사용하는 메소드나 데이터 타입은 하나 이상의 구체적 타입을 타입 파라미터로 대체시킴으로써 더 일반화시킬 수 있습니다. 그런 후 그런 타입 파라미터 를 메소드나 데이터 구조 선언의 타입 파라미터 리스트에 추가하면 됩니다. 


이것은, 바디에 있는 문자 상수의 인스턴스를 파라미터 이름으로 대체시키고 그 파라미터를 프로시저의 파 라미터 리스트에 추가하여 프로시저를 더 일반화시킬 수 있는 것과 비슷합니다.


예를 들어, 객체들(TObject 타입)의 리스트를 유지하는 클래스(TMyList)를, TObject를타입 파라미터 이름‘( T’같은)으로 대체하고 타입 파라미터를 클래스의 타입 파라미터 리 스트에 추가하여 TMyList<T>으로 하면, 재사용성이 높고 타입에 안전하도록 만들 수 있습 니다.


제네릭 타입이나 메소드를 구체화(인스턴스화)하려면 사용하려는 시점에 제네릭 타입이나 메소드에 타입 인자를 지정하면 됩니다. 타입 인자를 지정하는 동작은 제네릭 정의 내의 타 입 파라미터들을 해당 타입 인자로 대체함으로써 새로운 타입이나 메소드를 실질적으로 생 성하게 됩니다.


예를 들면, 위의 리스트는 TMyList<Double>와 같이 사용될 수 있습니다. 이 코드는 TMyList<Double> 이라는 새로운 타입을 생성하며, 그 정의는 모든‘T’가‘Double’로 대 체되었다는 점 외에는 TMyList<T>와 동일합니다.


서로 다른 특징들이 있기는 하지만, 추상화(abstraction) 메커니즘으로서의 제네릭은 다형 성(polymorphism)의 기능들과 많은 부분에서 중복된다는 점을 언급할 필요가 있습니다. 인스턴스화 시점에서 새로운 타입이나 메소드가 만들어지기 때문에 타입 에러를 더 빨리(실 행 중이 아닌 컴파일 중에) 찾아낼 수 있습니다. 


이런 특징은 또한 최적화의 범위를 넓혀준 다는 장점도 있지만, 다른 한편으로는 각각의 인스턴스화마다 최종 실행되는 애플리케이션 의 메모리를 사용하기 때문에 성능을 낮출 가능성도 있습니다.


코드 예제

다음의 예에서, TSIPair는 String과 Integer의 두 데이터 타입을 저장하는 클래스입니다.


generic_1_1.png


클래스를 데이터 타입과 독립적으로 만들려면, 데이터 타입을 타입 파라미터로 대체합니다.


generic_1_2.png    




번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 724024
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 721785
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 723854
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 727202
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 727578
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 723368
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 734921
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 929263
1395 N 윈도우와 맥 개발 시작을 위한 파이어몽키 코스북: 무료 다운로드 제공(385페이지) 관리자 2013.04.05 153170
1394 ComPort(시리얼 통신) 컴포넌트 설치안내 [11] file 험프리 2013.12.04 127279
1393 [REST API] REST 기반 파일 업로드와 다운로드 구현하기 험프리 2020.08.31 91392
1392 델파이 튜토리얼 자습서 이용 안내 관리자 2014.09.01 73403
1391 이 달의 기술자료 - 2014년 11월 험프리 2014.10.13 56407
1390 이 달의 기술자료 - 2014년 6월 file 험프리 2014.06.05 52246
1389 Find the O/S Language Type c2design 2014.07.30 49907
1388 RAD Studio Resource Center 박병일 2012.01.26 47905
1387 CD-ROM 열고 닫기 박병일 2011.12.22 45376
1386 [Android] 폰번호 가져오기 [1] 타락천사 2014.09.05 39608
1385 이 달의 기술자료 - 2014년 12월 file 험프리 2014.11.26 34568
1384 RAD Studio XE6 Update1 발표 [1] Humphery 2014.06.20 30374