변수(variable)는 데이터의 실제 위치와 매핑되어 있는 상징적인 이름이다. 어떠한 값에 대한 참조를 가지고 있기 때문에, 특정 값을 계속해서 유지시키기 위해 사용할 수 있어 매우 중요하다. 파이썬은,

  • 런타임에 자료형을 검사하는 동적 검사
  • 이미 특정 자료형으로 정의된 변수에 다른 자료형의 값을 할당할 수 있는 동적 타이핑
  • 인터프리터가 자료형을 추론하여 알맞는 타입을 알아서 준비하는 타입 추론 또는 암시적 타입 선언(implicit type declaration)
  • 암시적 형변환(implicit type conversion)이 지원되지 않아 런타임에 타입 오류를 만나면 에러가 발생하는 강타입 언어다.
  • 이 정도가 파이썬 타입 시스템의 큰 틀이다. 이것저것 어려운 말들 많지만, 아래와 같은 코드를 작성할 수 있다는 것이다.

    인터프리터가 타입을 추론해 주기에 타입을 명시하지 않아도 되고, 동적 타이핑이 지원되기에 정수 타입의 값이 할당되어 있던 변수에 다른 타입의 값을 재할당할 수 있게 된다. 같은 동적 타이핑 언어들과 다르게, 변수 선언에 별도의 키워드(var, let 등)도 필요하지 않다. 타입 시스템 이야기는 짧게 여기서 마무리하자.

    타입과 파이썬 빌트인 타입

    컴퓨터는 전기로 작동한다. 이러한 전기 신호의 on을 1에, off를 0에 대응하고 이들을 조합한 일련의 신호는 10110110...처럼 표현할 수 있다. 이러한 숫자 체계를 수학에서는 이진수라고 하고, 이를 간단한 공식에 대입하여 우리가 흔히 이해하는 10진수로 바꿔서 표시(1101 -> 13)할 수 있다. 0과 1로 만들어지는 값은 결국 수(number)일 뿐이지만, 우리가 현실에서 마주칠 수 있는 데이터들은 수 개념에서 한정되지 않는다. 따라서 컴퓨터 과학에서는 이진수의 조합에 기술적인 기준 몇 가지를 더해 정수와 실수, 문자열 등을 구분하도록 하고 있으며, 일반적인 프로그래밍 언어들도 이러한 체계를 따르고 있다. 이들을 자료형(type)이라고 부른다.

    파이썬에서 제공하고 있는(built-in) 자료형은 크게 기본 자료형컨테이너 자료형으로 나뉜다. 기본 자료형은 아래와 같다.

    • 정수(int) : -1, 0, 1 등
    • 소수(float)복소수(complex) : 1.2, -0.8, 9i+1 등
    • 문자열(string) : 'a', 'hello', '' 등
    • boolean : True, False
    • None : 값이 없음을 의미

    다른 프로그래밍 언어들에서도 사용되는 기초적인 타입들이다. 조금 특별한 점은, 다른 언어처럼 소수 타입이 float와 double의 두가지로 분류되어 있지 않다는 것과, 문자(character)와 문자열(string)을 문자열 타입 하나로 표현하고 있다는 것이다. 그리고 이러한 타입의 데이터들을 조합하여 하나의 단위로 묶어서 다루는 컨테이너 타입들이 있다.

    • 리스트(List) : [1, 2, 3, 4]
    • 튜플(Tuple) : (1, 2, 3, 4)
    • 사전(Dictionary) : {'a': 1, 'b': 2}
    • 집합(Set) : {1, 2, 3, 4}

    이들은 논리적으로 데이터 타입인 동시에 자료 구조 ADT의 구현체기도 하다.(list는 append와 pop으로 스택의 push/pop을 구현하고 있는 등..)

    변수

    a라는 변수를 선언하며, 숫자 리터럴을 a에 할당(assign)했다. 어떤 값을 '직접 써서 표현하는 것'리터럴이라고 한다. 수학에서의 등호는 '같음'을 의미하나, 컴퓨터 과학에서의 등호는 '할당'을 의미한다. 그리고 이 할당의 방향은 오른쪽에서 왼쪽이다. 따라서, 등호를 기준으로 우변이 평가되고, 평가된 값이 좌변에 할당된다. 따라서 변수 a는 타입이 추론되어 정수 타입이 되고, 값으로 1을 가지고 있게 된다. 아래의 할당문을 보면 우변 평가, 좌변 할당이라는 순서를 조금 더 쉽게 이해할 수 있다.

    연산자 개념이 등장했지만, 수학적으로 이해하면 된다. 우변인 3 * 5 + 2가 평가되어 17이 되고, 좌변인 a에 할당되어 결론적으로는 a에 17이 할당된다. 우변에 들어간, 값들과 연산자를 함께 사용하여 수식을 표현한 것을 표현식(expression)이라고 한다. 그 자체로 평가되어 하나의 결과값으로 축약되므로, 이를 평가식이라고도 한다. 리터럴로 값을 표현해놓은 것 그 자체도 expression이 될 수 있다. 아무튼 표현식은 쉽게 보면 '간단한 수식'이지만, 언어 구조의 근간을 이루는 매우 중요한 개념이므로 숙지하고 있는 것이 좋다.

    파이썬은 아래처럼 변수에 대해 몇가지 트릭을 사용할 수 있다.

    1번 라인은 동일한 값을 가진 여러 개의 변수를 선언하는 것, 2번 라인은 서로 다른 값을 가진 변수 여러 개를 인라인으로 선언하는 것이다. 2번 라인은 사실 tuple 표현식과 unpack을 응용한 건데, 이건 나중에 알아보도록 하자. 아무튼, 이런 게 가능하다.

    파이썬의 타입 시스템부터, 빌트인 타입과 변수 개념을 알아봤다. 다음 글부터는 자료형 위주의 이야기들을 채울 예정이다.

    '프로그래밍 > Python' 카테고리의 다른 글

    산술 연산자  (0) 2019.01.28
    숫자 자료형과 리터럴  (0) 2019.01.25
    주석  (0) 2019.01.07
    Hello World, 세미콜론은 optional하다?  (0) 2019.01.03
    개요와 설치  (0) 2019.01.01

    + Recent posts