파이썬이 변수를 다루는 방법
프로그래밍 언어를 배우다 보면 변수(Variable)라는 용어를 접하게 된다. Python, Java, C++ 등 어떤 언어를 배우면 가장 먼저 배우는 내용 중 하나가 바로 변수이다. 아마 대부분 학창 시절 수학시간에 변수에 대한 개념을 배웠을 것이다. 변수란 정해져 있지 않고 변할 수 있는 것을 의미한다. x + y = 10과 같은 방정식에서 x나 y를 변수 혹은 미지수라고 한다. 어떤 값인지 모르기 때문에 x 나 y와 같은 기호를 통해서 나타내는 것이다.
프로그래밍에서 변수도 이와 비슷하다. 어떤 값을 사용할지 모르니 기호를 사용한다. 기호 안에 어떠한 값을 저장하더라도, 나중에 다른 값을 저장할 수도 있다. 다만, 실제 수학과는 다르게 컴퓨터 세계에서는 모든 값이 메모리에 저장되어야 한다. 즉, 값을 저장할 공간을 미리 만들어 놓아야 한다는 의미이다. 그래서 프로그래밍 언어에서 변수를 선언할 때는 보통 변수가 가지고 있을 값의 타입을 미리 정의한다. 이렇게 타입을 미리 정의하면 해당 타입에 맞게 메모리 공간을 마련해 놓을 수 있다.
하지만 파이썬은 변수를 정의하는 방식이 조금 다르다.
파이썬에서 아주 중요하게 알아야 하는 문장은
바로 "파이썬의 모든 것은 객체다"이다.
파이썬에서 객체(object)는 데이터(속성 attributes)와 그 데이터를 처리하는 데 필요한 코드(메서드 methods)를 하나로 묶은 것을 말한다. 파이썬에서 모든 것은 객체로, 숫자, 문자열, 함수, 클래스 등이 모두 객체이다. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 기본 단위이며, 파이썬은 이 객체 지향 프로그래밍 패러다임을 완전히 지원한다.
파이썬에서는 지원하는 변수 타입들도 실제로는 객체이다. 예컨대, 정수를 표현할 때 사용하는 int 자료형을 살펴보자. help(int) 코드를 실행하면 int 자료형에 대한 설명을 볼 수 있다. 자세히 보면 int 자체도 class로 정의되어 있으며 object를 상속하고 있다. 즉, 그 자체로 객체임을 나타낸다.
다음은 파이썬에서 int 변수를 정의한 예시이다. 숫자 10을 저장하는 변수 a를 정의하였다. 그리고 타입과 주소값을 확인해 본 것이다. 결괏값에서 보듯이 변수의 타입은 int이다.
예시에서 보듯이 파이썬은 변수를 정의할 때 타입을 별도로 지정하지 않는다. 할당되는 변수의 타입을 보고 타입을 동적으로 바꿀 수 있다. 즉, 파이썬은 동적 타입할당을 지원한다. 이는 다른 컴파일 언어에서는 사실상 보기 어렵다. 일부 언어에서는 설령 변수를 정의할 때 타입을 지정하지 않는다고 하더라도, 중간에 다른 타입으로 값을 바꾸는 것은 거의 드물다. 정적 타입 언어에서는 변수 자체를 타입과 연결짓기 때문이다. 하지만 파이썬은 손쉽게 변수 타입을 바꿀 수 있고, 변수를 바꾸는 데 있어서 어떠한 제약사항도 가지고 있지 않다. 그 이유는 변수에 별도로 타입을 매핑하거나 연결하지 않기 때문이다.
예컨대, 아래와 같이 a라는 변수가 10, 1.5, "hello world"와 같이 서로 다른 값을 넣을 수 있다.
이러한 동적 타입 할당은 리스트에서도 유용하게 사용된다. 리스트란 여러 값을 담은 자료구조를 의미한다. 보통 다른 언어에서 배열이라고 부르는데, 파이썬에서는 보통 리스트를 사용한다. 예컨대, [1,2,3], ["a", "b", "c"]와 같이 여러 값들이 들어있는 하나의 컨테이너가 바로 리스트이다.
다른 언어에서는 배열을 정의할 때 다양한 타입을 하나의 배열에 담기 어렵다. 배열은 특정 타입의 사이즈에 맞게 연속된 공간을 미리 할당하기 때문에, 동적으로 사이즈를 조절하기란 사실상 쉽지 않다. 하지만 파이썬의 리스트는 여러 타입을 자유롭게 리스트에 담을 수 있다.
(참고)
파이썬에도 array가 별도로 존재한다. array는 다른 언어에서의 배열과 유사하게 하나의 타입만 담을 수 있다. 파이썬 array와 list의 차이가 궁금하다면 아래 링크를 확인하기 바란다.
https://www.geeksforgeeks.org/difference-between-list-and-array-in-python/
요컨대, 파이썬의 변수 타입은 사실상 모두 객체이다. 파이썬은 변수를 정의할 때 별도의 타입을 지정하지 않는 동적 타입 할당을 지원한다. 이러한 장점 덕분에 파이썬은 배우기가 쉽다. 실제로 간단하게 스크립트를 만들 때나 여러 혼잡된 데이터를 다뤄야 하는 상황에서 많은 개발자들이 파이썬을 사용한다.