- 배열
배열은 동일한 형식의 데이터 메모리 상의 연속된 공간에 저장하는 구조를 말합니다.
장점 : 데이터를 처음부터 끝까지 차례로 처리하는 등의 일을 매우 빠른 속도로 수행할 수 있다는 장점이 있습니다.
단점 : 배열은 저장 공간이 한정되기 때문에 크기를 늘리거나 중간에 데이터를 삽입하기가 어렵습니다.
예를들어 100개의 배열을 잡아놓고 사용하다가 101번째 데이터를 저장하려면 101개의 데이터가 들어갈만한 영역에 배열을 새로 잡아야 한다.
- 리스트
리스트는 하나하나가 따로 저장됩니다. 데이터들의 저장위치가 포인터로 줄줄이 연결됩니다.
노드 : 데이터가 저장되는 공간
링크 : 노드를 연결하는 포인터
모든 노드가 포인터로 연결되어 있기 때문에 첫번째 노드의 포인터만 기억하고 있으면, 리스트에 저장된 모든 노드를 찾아갈 수 있다.
데이터의 추가, 삭제가 빈번한 응용에는 배열보다 리스트를 사용하는 것이 좋습니다.
- 맵
맵은 디셔너리라고도 하고, 해시 테이블 이라고도 합니다. 데이터가 키 값과 함께 저장될 때 맵 구조를 사용하면 좋습니다.
예를들어 사전처럼 어떤 단어와 그 단어의 뜻을 함께 저장한다고 할 때, 단어는 키가 되고, 그 단어의 뜻은 데이터가 됩니다.
맵과 일반배열의 차이점
100대의 차를 주차할 수 있는 주차장에 차를 넣고 넣고 빼는 예를 들어보겠습니다.
여기서 주차장은 데이터를 저장할 배열이고, 자동차는 데이터, 자동차의 번호가 키 값이라고 생각하시면 됩니다.
일반 배열 같으면
- 들어오는 순서대로 주차장에 넣을 겁니다.
- 나중에 차 주인이 차를 빼러 오면 몇 번째 칸에 주차를 했는지 인덱스를 기억하던가
- 자신의 차를 발견할때까지 첫번째 칸부터 차례로 찾아보야 합니다.
맵을 이용하면
- 차를 주차할 때부터 키 값을 이용합니다.
- 주차장에 100대의 차를 주차할 수 있으니까 자동차 번호의 뒷자리 두 개를 가지고 저장될 위치를 결정하면 되겠네요.
- MFC 배열 클래스
클래스 | 데이터 형식 |
CByteArray | Byte |
CDWordArray | DWORD |
CObArray | CObject* |
CPtrArray | Void* |
CStringArray | CString |
CUIntArray | UINT |
CWordArray | WORD |
- MFC 배열 클래스들의 주요 맴버 함수
함수 | 기능 |
SetSize | 배열의 크기를 지정합니다. |
GetSize | 현재 배열에 저장된 항목의 개수를 반환합니다. |
GetAt | 지정된 인덱스에 저장된 값을 반환합니다. |
SetAt | 지정된 인덱스에 값을 저장합니다. |
Operator[] | GetAt,SetAt 함수의 기능을 할 수 있습니다. 예) array.SetAt(3,10); -> array[3] = 10; 예) int a = array.GetAt(3); -> int a = array[3]; |
Add | 배열의 저장된 항목을 1개 늘리고, 여기에 새로운 값을 추가합니다. |
InsertAt | 지정된 인덱스에 새로운 항목을 삽입합니다. |
RemoveAt | 지정된 인덱스의 항목을 삭제합니다. |
RemoveAll | 배열의 모든 항목을 삭제합니다. |
InsetAt, RemoveAt, Add 등의 함수는 배열의 속성상 하기 힘든 일을 억지로 시키는 함수들입니다. 이 함수를 호출하는 것은 쉽지만, 그 대가는 생각보다 큽니다. 예를 들어, InsertAt 함수를 호출하여 배열의 6번째 항목에 새로운 값을 추가하도록 하면, 6번째 항목 이후의 모든 값이 뒤로 한 칸씩 밀려야 하기 때문에 배열의 크기가 큰 경우에는 메모리에서 많은 양의 데이터가 이동해야 합니다. 우리는 배열의 속성을 잘 이해하고 있으므로 InsertAt, RemoveAt, Add 함수와 같이 비용이 큰 함수는 불 필요하게 남발하지 말아야 겠습니다.
'객체지향언어 > MFC' 카테고리의 다른 글
#2. 소켓통신 서버 소스 (0) | 2009.12.16 |
---|---|
콤보박스 초기화 부분에서 CString에 안먹는 바람에 애를 먹어서 (0) | 2009.09.28 |
COM의 등장과 용어 (0) | 2009.08.21 |
윈도우 프로그래밍 작동원리 (0) | 2009.08.10 |
MFC 책 목록 (0) | 2009.08.05 |