왜 배열의 목록은 'i' 로 표현할까?

신원규·2023년 5월 21일
1
post-thumbnail

흔히 배열의 목록을 표현하는 변수명을 'i'로 짓는 관행이 있는 것을 알고 계실 겁니다.
혹시 그 유래에 대해서 알고 계신가요?
오늘은 알고 사용하면 더 재밌는 대표적인 정수형 변수명의 유래에 관해서 설명해볼까 합니다.

목차

1. 머릿말
2. 컴퓨터 과학의 태동
3. 허수의 i 였다고?
4. 여러분은, 변수명 i 를 명명할 때 마다 수학을 하고계십니다.

머릿말

컴퓨터 과학은 그 학문의 태동을 응용수학의 품 안에서 시작했다고 합니다.
(1984년, 하버드 대학교의 컴퓨터과학과가 응용수학과에서 분과 된 예시가 대표적일 겁니다.)
역사의 위인분들이 이렇다 할 하드웨어가 만들어지기도 전에 벌써 소프트웨어를 설계했듯이, 초기 컴퓨터 과학은 그 특성이 수학과 엄밀한 구분을 하기 어려웠습니다.

컴퓨터 과학의 태동

따라서,컴퓨터 과학에서 사용하는 용어나 표기법 또한 수학에서의 영향을 강하게 받은 흔적이 남아있는데요,
시간이 지나 컴퓨터 과학은 공학의 특성을 더 강하게 띄게 되었고,
저같은 수학적 소양이 부족한 사람도 쉽게 그 기술의 혜택을 누릴수 있게 된 결과물인 추상화, 계층화, OS 등의 수혜로 현 시점에선 소프트웨어 엔지니어로서 활동을 할 때, 수학적 사고가 그리 필수적이지 않다는 말이 많이 나오는 상황입니다.

하지만 가장 많이 사용하는 변수명에서조차 수학의 표기법 (Mathematical Notation) 의 영향을 찾아 볼 수 있는데요,
흔히 배열의 목록을 'i'로 표기하는것에서 이를 찾을 수 있습니다.

이 이유를 혹시 알고계시나요? 흔히 색인에 해당하는 "index"의 앞글자를 따 'i'라 표기한다는 이야기도 있는데요, 물론 사실과 거리가 멀다는것은 아니지만, 변수명 'i'에는 그보다 더 깊은 이야기가 숨어있답니다.

허수의 i 였다고?

배열의 목록을 표기하는 'i' 는 허수(Imaginary number)의 단위인 i 와 큰 연관이 있습니다.
너무 뜬끔없다 느껴지실 수 있겠지만, 천천히 들어보시면 이해하실 수 있을것이라 생각합니다.

흔히 다차원배열의 각 색인을 나타내는 변수명을 i, j, k, ... 로 작성하는 관행이 있음을 알고 계실겁니다.
이는 흔히 포트란의 정수형 변수 선언을 위한 지정된 변수명에서부터 온 관행이라는 사실도 이 글을 읽는 몇몇분은 알고 계실거라 생각합니다.

근데 왜 abcd나 xyz이 아닌, 좀 뜬금없어 보이는 i 에서부터 알파벳 순으로 명명하게 된 이유가 뭘까요?
우연히 포트란의 예약어나 할당한 변수명이 a 부터 h 까지는 다른 유형과 의미로 꽉 차있어서 그랬었던걸까요?

그런 이유보다는 수학에서의 3차원 공간의 직교좌표계(Coordinate space)의 기저(Basis) 를 의미하는 각 단위 벡터 i,j,k, 를 의미하는 의도가 더 강했을겁니다.

그럼 왜 수학에서는 이를 i, j, k 로 사용했을까요? 이는 사원수(Quaternion) 의 각 단위를 의미합니다.

사원수는 우리가 고등학교 과정에서 배운 복소수체계(Complex number) 의 확장인데요,
실수부(스칼라) 와 3개의 직교하는 유닛 (i,j,k) 로 이루어진 허수부를 가지는 수 체계입니다.

사원수의 정의: i^2 = j^2 = k^2 = ijk = -1

이 포스팅의 주제는 사원수와 벡터연산의 개론이 아니므로 간단히 설명하면(오개념이 있을 수 있습니다.) 각 세개의 허수 단위는 그 정의에서부터 직교성(내적의 결과가 0)을 보장하므로, 3개의 축을 가지는 3차원 직교좌표계의 각 축(axis) 로 쓰이기 용이하기 때문입니다.

따라서 자연히 각각 직교성(서로 의존성이 없는) 삼차원 배열의 색인 변수명은 i,j,k 로 표현되는것이 자연스러운 겁니다.

여러분은, 변수명 i 를 명명할 때 마다 수학을 하고계십니다.

따라서 여러분은, 변수 i 를 명명할때마다 수학적인 의미로서 1차원 임의의 수열 N 의 색인 i 에 접근하겠다. 라는 의미의 선언을 하고 계신겁니다.

어떠신가요 var i:Int = 0; 가 이제는 조금 달리 보이시나요?

현대 소프트웨어 공학에서는 OS 와 프레임워크가 저수준의 복잡하고 어려운 수학연산을 많이 대신해줌으로서 엔지니어가 정말 공학적으로 의미있는 비즈니스 로직에 집중 할 수 있는 기회를 제공합니다.

하지만, 그 편의에 젖어 정말 저희가 이용하는 응용수학(혹은 컴퓨터 과학)이 어떠한 배경을 가지고 있는지에 대해서는 잊지 말아야한다는 생각이 문득 들어 이 글을 작성해 봅니다.

profile
생존형 개발자. 어디에 던져져도 살아 남는것이 목표입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 11일

오 허수였다니... 전 item의 앞글자 딴줄 알았는뎅

답글 달기