파이썬(python) 강의 2장
- 변수 -
변수는 데이터를 담는 그릇과 같다고 비유할 수 있다. 변수라는 그릇을 이해하기 위해 우선 메모리 구조에 대해 살펴보자. 메모리의 구조는 비트 단위로 나뉘어져 있고 8비트 단위로 하나의 주소를 갖는 구조이다. 비트는 0과 1로만 이루어진 가장 작은 단위이다. 이러한 주소 형태에 우리가 정하는 변수 이름이 주소의 이름으로 지정되며 그 주소 안에 우리가 원하는 데이터 값이 들어가게 되는 것이다.
만약 메모리에 어떠한 주소 번지에 num으로 변수의 이름을 선정해놓으면 우리는 이 주소를 num이라는 이름을 통해 접근할 수 있게 된다. 또한 변수는 얼마만큼의 메모리 크기를 차지하는지에 대한 정보도 갖고 있다.
그릇도 밥그릇, 국그릇, 반찬그릇으로 나눌 수 있듯이 변수 또한 내용물에 따라 즉 데이터의 타임에 따라 메모리의 크기가 결정된다. 그래서 변수를 사용하려면 변수에 어떤 데이터 타입을 담을지에 대해 먼저 결정을 해야 한다. 이렇게 변수에 어떤 데이터 타입을 담을지 정하는 것을 선언이라고 한다. 변수를 선언하게 되면 선언된 타입의 데이터를 담을 수 있는 형태로 메모리 공간이 할당되어 변수에 연결된다. 선언된 타입과 다른 형태의 데이터 타입이 들어올 경우 컴파일이 에러 메시지를 보낸다.
C나 C++ 등의 언어들은 정적 타이핑으로 프로그래머가 어떤 데이터 타입의 변수를 사용할지 선언을 통해서 컴퓨터에게 전부 알려줘야 하고 사용할 때도 변수 타입에 맞게 데이터를 저장해야한다. 하지만 파이썬의 경우 동적 타이핑 언어로서 프로그램 실행시간에 변수의 데이터 타입이 결정된다. 따라서 프로그래머가 따로 변수 선언을 할 필요가 없다.
그렇다면 파이썬은 어떻게 변수에 대한 메모리 할당을 하는가? 바로 참조의 방식이다. 만약 우리가 num이라는 변수를 만들고 싶고 그 변수의 값에 5를 넣고 싶다고 가정하자. 지금까지 설명한 형태라면 num이라는 이름을 가진 메모리 공간에 10이라는 데이터의 값이 담겨있는 형태를 생각하게 될 것이다. 하지만 파이썬의 경우 그렇게 동작하지 않는다. 메모리 공간 두 개가 할당이 된다. 하나는 num이라는 이름을 가진 메모리 공간이고 하나는 10이라는 데이터가 들어가 있는 공간이다. 10이라는 데이터를 가진 공간은 id 값을 가지게 되는데 이 값은 고정되어 있는 값이다. num이라는 변수의 메모리 공간은 10이라는 데이터의 id 값을 저장한다. 하지만 나중에 읽을 때는 id값을 따라가서 나오는 10이라는 값을 읽게 된다. 따라서 파이썬의 모든 변수들은 이러한 id 데이터를 저장하는 변수 타입을 가지고 있다. 그러므로 따로 변수 선언을 할 필요가 없는 것이다. 변수에 어떤 값을 넣고 싶던 지에 상관없이 변수는 그 값에 해당하는 id 값을 저장하기 때문이다. 그런데 이러한 id에 저장된 값은 데이터 이외에도 값의 타입, 참조 카운트 등을 가지고 있는 값이다. 만약 5라는 값이 특정 id를 가지고 있는데 여기에는 타입이 정수라는 것과 값이 5다 라는 정보 외에도 여러 정보가 들어가 있다. 그러므로 이 id에 해당하는 메모리 공간을 객체라고 지정한다. 따라서 파이썬은 변수에 어떤 종류의 데이터를 저장하든 상관없이 변수 입장에서는 데이터를 직접 참조할 수 없고 이 객체를 참조하게 되는 것이다.
파이썬은 모든 데이터를 객체로 다루기 때문에 객체에 대한 이해가 필수적이다. 뒤의 장으로 넘어가면서 클래스 부분에서 객체 지향에 대해 배우겠지만 간단하게 이해만 해보자. 객체는 묶음이라고 할 수 있다. 특히 속성과 메소드의 집합으로 구성이 되었다고 할 수 있다. 데이터를 저장하는 변수를 가질 수도 있고 데이터를 이용하는 함수를 가질 수도 있다. 물론 두 가지를 모두 가질 수도 있다. 객체가 가진 메소드를 이용하면 간단하게 데이터를 조작할 수도 있다. 파이썬의 모든 데이터는 객체고 이런 유용한 메소드들을 손쉽게 확인하고 사용할 수 있다. 이런 점은 파이썬의 엄청난 큰 강점 중 하나이다. 뒤로 가면서 계속 배울 것이다.
'파이썬' 카테고리의 다른 글
파이썬(python) 강의 6장 - 컨테이너와 반복문 - (0) | 2017.05.19 |
---|---|
파이썬(python) 강의 5장 - 입력과 출력 & 논리 연산자 - (0) | 2017.05.16 |
파이썬(python) 강의 4장 - 비교 연산자와 조건문 - (0) | 2017.05.16 |
파이썬(python) 강의 3장 - 문자열과 데이터 형 - (0) | 2017.05.16 |
파이썬(python) 강의 1장 - 코드를 읽기 위한 기초 - (0) | 2017.04.07 |