이 글은 양태환님의 저서인 “컴퓨터 사이언스 부트캠프 with 파이썬”을 보고 공부한 내용을 스스로 정리한 글 입니다

변수

메모리 미리 보기

  • 변수(variable)나 참조(reference)의 개념을 명확히 이해하려면 메모리부터 이해해야 한다
  • 컴퓨터는 1과 0으로 이루어진 데이터를 처리한다
  • 1과 0을 표현할 수 있는 데이터 단위를 비트(bit)라고 부른다
    • 1비트는 0 혹은 1이다
  • 비트가 여덟 개 모이면 바이트(byte)
    • 1바이트는 0과 1이 총 여덟 개로 구성되어 있다
  • 기가바이트(gigabyte)는 1,073,741,824 (= 1,024 X 1,024 X 1,024) 바이트이다

스스로 학습

  • 1Bit [비트] = 1과 0을 표현할 수 있는 데이터 단위
  • 1Byte [바이트] = 8 비트
  • 1KB [킬로바이트] = $2^{10}$ = 1,024 바이트
  • 1MB [메가바이트] = $2^{20}$ = 1,048,576 바이트
  • 1GB [기가바이트] = $2^{30}$ = 1,073,741,824 바이트

32비트와 64비트의 의미

  • 데이터를 한 번에 몇 개 보낼 수 있는지를 나타내는 지표가 32비트와 64비트이다
    • 한 번에 보낼 수 있는 데이터 개수가 32비트면 32비트 컴퓨터
    • 한 번에 보낼 수 있는 데이터 개수가 64비트면 64비트 컴퓨터
  • 32비트 컴퓨터는 메모리 주소를 32비트로 표현
  • 64비트 컴퓨터는 메모리 주소를 64비트로 표현

예시를 통한 설명

  • 8비트 컴퓨터라면 데이터가 지나가는 통로가 비트 단위로 여덟 개 있다고 생각하면 된다
  • 고속도로에서 한 번에 달릴 수 있는 차가 2차선보다 4차선이 많은 것처럼 비트 수가 높을수록 한 번에 전송할 수 있는 데이터 양이 많아진다

메모리에 우편번호를 매긴다

  • 우편번호는 다섯 자리수이다. 우편번호만큼 메모리의 주소 개념을 잘 설명하는 개념도 없다
  • 우편번호는 우리나라 땅을 다섯 자릿수, 예를 들면 한 구역을 15235 형태로 나타낸다
  • 아파트 한 채의 한 호(A동 701호)까지는 나타낼 수 없지만, 어느 동에 있는 어느 아파트인지는 구분할 수 있다

우편번호로 주소를 몇 개까지 나타낼 수 있을까?

  • 우편번호는 다섯 자릿수 이므로 $10^5$개
    • 즉, 00000 ~ 99999 구역을 총 100,000개까지 가리킬 수 있다

메모리를 우리나라라고 생각해 보자

  • 메모리에 우편번호처럼 주소를 부여해보자
    • 대신 컴퓨터는 0과 1밖에 모르므로 컴퓨터에 주소를 알려 주려면 주소도 2진수로 나타내야 한다
    • 메모리 주소 한 개는 메모리에서 1바이트를 가리킨다
    • 우편번호 한 개가 일정 구역 한 곳을 가리키듯이
  • 예를 들어 2진수 여덟 개로 메모리 주소를 표현한 8비트 컴퓨터
    • 0000 0001 = 1byte
    • 0000 0010 = 1byte
    • 0000 0011 = 1byte
    • 0000 0100 = 1byte
  • 32비트 컴퓨터라면 주소 하나를 나타냐는 데 2진수 서른두 자릿수를 사용한다
    • 그러므로 32비트에서 나타낼 수 있는 주소 개수는 $2^{32}$ (= 4,294,967,296) 바이트를 표현 할 수 있다
      • 4,294,967,296 바이트는 4 X 1,024 X 1,024 X 1,024바이트로 풀어 쓸 수 있다
        • 4 X 1,024 X 1,024 X 1,024바이트는 4GB
  • 즉, 32비트로는 총 4GB 메모리를 가리킬 수 있다
  • 그러므로 32비트 컴퓨터에서는 4GB보다 큰 메모리를 더 설치해도 무용지물이다
    • 32비트 컴퓨터에 4GB 메모리에 추가로 4GB 메모리를 더 설치해도 메모리 주소를 배정받지 못해 접근조차 할 수 없다
  • 64비트 컴퓨터는 이론으로만 보면 $2^{64}$ (=18,446,744,073,709,551,616) 바이트를 가리킬 수 있으므로 크기가 훨씬 큰 램을 설치해도 모두 사용할 수 잇다

변수의 의미

  • 변수(variable)란 데이터를 저장할 수 있는 메모리 공간을 의미한다
    • 변수가 단순한 이름이 아니라 메모리 공간 자체를 의미한다

  • 변수는 숫자와 문자뿐만 아니라 객체, 심지어 함수까지도 담을 수 있다
  • 변수에 담긴 값이나 가리키는 대상은 언제라도 변경될 수 있다
    • 변경될 수 있으므로 변수이다

다른 언어에서 말하는 변수와 파이썬에서 말하는 변수는 약간 차이가 난다

  • C 언어에서 말하는 변수
    • int num = 5;
      • num이라는 ‘변수’에 5라는 ‘값’이 담겨 있다

파이썬에서의 변수 :

이름과 값 객체

  • 파이썬에서 쓰는 변수는 이름과 값 객체로 나눠진다

  • 파이썬에서 변수라고 부르는 것은 사 ‘이름’이다
    • num = 5
    • num이라는 ‘이름’은 5라는 ‘값 객체’를 가리키게 된다

    • num은 5라는 값을 담고 있는 메모리 공간을 의미하지 않는다

    • 값 객체는 다른 메모리 공간에 있다
num = 5
type(num)
int
  • 이 코드는 num이라는 변수의 타입이 상수가 아니라 int라는 클래스의 인스턴스(객체)라는 것을 알려준다

  • Computer-Science-1 에서는 메모리의 대략적인 개념과 프로그래밍에서 중요한 요소 중 하나인 변수에 대해 학습
  • Computer-Science-1 에서는 일반적인 변수와는 다른 파이썬에서의 변수에 대해 학습

학습 후 나의 생각

  • 변수에 대해 어렵게 생각하고 헷갈리는 개념이 있었는데 학습후 어떤 개념인지 잘 파악 되었다
  • 컴퓨터에서 사용되는 메모리의 종류와 개념에 대해 알게되었다
  • 32비트 컴퓨터와 64비트 컴퓨터로 예시를 들어 학습한 32비트와 64비트의 의미가 무엇인지 알게되었다
  • 파이썬에서의 변수의 의미와 개념이 다른 언어와 다르다는 것을 알게되었고 파이썬에서는 어떤 개념으로 이루어졌는지 알게 되었다