본문 바로가기

파이썬/파이썬 기초

파이썬강좌 변수와 이름공간

파이썬강좌 포스팅을 시작합니다

이번 파이썬강좌 포스팅에서는 파이썬의 특징을 잘 나타내는 변수를 배워보겠습니다 파이썬 다른 언어와 달리 그 값 자체를 저장하는 하는 것이 아니라 그 값이 저장된 주소를 저장합니다. 따라서 변수이름 앞에 어떤 값을 저장할지 지정할 필요가 없습니다. 또한 이름공간의 개념도 같이 알아보겠습니다.

 

[이전 포스팅] 프로그래밍의 기초 

 

python 프로그래밍 기초

python 포스팅을 시작합니다 이번 python포스팅에서는 프로그래밍의 개념과 값처리와 리터럴, 표현식의 개념을 배워보겠습니다. 왜 어셈블리어 대신 파이썬과 같은 언어를 쓰는지 프로그래밍의 기본적인 개념에서..

www.itple.co.kr

 

파이썬강좌 변수

컴퓨터에서 처리되는 값은 컴퓨터 메모리 어딘가에 저장됩니다. 이를 적재(Load)된다고 합니다. 컴퓨터의 두뇌 역할을 하는 CPU는 메모리에서 이 값을 찾아서 여러 가지 일을 합니다. CPU에서 우리가 원하는 값을 찾기 위해서는 그 값이 어디에 있는지 알아야 합니다.

 

이를 주소(address)라고 합니다. 메모리에 값을 저장하는 곳을 집이라고 생각해볼까요? 집마다 여러 가지 값이 저장되어 있겠죠? 이 집은 자기만의 주소가 있습니다. CPU는 이 주소에 값을 저장하거나 원하는 값을 가져옵니다.


메모리의 주소에 이름을 붙여 사용하는 것을 변수라고 합니다. 메모리 관리는 운영체제가 맡아서 합니다. 여러분이 변수를 선언하고 값을 할당하면 운영체제가 알아서 현재 사용하지 않는 메모리를 찾아 그곳에 변수이름을 할당합니다. 여러분은 그 변수이름을 사용하여 메모리에 접근하여 프로그램을 작성하게 됩니다.


응용 프로그램이 할당된 메모리를 사용하지 않으면 운영체제는 이 공간을 빈 영역으로 인식합니다. 그리고 다른 목적을 위해 사용할 수 있도록 합니다. 변수는 값을 담는 상자(컨테이너)입니다. 파이썬은 모든 것을 변수에 저장해서 원할 때마다 사용할 수 있습니다.

 

파이썬의 변수는 다른 프로그래밍 언어와 다릅니다. 파이썬은 어떤 값을 저장할지, 자료형을 정하지 않습니다. 다른 프로그래밍 언어는 자료형을 정해야 합니다. 자료형에 맞게 메모리를 할당해서 사용하기 때문이죠. 예를 들어 C언어에서 문자 하나를 저장하려면 1byte의 메모리를 사용합니다. 이때 변수이름 에 char라는 자료형을 붙입니다. 정수를 저장하려면 4byte의 메모리를 사용합니다. 그리고 변수이름 앞에 int라는 자료형을 붙입니다.

 

그런데 파이썬은 단순히 변수이름만 정하고, 변수에 값을 할당해서 사용합니다. 파이썬의 변수는 C/C++ 같은 프로그래밍 언어와 달리 실제 값이 저장되는 공간 자체가 아니라 값들의 임시 저장소입니다. 변수에는 값인 객체가 어디에 있는지 알려주는 주소인 레퍼런스(reference)만 저장합니다.

 

레퍼런스는 값이 메모리의 어디에 있는지 알려줍니다. 파이썬에서 변수가 실제 값이 존재하는 위치를 가리키는 것을 바인딩(binding)한다고 합니다. 프로그램을 만들 때 변수에 다양한 객체를 할당할 수 있는 이유는 단순히 레퍼런스만 저장하기 때문에 자료형의 종류에 상관없이 객체를 할당할 수 있는 겁니다. 즉 메모리에 접근할 수 있도록 붙인 ‘이름표’가 바로 변수입니다.

