더북(TheBook)

이 책에서 구현할 자료 구조는 대부분 객체 지향적으로 설계되었기 때문에 내부적으로 데이터를 실제로 저장할 객체와 이 객체 위에서 작동할 메서드를 가지고 있습니다. 연산이란 이 메서드들을 의미합니다. 그러므로 연산을 명세할 때는 메서드 이름과 매개변수, 반환값을 반드시 표기해야 합니다.

데이터 타입을 알아보았으니 이제는 최종 목적인 ADT를 알아보도록 합시다. ADT란 객체와 연산의 명세에서 객체 표현이나 연산 구현을 감춘 것을 의미합니다. 이렇게 이야기해서는 이해하기가 쉽지 않습니다.

예를 하나 들어 보겠습니다. C 언어에는 정수형을 표현하는 데 32비트 컴퓨터 기준으로 1바이트로 표현하는 char, 2바이트로 표현하는 short, 4바이트로 표현하는 int, 8바이트로 표현하는 long long 등 다양한 데이터 타입이 있습니다. int로 선언한 a 변수에 int의 최댓값인 231-1, 즉 2147483647이 저장된 상태에서 a 변수에 1을 더한다면 정수 오버플로(integer overflow)가 발생하여 프로그램이 의도한 대로 작동하지 않습니다. 명백한 에러입니다. 하지만 파이썬은 자료형을 명시하지 않습니다. a=2147483647이라고 저장한 후 a 변수에 1을 더해도 잘 더해집니다. 정수 오버플로도 발생하지 않습니다.

파이썬은 C로 만든 언어입니다. 어떻게 이렇게 될 수 있을까요? 파이썬은 기본적으로 정수를 int형에 저장합니다. 그러다가 최댓값 혹은 최솟값을 넘는 연산이 발생하면 내부적으로 long long으로 변환합니다. 프로그래머는 내부적으로 일어나는 일을 신경 쓰지 않아도 됩니다. 이것이 바로 객체에서 표현이 감추어진 것입니다. 표현(representation)이란 어떤 객체를 내부적으로 어떻게 저장할지 고민하는 것입니다. C 언어에는 직접 메모리 크기를 지정해 주기에 경계 값을 가지지만, 파이썬에는 자료형이 없으므로 실제 메모리에 어떤 크기로 저장되는지 감추어져 있는 것이지요.

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