제2절 자료형 [자료형이 중요한 이유]

한지훈·2022년 10월 17일
0

글로 읽는 파이썬

목록 보기
2/4

제1절 자료형이 중요한 이유

대부분의 프로그래밍 언어에서는 자료형을 중요시 하게 되며, 처음 프로그래밍을 학습할 때 자료형은 꽤나 지루한 학습의 과정이 된다. 이것은 자료형을 왜 배우는지에 대해서 정확하게 인지하지 못한 채 학습을 진행하기 때문에 발생한다. 몇 가지 새로운 지식과 예시를 통하여 자료형이 왜 중요한 지에 대해서 알아보도록 하자.

자료형을 사용하는 이유

자료형은 다양한 곳에서 사용된다. 그것이 사용자가 직접 사용을 하든 프로그램이 자체적으로 이용을 하든 말이다. 파이썬에서는 변수에 할당되는 자료에 따라서 자동으로 형변환(Casting) 과정이 진행되므로, 그 중요도는 다소 낮아지지만, 앞으로의 학습을 위해서 이를 짚고 넘어가도록 한다.

몇 가지의 이유는 있지만, 가장 먼저 소개할 사항은 생각보다 간단하다. 효율성을 측면이다. 우리는 앞단에서 변수를 상자에 비교한 바 있다. 만약 아주 조그마한 사물을 거대한 상자에 보관하게 된다면 공간을 낭비하는 셈이 된다. 컴퓨터에서 데이터를 저장하는 메모리 공간의 효율적인 사용을 위하여 다양한 크기의 자료형을 만들어두고 이를 사용하게 되는 것이다.

공간의 효율성과 더불어 연산에서의 효율성도 보장할 수 있다. 소수점이 있는 실수의 계산을 생각하여 보자. 초등학교 등의 저학년 과정에서 우리는 소수점이 있는 계산을 할 때 소수점이 없는 형태로 먼저 계산을 한 뒤 자릿수에 따라서 소수점을 맞게 다시 찍는 과정을 통하여 연산을 진행하였다. 컴퓨터가 실수를 표현할 때는 이처럼 소수점을 고정하지 않고 그 위치를 나타내는 수를 별도로 표기하여 저장하는 부동소수점(浮動小數點, floating point) 방식으로 실수를 표현하게 된다. 여기서 부동은 고정되지 않고 물에 둥둥 떠서 부유(浮遊)하며 움직(動)이는 모습을 나타내는 단어이다.

부동소수점의 예시처럼 자료의 형태에 따라서 저장하는 방식도 변경되며, 이를 연산하는 방법도 다르게 된다. 즉 자료형에 따라서 각 변수의 저장 공간을 효율적으로 관리할 수 있으며 연산을 위한 알고리즘도 최적화할 수 있다는 것이다.

파이썬에서는 해당하지 않지만 다른 프로그램에서는 각 자료의 저장 공간, 즉 변수를 할당할 때 자료형을 할당하는 정형이라는 과정을 거친다. 이러한 정형 과정을 거치게 되면 상대적으로 명령의 안전성을 보장할 수 있다. 예를 들어보자. 숫자와 글자 사이의 사칙연산을 우리는 쉽게 생각할 수 없다. 물론 파이썬 등 여러 프로그래밍 언어에서는 이러한 산술방식도 유효하지만, 기존의 사고 체계에서는 사실 받아들이기 어려운 오류이다. 이처럼 자료형을 잘 활용한다면 무의미한 연산 및 오류가 발생할 여지가 있는 명령을 실행하기 전에 감지할 수 있게 된다.

우리가 배울 파이썬은 이러한 자료형을 명시하지는 않는다. 변수에 자료가 할당될 때마다 자동으로 그 자료형을 변환하는 과정을 거치기 때문이다. 다만 주의할 점은 자료형의 명시여부가 프로그래밍 언어의 우월성을 나타낸다고 보기는 어렵다. 저마다의 장단점을 가지고 있기 때문에 각 언어의 특성에 따라서 활용하는 것이 올바를 것이다.

더 읽어보기

위에서 언급한 숫자와 글자 사이의 연산에 대해서 잠깐 알아보도록 하자. 파이썬이 아닌 다른 자료형을 명시하는 언어에서 아래를 계산하면 재미있는 결과를 얻을 수 있다.

/* 생략 */
char var = 'a';
cout << var + 1 << endl;
/* 생략 */

위에 있는 코드는 C++이라는 언어로 작성된 것이다. 생략된 줄을 제외하고 코드를 살펴보도록 하자. 현재 var라고 이름붙여진 자료를 저장할 수 있는 공간은 char이라는 자료형을 가지고 있다. 여기서 charcharacter의 줄임말로 문자를 저장하는 자료형이다. 즉, 첫 번째 줄에서는 var라는 변수에다가 a라는 글자 하나를 저장한 셈이 된다. 두 번째 줄에서는 이렇게 저장된 값에 정수인 숫자 1을 더하고 있는 것이다. 이 코드의 결과는 무엇일까.

결과는 정수 98이다. 여기서 중요한 점은 왜 98이라는 뜬금없는 결과가 나왔는가이며, 이것이 자료형을 사용하는 것과 어떻게 결부되느냐에 대한 것이다.

결론적으로는 컴퓨터가 char형을 저장할 때 각각의 글자를 미리 지정된 하나의 수로 저장하기 때문에 이러한 답이 나온 것이다. 이렇게 사용자가 입력한 문자 혹은 기호를 컴퓨터가 이해할 수 있는 신호로 변경하는 과정을 문자 인코딩(text encoding)이라고 한다. 대부분의 문자 인코딩은 ASCII라는 이름의 인코딩 방식을 기반으로 한다. 이 ASCII 방식의 인코딩에서 소문자 a97이라는 정수인 숫자에 대응되며, 이 97이라는 값에 1을 더했기 때문에 결과값이 98이 되는 것이다.

우리가 이러한 사례에서 배울 수 있는 점은 이렇게 각 자료의 형태에 따라 저장되는 형태가 달라진다는 것(여기서는 문자가 ASCII 인코딩을 거쳐서 변수에 저장된다는 점)이며 이로 인하여 예상하지 못한 결과의 값이(여기서는 글자 a와 정수 1을 더한 값이 98이 되었다는 점) 나타날 수 있다는 점이다.

0개의 댓글