더북(TheBook)

이제 배열 x[]의 세 요소가 메모리 위치 523에서 526에 저장되어 있으며, 길이는 523에, 배열 요소에 대한 참조는 524에서 526에 저장되어 있다고 가정하자. 코드에서 x[i]로 접근하면 파이썬은 배열의 첫 번째 요소의 주소에 인덱스 i를 더하는 코드를 생성한다. 이 그림에서처럼 x[2]는 메모리 위치 524 + 2 = 526에서 객체에 대한 참조를 찾는 코드를 생성한다. 메모리와 배열, 색인이 아주 큰 경우에도 이런 간단한 방법을 효율적으로 적용할 수 있다. 배열의 i번째 요소의 참조에 접근할 때, 두 개의 정수를 더해 메모리를 참조하면 되므로 기본적인 연산 두 개만 수행해 상당히 효율적으로 접근할 수 있다.

경계 검사 앞에서 얼핏 언급은 했지만 배열을 이용해 프로그래밍할 때는 주의할 점이 있다. 배열 요소에 접근할 때 인덱스를 올바로 사용하는 것은 전적으로 프로그래머의 책임이다. 길이가 n인 배열을 만들고 나서 n-1보다 큰 인덱스를 사용하면 실행 시 프로그램에서 IndexError 예외가 발생한다(대부분의 프로그래밍 언어에서는 이런 버퍼 오버플로(buffer overflow) 조건을 시스템이 검사하지 않는다. 이와 같은 검사되지 않은 오류 때문에 디버깅하다 밤을 새기도 하지만, 이런 오류를 발견하지 못하고 최종 시스템에 들어가기도 한다. 이런 오류를 악용해 해커가 시스템 혹은 심지어 여러분의 PC의 제어권을 획득해 바이러스를 뿌리거나, 개인 정보를 훔치거나, 악의적인 행위를 할 수도 있다는 것을 알게 되면 깜짝 놀랄 것이다). 처음에는 이 파이썬 오류 메시지가 짜증나겠지만, 안전한 프로그램을 만드는 대가치고는 상당히 저렴한 비용이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.