이 글의 작성자는 C/C++ 프로그래밍을 하던 사람이다. 이 글은 Python을 복습하며 작성하는 글이니, 부족한 부분이 있으면 얼마든지 피드백을 주시기 바란다.

 

변수(Variable) : 객체의 이름

Python은 객체를 이용하여 데이터를 표현한다는 것을 알았다. 그러면 객체를 사용하기 위해서는 어떻게 해야할까?

일을 하다가 어떤 물건이 필요해져서 동료에게 물건을 가져다 달라고 하는 상황이라고 생각해보자. 그러면 동료에게 뭐라 말해야 할까?

필요한 물건의 이름을 가져다 줘!”

라고 말하는 것이 일반적인 경우일 것이다.

가위가 필요하면 “가위를 가져다 줘!”라고 할 것이고,
펜이 필요하면 “을 가져다 줘!”라고 할 것이다.

즉, 필요한 물건의 이름을 부르는 과정이 필요하다.

그렇다면 객체의 이름은 어떻게 정해지는 걸까? 객체 고유의 값인 아이덴티티가 있으니 그걸로 부르는 것일까?
아니다. 아이덴티티는 매번 바뀌는 값이다. 아이덴티티는 객체의 이름이 될 수 없다. 그러면 어떻게 정할까?

 

결론을 말하자면, 객체의 이름은 여러분이 정할 수 있다. 객체의 이름을 정한 뒤, 해당 이름을 쓸 객체를 지정해주면 된다.

3의 값을 가지는 정수형 객체에 a라는 이름을 붙여주면 다음과 같이 표현할 수 있을 것이다.

객체 이름

Python에서는 위와 같이 이름을 붙이는 과정을 다음과 같이 표현한다.

a = 5

객체 5a라는 이름을 붙여준다 의미이다.
다르게 말하면, a라는 이름에 객체 5를 대입한다라고도 할 수 있다.

수학에서의 A = B의 의미는 “A와 B는 같다” 라는 의미이지만, 프로그래밍 언어에서의 A = B의 의미는 “A에 B를 대입한다”라는 의미다. 즉, A = B의 의미와 B = A의 의미는 다르니 주의하자. 프로그래밍을 처음하는 사람들이 자주 저지를 수 있는 실수이다.

위와 같이 객체이 붙이는 이름을 변수(Variable)이라고 부른다. 그리고 변수의 이름은 프로그래머가 정할 수 있다.

위의 코드에서 ab가 되든 c가 되든 상관없다.

다른 언어를 배우고 온 사람이라면, 선언을 어디서 하냐고 물어볼 수 있다. 결론만 말하자면, Python은 선언이 필요없다. 변수에 객체를 대입하면 그것이 곧 선언이다.

 

변수 작명 규칙

하지만 변수 이름을 완전히 자유롭게 정할 수는 없다. Python, 아니 프로그래밍 언어의 세계에는 변수의 이름을 마음대로 정할 수는 없다. 다음의 규칙에 따라 변수의 이름을 정해야 한다.

위의 규칙만 지킨다면, 변수의 이름은 이제 여러분 마음대로 정할 수 있다.


  • 변수의 이름에는 다음 문자만 사용할 수 있다.
    • 영어의 대/소문자 ( a~z, A~Z )
      • 대/소문자를 구분한다
    • 숫자 ( 0~9 )
    • 언더스코어 ( _ )
  • 이름은 숫자로 시작할 수 없다

  • Python의 예약어는 사용할 수 없다

다음은 가능한 변수 이름들이다.

  • a
  • a2
  • a_e_r_33
  • _abc (하지만 자제하자)

다음은 불가능한 변수 이름들이다.

  • 2a (숫자로 시작한다)
  • ae! (특수문자가 들어갔다)
  • is (is는 예약어이다)

 

추가로 읽을 것들

  • 객체는 하나 이상의 이름을 가질 수 있다

다음과 같은 코드도 가능하다.

a = 3
b = 3
c = 3

이렇게 되면, 객체 3의 이름은 a도 되고 b도 되고 c도 된다.

객체 이름

 

  • 이름 짓기는 신중하게

규칙만 지키면 이름을 마음대로 지을 수 있다고 해서 진짜로 마음대로 짓게 된다면, 나중에 본인이 작성한 코드도 이해하지 못하는 일이 발생할 수도 있다. 특히 남들과 함께 작업하는 코드라면 더더욱 신경을 써야 한다.

하지만 처음부터 잘 하기는 어렵다. 지금은 이름을 잘 지어야 한다라는 것만 인지하고 넘어가자.

 

  • 가비지 컬렉션이 발생하는 때

지난 포스트에서 가비지 컬렉션이 언제 일어나는지에 대해 이야기하다 말았다. 왜냐하면 변수의 개념이 필요했기 때문이다.

무언가를 나타내는 객체 Pen이 있다고 치자.

a = Pen

이러면 Pen이라는 객체는 a라는 이름을 하나 가지고 있다. 그리고 다음과 같은 코드가 뒤에 온다고 생각해보자.

a = 3

이렇게 되면, a라는 이름표는 Pen 객체로부터 떨어져 나와서 정수형 객체 3으로 옮겨간다. 이렇게 되면 Pen 객체는 어떤 이름을 가지고 있을까? 아무런 이름도 가지지 못하게 된다.

위와 같이 특정 객체가 아무런 이름도 가지지 못해서 더 이상 이름으로는 객체를 호출하지 못하게 될 때, 가비지 컬렉션에 의해 Pen 객체는 사라지게 된다.

뭔가 있어보이는 말로 표현하자면, 레퍼런스 카운팅(Reference Counting) 을 이용한다고 말할 수 있다.

지금 당장 이 개념을 이해할 필요는 없다. 대충 이런게 있다고 알고 넘어가자. 나중에 공부하다 보면 “이런게 있었지!” 하고 떠올릴 수만 있다면 괜찮다.

 

Categories:

Updated:

Comments