파이썬강좌 변수

 

할당 연산자 또는 대입 연산자라고 부르는 등호(=)를 써서 변수가 값을 가리키게 할 수 있습니다.

 

age = 25


이 코드의 의미는 age라는 변수가 ‘25’라는 값을 가리키게 하라는 뜻입니다. 수학에서 등호(=)는 ‘같다’라는 뜻이지만, 파이썬에서는 그 값을 가리키라는 기호입니다. 이것을 바인딩한다고 합니다.

할당연산자 또는 대입연산자

 

이렇게 변수가 어떤 값을 가리키면 값이 저장됩니다. 이것을 변수에 값을 할당(Assigning)한다고 합니다. 표현이 조금 어렵지만, 프로그래밍 언어를 배울 때 자주 쓰는 말이니까 잘 기억해두세요. 이렇게 변수가 어떤 값을 가리키도록 하는 문장을 ‘할당문’이라고 합니다.


그러면 메모리 어딘가에 25라는 값이 올라갑니다. 이것을 ‘적재(load)’라고 합니다. 이렇게 하면 변수 age로 메모리에 저장 된 값 ‘25’를 찾아서 사용할 수 있습니다. 이것을 ‘참조한다’라고 합니다.


변수 age에는 값 25가 있는 메모리의 주솟값이 저장되어 있습니다. 길고 외우기 힘든 메모리 주소를 기억하는 것이 아니라, 기억하기 쉬운 이름을 만들어 ‘이름표’처럼 붙여 놓는 것이죠.

데이터 할당과 참조

 

변수에 대해서 더 알아보겠습니다. 아래 코드를 실행합니다.


x = 300

 

이 코드를 실행하면 ‘300’이라는 값은 메모리에 어딘가에 저장되게 됩니다. 파이썬에서 이것을 객체(Object)라고 합니다. 그리고 주소(address)를 갖겠죠? x라는 변수 역시 메모리의 어딘가에 있는 공간입니다. 이 공간에는 ‘300’이라는 객체의 주솟값이 저장돼 있습니다.


변수 x가 300이라는 객체를 가리키고 있는 것이죠. 우리가 주소를 보고 실제로 사는 집에 찾아갈 수 있는 것처럼 변수를 통해 객체를 찾을 수 있는 겁니다. id(변수이름)로 객체의 주솟값을 확인할 수 있습니다. 이 주솟값을 ‘레퍼런스’라고 하는데 컴퓨터마다 레퍼런스 값은 다르게 나타날 수 있습니다.

 

id 함수 사용하기

 

아래와 같이 코딩을 해볼까요? 변수 y에도 300을 할당했습니다. 레퍼런스 값을 확인해볼까요?

 

변수 x, y에 300을 할당했지만 서로 다른 300이라는 정수 객체를 가리키고 있습니다. 300이라는 정수 객체는 메모리의 서로 다른 곳에 저장된 것이죠.

 

아래와 같이 코딩하면 변수 y와 변수 x가 가리키는 객체는 같아집니다.

 

즉 두 변수의 레퍼런스 값이 같습니다. 수식으로 처리한 결과를 저장하고 다른 수식에서 활용하는 방법을 배워볼까요? 아래 표현식을 실행하면 계산한 값이 나옵니다.

 

위의 표현식을 그대로 적고 변수 x를 만들어 등호(=)로 변수에 할당합니다. 변수 x를 다음 줄에 넣어 실행하면 계산된 결과를 볼 수 있습니다. 표현식의 결과를 변수 x가 가리키고 있습니다. 변수 x가 다른 값을 가리키지 않는 이상 항상 800이라는 값을 가리킵니다. 변수 x에 800을 할당한 것이죠.

 

변수는 프로그래밍에서 반드시 알아야 할 개념입니다. 그렇다면 변수를 왜 사용하는 걸까요? 프로그램을 만들다 보면 같은 데이터를 여러 번 사용해야 할 경우가 있습니다. 프로그래밍할 때마다 여러 데이터를 모두 기억하기는 어렵겠죠?

 

