Fundamentals2020. 2. 9. 15:37

 

 프로그래밍 언어가 배열(Array)을 지원하게 된 것은 가히 혁명이라 할 수 있는데, 우리는 그 혁명의 시대를 지나, 수혜의 시대를 살아가고 있다.

 

 이 번 포스팅에서는 그런 배열에 대한 이야기를 하나 하려고 한다.

 

---

 우선 C 코드 예제를 먼저...

 

#include <stdio.h>
int main()
{
   int A[3][3];

   A[2][1] = 150;
   printf( "%d\n", A[2][1] );

   return 0;
}

 

 간단히 A 라는 2차원 배열의 특정 위치에 값을 넣고, 그 것을 출력하는 예제이다. 

 

 그렇다면, 위 예제에서 subscript와 index는 무엇일까?

 단도직입 적으로 subscript는 A[2][1] 에서 2와 1이라는 값이며, index는 A[2][1] 자체를 지칭한다.

 

 즉, subscript는 배열의 특정 위치를 포인팅하기 위해 표기된 값이며, index는 포인팅 된 위치를 의미하는 것이다.

 

 그렇다면, 왜 첨자라는 용어를 쓰게 된 것일까? 게다가, superscript(위 첨자)라고 하지 않고, subscript(아래 첨자)라 하는 이유는 무엇일까?

 

 그 이유는 바로 배열이 수학의 행렬에서 유래된 개념이기 때문이다. (애초에 컴퓨터의 태생은 ICBM의 탄도계산을 위한 거대한 계산기였다.)

 

 행렬에 배열된 숫자들을 지칭하는 방법(notation)을 보자.

 

 

출처 : 위키피디아

 

 

 행렬의 (1,1) 위치를 지칭하기 위해 

이라고 표기를 하고 있다. 행과 열을 아래 첨자(subscript)로 표기하고 있는 것이다. 그렇기 때문에 컴퓨터 언어에서도 배열 내 위치 표기를 subscript라고 그대로 부르게 되었다.

 

 ※ 수학에서 superscript는 제곱 표현 등에 쓰인다.

 

 

 그런데, N차원 배열에서 각 차원에 대해 일반적으로 첫번째 index, 두번째 index... N번째 index 라고 표현을 하는 것을 많이 보았을 것이다. 이 것은 옳은 표현이다. 왜냐하면, 주소(위치)의 관점으로 봤을 때, 각각의 index는 분명 고유한 위치를 가리키고 있기 때문이다.

 
 

 프로그래밍 언어에서는 subscript를 더 확장하여 꼭 숫자로만 쓰지 않는다. 대표적인 예로 문자열이 있을 수 있다. 아래의 C++ 예제를 보자.

 

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main()
{
   map< string, map<string, string> > M;

   M[ "first" ][ "second" ] = "here!";

   cout << M[ "first" ][ "second" ] << endl;
   return 0;
}

 

 결과는 예상한 바와 같이 'here!' 문구가 화면에 출력된다. 이와 같이 간단히 subscript에 숫자 대신 name tag(이름표 :])를 붙여 indexing을 할 수도 있다. 내부적으로는 Tree in Tree 구조라는 복잡한 형태지만...

 


※ 이전 블로그의 포스트임(2016/11/4)

 

 

Posted by JMAN