1. 배열

    배열은 동일한 형식의 데이터 메모리 상의 연속된 공간에 저장하는 구조를 말합니다.

    장점 : 데이터를 처음부터 끝까지 차례로 처리하는 등의 일을 매우 빠른 속도로 수행할 수 있다는 장점이 있습니다.

    단점 : 배열은 저장 공간이 한정되기 때문에 크기를 늘리거나 중간에 데이터를 삽입하기가 어렵습니다.

    예를들어 100개의 배열을 잡아놓고 사용하다가 101번째 데이터를 저장하려면 101개의 데이터가 들어갈만한 영역에 배열을 새로 잡아야 한다.

     

  2. 리스트

    리스트는 하나하나가 따로 저장됩니다. 데이터들의 저장위치가 포인터로 줄줄이 연결됩니다.

    노드 : 데이터가 저장되는 공간

    링크 : 노드를 연결하는 포인터

    모든 노드가 포인터로 연결되어 있기 때문에 첫번째 노드의 포인터만 기억하고 있으면, 리스트에 저장된 모든 노드를 찾아갈 수 있다.

    데이터의 추가, 삭제가 빈번한 응용에는 배열보다 리스트를 사용하는 것이 좋습니다.

     

  3. 맵은 디셔너리라고도 하고, 해시 테이블 이라고도 합니다. 데이터가 키 값과 함께 저장될 때 맵 구조를 사용하면 좋습니다.

    예를들어 사전처럼 어떤 단어와 그 단어의 뜻을 함께 저장한다고 할 때, 단어는 키가 되고, 그 단어의 뜻은 데이터가 됩니다.

    맵과 일반배열의 차이점

    100대의 차를 주차할 수 있는 주차장에 차를 넣고 넣고 빼는 예를 들어보겠습니다.

    여기서 주차장은 데이터를 저장할 배열이고, 자동차는 데이터, 자동차의 번호가 키 값이라고 생각하시면 됩니다.

    일반 배열 같으면

    1. 들어오는 순서대로 주차장에 넣을 겁니다.
    2. 나중에 차 주인이 차를 빼러 오면 몇 번째 칸에 주차를 했는지 인덱스를 기억하던가
    3. 자신의 차를 발견할때까지 첫번째 칸부터 차례로 찾아보야 합니다.

    맵을 이용하면

    1. 차를 주차할 때부터 키 값을 이용합니다.
    2. 주차장에 100대의 차를 주차할 수 있으니까 자동차 번호의 뒷자리 두 개를 가지고 저장될 위치를 결정하면 되겠네요.

 

  1. MFC 배열 클래스

클래스

데이터 형식

CByteArray

Byte

CDWordArray

DWORD

CObArray

CObject*

CPtrArray

Void*

CStringArray

CString

CUIntArray

UINT

CWordArray

WORD

 

  1. 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 함수와 같이 비용이 큰 함수는 불 필요하게 남발하지 말아야 겠습니다.

+ Recent posts