배열(Array)
자료구조 중에서 가장 기본적인 자료구조입니다. 특히나 가장 많이 사용되는 자료구조 중 하나인데요. 배열은 일상생활에서도 쉽게 찾아 볼 수가 있습니다.
CD꽂이, 책꽂이 등을 꼽을 수 있는데요. 같은 종류의 다수의 물건을 모아서 관리하는 것이 배열의 예라고 볼 수 있습니다. 프로그래밍으로 설명을 하자면, 동일한 데이터 타입을 메모리에 저장 관리하는 것이라고 할 수 있겠네요.
일상생활에서 볼 수 있듯이 배열은 정해진 크기라는 것입니다.
위에 책꽂이를 보면 책을 넣을 수 있는 공간은 미리 정해져 있습니다. 공장에서 생산이 될 때 책을 꼽을 수 있는 크기가 정해지게 되는거지요. 그로인해서 책이 늘어나게 되면 책을 꼽을 수 있는 공간이 부족하게 되고 책장을 새로 사야하는 상황이 발생됩니다. 그럼 다시 책을 새로운 책장으로 옮겨서 꼽아야 하는 불편함이 발생되게 되는거지요.
이런 일상생활에서 보는것이 그대로 적용되는 것이 바로 배열(Array) 입니다.
선언은 다음과 같이 진행합니다.
1 2 3 4 5 | BOOK aBook[500]; aBook[0] = "Alogrism"; aBook[1] = "DataStructure"; aBook[200] = "MAXIM"; | cs |
설명을 쉽게 하기 위해서 책장을 예로 들었습니다 책을 500권 꼽을 수 있는 책장을 만든다고 하고 선언을 합니다. BOOK 이라는 데이터 타입은 없지만 사용자정의 데이터 타입으로 생성할 수 있습니다. 생성할 데이터를 [] 의 숫자 만큼 선언하게 되면 메모리상에서 해당 공간을 생성을 하게 됩니다.
그럼 aBook 이라는 변수에는 BOOK 이라는 데이터를 500개를 저장 할 수 있게 됩니다.
사용은 선언된 변수 aBook (변수 앞에 a는 array를 표편하는 헝가리안 표기법 입니다.) 에 [index] 를 통해서 접근해 사용할 수 있습니다.
aBook[0], aBook[1], aBook[2], aBook[100]..... 이런식으로 데이터에 접근 할 수 있습니다. 물론 정해진 범위 안에서 접근을 해야합니다. 500개를 선언했으면, 배열은 0부터 시작하므로 0~499 까지 인덱스를 사용할 수 있습니다. 만일 500, 혹은 501의 인덱스를 사용해 접근한다면 메모리 참조 오류로 인해서 프로그램이 종료되게 됩니다. (자신이 사용하지 않은 메모리를 잘못 참조하게 되는거죠..)
1 2 3 4 | for( int i=0; i<500; i++ ) { printf("%s", aBook[i]); } | cs |
for문을 통해서 데이터 갯수 만큼 루프를 돌면서 데이터에 삽입과 출력을 할 수 있습니다.
2차원 배열
2차원 배열은 책을 저장할 수 있는 책장을 만들고, 같은 책장을 더 사용하는겁니다.
선언은 큰거를 몇개 만들지 먼저 하고, 작은 공간이 몇개 들어가는지 선언하면 됩니다.
BOOK aBook[책장의 갯수 2][칸이 6개인 책장];
이런식으로 선언이 됩니다.
2중구조이니 데이터 접근 역시 [][] 이중으로 접근을 해야합니다.
몇번째 책장인지 먼저 쓰고, 다음 책장의 칸 위치를 알려주면 됩니다.
1 2 3 4 5 6 7 | for( int i=0; i<2; i++ ) { for( int j=0; j<6; j++ ) { printf("%s", aBook[i][j]); } } | cs |
2차원 배열은 2중 for 문을 사용하게 됩니다. 이렇게 3차원 배열, 4차원 배열을 이용해 늘려갈 수 있습니다.
하지만 실무에서 대부분 2차원 배열까지만 사용을 합니다. 3차원도 사용하긴 하지만.. 미미하다고 보면 됩니다. 3차원 배열을은 사람도 헷깔리게 되잖아요.. 사람이 헷깔리면 코딩시 많은 버그를 양산하게 됩니다.
배열의 장점
간단하게 사용할 수 있다. 간단한 선언 및 메모리 해제 생각하지 않아도 됨. (물론 동적할당이 들어가면 말이 달라지겠지요..)
인덱스 접근을 통해서 빠르게 데이터에 접근 할 수 있음.
배열의 단점
데이터를 저장할 수 있는 공간이 제한적이다. 동적할당을 통해서 새롭게 정의해서 사용할 수 있지만.. 데이터를 옮기는데 소요되는 작업낭비가 많게됨. (책장이 넘쳐서 새롭운 책장을 장만했을 경우)
해당 정보에 도움이 되셨다면 공감(하트) 버튼 클릭 부탁드리겠습니다.
'Programing > 알고리즘' 카테고리의 다른 글
[알고리즘 강의] 2. 리스트 (LIST) 개념 (0) | 2015.08.26 |
---|