삽질의 현장/- MFC

#004_MFC_동적 배열 CArray 설명

shovelman 2015. 10. 19. 16:02


안녕하세요 삽잡이입니다.


이번 시간에는 데이터를 보관하고자 MFC에서 사용할 수 있는

동적배열인 CArray에 대해서 알아보려고 합니다.


CArray<> 클래스는 사실, Template 입니다. 

즉, Template Class 라고 부르는 것입니다. 클래스의 템플릿이지요...

템플릿의 의미를 바라봤을 때 이는 '클래스를 만들어내는 틀'을 말합니다.


Carray를 살펴보도록 하겠습니다.


 


다시 말하지만, 이놈은 템플릿입니다.

두 가지의 타입을 받습니다.


이 두 가지 타입을 받는 경우는 크게 두 가지로 나뉩니다. (이런걸 언어유희... 푸하하)


우선 '기본 수치 형식'이라고 하며 

int, char 와 같은 기본 자료형을 타입으로 쓸 경우 입니다.


이 때 만약, CArray에 int형 자료를 보관한다고 할 경우에 대해서 예를 들어보겠습니다.



여기서 보관하고자하는 데이터 타입(1)이 바로 CArray의 첫 번째 타입입니다.

그리고 매개변수 타입(2)이 두 번째 타입입니다.


이런 경우 int형을 보관하는 Array로써

'CArray<int, int>' 와 같이 사용하게 됩니다.


매개변수의 list 타입은 일반적인 데이터 타입이 아니라면 const 참조를 사용합니다.

기본 형식이 아니면 데이터가 크고, 복사 시에 비 효율적이기 때문에

const 참조를 사용하는 것이지요...



심심해서 이렇게 쓰는 것이 아닙니다...

위의 예제 코드는

CArray 형을 만들 되 어떤 타입을 보관할지에 대해서 

'CData 타입을 보관할 것이고(1), const CData형의 참조(2)를 인수로 받겠다'고 약속한 것입니다.


그렇다면, 이렇게 사용할 수 있겠지요

'CArray<CData, const CData&>'


C++에서는 미묘한 성능차이를 예방하고자

MFC에서 이렇게 나누어 놓은 것입니다.


그렇다면 맨날 복사가 일어나는 곳에서는 어떻게 사용할까요?

'CArray<CData*, CData*>' 이렇게 사용해도 됩니다.


물론 두번째 타입에 const를 붙여도 되지만,

const는 일반 타입의 주소에는 넣을 수 없습니다.


const가 붙으면 read만 가능한 형식입니다.

접근 수준이 고수준... 음... 그러니까

높은 곳에서 낮은 곳으로는 대입이 되지 않기 때문에 넣을 수 없는 것입니다.

안전성을 보장할 수 없기 때문이지요...


따라서 포인터형을 쓸 때에는 

'CArray<CData*, CData*>' 이런식으로 사용합니다.


다음 시간에 뵙겠습니다.

이상 삽잡이였습니다.



'삽질의 현장 > - MFC' 카테고리의 다른 글

#006_MFC_Control, Value형 변수  (0) 2015.10.19
#005_MFC_Document Template 설명  (0) 2015.10.19
#003_MFC_메모리의 구성  (0) 2015.10.16
#002_MFC_View (기본적인 입출력)  (0) 2015.10.15
#001_MFC_Intro  (0) 2015.10.15