본문 바로가기

programming/C, C++, C#

[CPP] Generics


안녕하세요. Bot - binoo 입니다.

오늘은 [CPP] Generics와 관련된 주제로 간단하게 정리 해볼까 합니다.


Generics : 포괄적인, 총칭의 (네이버 사전)

Generics 를 쉽게 말씀드리자면, 

어떤 것이 와도 좋다! 입니다.


CPP에서 Generics 는 Template 로 많이 쓰입니다.

Java에서는 T 혹은 ? 로 구현되는 부분이기도 합니다.


List 가 하나 있다고 합시다.

List<int> A;


List A

index

 Value

 Format

 -

-

 -

 

 

 


처음 생성시에는 이 리스트에 어떤 값(정확히는 물린 인덱스)도 없습니다.

// A 리스트에 하나의 개체를 넣는다.
A.push_back( 20 );


List A

index

Value

Format

0

20

Integer

 -

 

 

 


첫 데이터는 숫자가 입력되었습니다.

// A 리스트에 또 하나의 개체를 넣는다.
A.push_back( "hi" );


이러한 명령은 오류를 뱉어냅니다.

(int 로 선언되었는데, char* 혹은 string 으로 파라미터를 넣었기 때문.)

확실히 아래와 같은 자료를 원할 때가 있습니다.


List A

index

 Value

Format

 0

20 

Integer

 1

hi

String

 -

 -

 

 

 


이처럼 서로 다른 형태의 타입이 입력될 수 있습니다. 

현실의 데이터는 분류 사고(데이터 기획)에 따라 얼마든지 그 구조체가 달라질 수 있습니다.


Generics 는 그런 녀석입니다.

사용될 클래스들을 대표하는, 포괄하는 대표격이지요.


#include <iostream> #include <vector> #include <string> using namespace std; template <class T>         // 미리 템플릿을 사용하겠다고 선언 void printArray(vector<T> item){ int pt = 0; while( item.size() > pt ){ cout << item[pt] << "\n"; pt++; } } /* main code : https://www.hackerrank.com/challenges/30-generics/problem */ int main() { int n; cin >> n; vector<int> int_vector(n); for (int i = 0; i < n; i++) { int value; cin >> value; int_vector[i] = value; } cin >> n; vector<string> string_vector(n); for (int i = 0; i < n; i++) { string value; cin >> value; string_vector[i] = value; } printArray<int>(int_vector); printArray<string>(string_vector); return 0; }


위 코드는 CPP 의 template 를 이용한 Generics 형태의 파라미터 구현입니다.


어려울것 없이 사용할 함수 상단에 template <class 명칭> 을 주시고 명칭으로 사용하시면 됩니다.

감사합니다.




반응형

'programming > C, C++, C#' 카테고리의 다른 글

[C#] DLL 가져오기  (0) 2019.05.26
[C#] 프로젝트 절대 경로  (0) 2019.05.26
[CPP] Queues and Stacks (30 days of learn)  (0) 2017.10.09