이런 경우 데이터를 직접 입력하기보다는 변수를 이용해서 메모리 공간에 저장해 놓은 데이터를 사용하는 것이 편리합니다. 변수이름을 정하는 규칙(명명 규칙naming convention)은 다음과 같습니다.

 

변수규칙

  • 영문자(대, 소문자 구분), 숫자, 언더바(_)를 쓸 수 있다.
  • 첫 글자로 숫자를 쓸 수 없다.
  • 파이썬 키워드(False, None, True, and, as, assert 등)는 변수이름으로 쓸 수 없다.

 

키워드(Keyword)는 파이썬에 이미 예약되어 있는 ‘문자열’로 다른 용도로는 쓸 수 없는 ‘문자열’을 말하는 것으로 특별한 일을 하는 단어라고 생각하면 됩니다. 변수이름으로 쓸 수 있는지 판단하는 isidentifier 메소드를 사용해볼까요? 이 메소드를 이용해서 두 문자열을 확인하면 *가 들어간 문자열은 변수가 될 수 없다는 것을 알 수 있습니다.

 

True는 참, False는 거짓을 나타냅니다. 변수에 모든 객체를 할당할 수 있습니다. 파이썬에서 만드는 모든 것을 할당할 수 있다는 말입니다. 파이썬의 특징을 잘 나타내는 것이 변수입니다.

 

변수에 저장할 수 있는 것

파이썬강좌 변수에 저장할 수 있는 것

 

 

변수 사용법을 잘 알면 프로그램을 만들 수 있는 기초 능력을 갖출 수 있습니다. 주피터 노트북의 자동완성 기능을 이용하면 쉽게 변수를 사용할 수 있습니다. abcdefg라는 이름이 긴 변수를 만들었습니다. ab까지만 쓰고 tab을 누르면 그림처럼 변수이름이 나옵니다. 변수이름 앞 몇 글자만 쓰고 tab을 누르면, 우리가 만들었던 변수를 쉽게 찾을 수 있습니다.

 

파이썬강좌 이름공간(네임스페이스, Namespace)

파이썬은 모든 것을 값으로 처리합니다. 프로그램을 작성한다는 것은 값을 저장하고, 필요할 때 이 값을 읽어 여러 가지 처리를 한다는 뜻입니다. 프로그램에서는 이 값을 관리하는 기준이 필요하며 파이썬은 이름공간(네임스페이스, Namespace)을 만들어 관리합니다.


이 이름공간에 들어갈 수 있는 이름은 ‘주민등록번호’와 같이 프로그램 안에서 단 하나만 있어야 합니다. 이름을 써서 그 안에 들어있는 값을 검색해 사용할 수 있습니다. 이름으로 구별한다고 해서 식별자(identifier)라고 합니다. 이름을 구별할 수 있도록 프로그램 안에서 식별자마다 의미를 정합니다.

 

이름으로 정할 수 있는 요소는 변수(variable)뿐만 아니라, 함수(function), 클래스(class), 모듈(module) 등이 있습니다. 이것들에 관해서는 나중에 하나씩 자세히 배우게 될 것입니다. x = 3이라는 코드를 실행하면 이름공간에 x와 3이 짝을 이루게 됩니다.

 

x = 7이라는 코드를 실행해볼까요? 변수 x에 할당된 값이 바뀌었기 때문에, 이름공간에서 변수 x와 짝을 이루는 값도 바뀌게 됩니다. 이름공간은 함수에서 더 자세히 배우게 됩니다.

 

[다음 포스팅] 파이썬 숫자 자료형 1

 

파이썬 숫자 자료형 이해하기 1

파이썬 공부하기 이번 파이썬 포스팅에서 자료형에 대해서 알아보겠습니다. 자료형이란 프로그래밍할 때 쓰는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 말합니다. 프로그램의 기본이 바로 자료형입니다...

www.itple.co.kr