
데이터란 뭔가를 설명하는데 필요한 정보이다
데이터는 사람들이 생각하는 모든 범주의 정보 information를 포함한다. 일반적으로 알고 싶은 어떤 대상을 설명하는 정보들이다. 예를 들어, 알고 싶은 어떤 사람이 있다. 무엇이 궁금한가? 그 사람의 이름은? (홍길동) 그 사람의 나이는? (24세) 그 사람의 키는? (170cm) 그 사람의 머리카락 색깔은? (black)
여기서 홍길동, 24, 170, black 은 어떤 대상 object를 설명하는 데이터로서, 보통 상수(constant)라고 부른다. 상수(常數)란 항상 일정한 값이란 의미를 나타내며, 시시때때로 변하는 값을 나타내는 변수(變數, variable)과 대치되는 용어이다.
또 다른 예를 들어 보자. 여기 어떤 차가 있다. 이 차를 설명하는데 필요한 데이터는 무엇이 있을까? 이 차의 배기량은? (2,000CC) 이 차의 색깔은? (은색) 이 차가 만들어진 연도는? (2018년) 이 차의 제조사는? (A사) 등등. 여기서 2000, 은색, 2018, A사 등이 상수 데이터이다.
데이터는 크게 숫자 데이터, 문자 데이터, 불리언 데이터로 구분할 수 있다
사람들이 사용하는 데이터는 크게 숫자 데이터, 문자 데이터, 불리언(boolean) 데이터로 구분할 수 있다. 일반적으로 숫자 데이터를 다시 정수(integer) 데이터와 실수(floating point) 데이터로 구분하는데 (변수 선언을 따로 하지 않는) 파이썬에서는 큰 의미가 없다. 위에서 본 데이터 중에 24, 170, 2000, 2018 등은 숫자 데이터이다.
위 데이터 중 홍길동, 은색, A사 등은 문자 데이터이다. 문자 데이터의 경우에는 기본적으로 홑따옴표를 데이터의 시작과 끝에 붙인다. 참고로, 컴퓨터는 모든 데이터를 0과 1의 2가지 심볼 만으로 표현하다 보니 숫자 데이터와 문자 데이터를 구별하지 않는다. 따라서, 문자 데이터의 경우에는 데이터의 앞과 뒤에 따옴표를 붙여서 ‘이 데이터는 문자 데이터이다’라는 것을 컴퓨터에 알려주어야 한다. 예를 들어, 문자 데이터 홍길동은 '홍길동'이라고 나타낸다는 뜻이다.
불리언 데이터는 참(True)과 거짓(False)을 말한다. 중, 고등학교에서 수학 수업에서 배웠던 것 중에 명제(proposition)라는 것이 있다. 잠시 기억을 더듬어 보면, 명제란 참, 거짓을 판단할 수 있는 문장이나 수식으로 정의된다. 즉, 어떤 문장이 맞는지 틀린지 판단할 수 있으면 그 문장을 명제라고 한다. 명제가 맞는 경우 참(True)인 명제라고 하고, 틀린 경우 거짓(False) 명제라고 부른다. 여기서의 참, 거짓을 논리학을 집대성한 영국 수학자 George Boole의 이름을 따서 불리언 상수라고 부른다.
데이터를 가리키는 이름을 변수(variable)라고 부른다
모든 데이터에는 이름이 붙는다. 여기서 이름은 변수명 variable name, 식별자 identifier, 또는 참조자 reference 등의 여러가지 명칭으로 불린다. 왜 이름이 붙을까? 사람들은 여러개를 서로 구별하기 위해서 이름을 붙인다. 만약 데이터가 1개 뿐이라면 그냥 그것(it)이라고 불러도 전혀 문제가 없겠지만, 2개 이상의 데이터를 서로 구별 identify 하기 위해서 각각의 상수 데이터에 이름을 부여하게 된다.
데이터에 이름을 부여하는 것을 assignment 라고 부르며, = 기호를 사용한다. 예를 들어, 아래의 코드와 같이 a = 24 라는 명령어는, 24라는 숫자 데이터를 만들고 그 데이터를 a 라는 이름으로 부르겠다는 의미이다. 여기에서 사용되는 = 기호는 좌변과 우변이 같다(equal)는 뜻으로 사용된 것이 아니다. # 참고로 좌변과 우변이 같다는 의미를 나타내는 기호는 == 이다. = 기호를 2개를 연달아 적는다.

우리가 a=24 라고 하면, 어떤 값 24를 앞으로는 a 라고 부르겠다는 뜻이다. 아래의 코드에서 In[24]: a=24 한 후에 실행된 In[25]: a+100이라는 명령어는 “우리가 a 라고 부르는 값에 100을 더하라”라는 명령어가 된다. 현재 우리가 a 라고 부르는 값은 무엇인가? 그렇다, 24이다. 따라서, In[25]: a+100 명령어는 24에 100을 더하여 124라는 결과를 보여준다.

변수의 이름은 2가지의 의미로 사용된다
위의 2개 명령어에서 동일하게 a 라는 단어가 사용되고 있지만, 그 용도는 다르다는데 유의해야 한다. In[24]: a=24에서 a 식별자는 바로 다음에 = 기호를 달고 있다. 반대로, In[25]: a+100에서 a 식별자는 = 기호 없이 사용되고 있다. 어떤 변수가 = 기호와 같이 사용되는 경우에는 = 기호의 우변에 있는 데이터를 = 기호의 좌변에 있는 이름으로 부르겠다는 뜻이다. 반대로, 혼자 사용된 식별자 a 는 (만약, a 가 어떤 데이터를 가리키고 있다면) a가 가리키는 데이터 값이 된다. 예를 들어, a가 24라는 값을 가리키고 있다면 = 기호 없이 혼자 쓰인 a 는 a가 가리키는 값, 줄여서 a 값, 인 24를 나타낸다.
Re-assignment
아래의 코드를 살펴보면, In[24]에서 a 라는 이름은 24라는 데이터를 가리키는데 사용하겠다고 선언한 후에, In[26]에서 a=200이라고 다시 assignement 하고 있다. 이 두 번째의 assignment는 어떻게 동작하는 것일까?

Assignment를 나타내는 = 기호의 의미 그대로, 새롭게 만들어진 200이라는 숫자 데이터를 앞으로 a 라고 부르겠다는 뜻이다. 이 명령어가 실행되면, 그 전에 a 라는 이름으로 불리워지던 데이터 (숫자 데이터 24를 말함) 는 더 이상 a 라는 이름으로 참조되지 못한다. 즉, 어떤 식별자에 새로운 데이터가 assignment 된 것이다. 이를 re-assignment 라고 부르는데, 이를 통해 해당 식별자가 가리키는 값이 바뀌게 된다. 즉, a의 값은 assignment 과정을 통해 값이 변할 수 있다는 뜻이다. 이러한 의미에서 a 와 같이 데이터를 가리키는 이름을 변수(變數)라고 부른다. 상수(常數) 라는 용어와 명확히 구별해야 하는 개념이다.
따라서, 기존의 식별자에 re-assignment 가 이루어지면, 이전에 그 이름으로 지칭되던 상수 데이터는 더 이상 참조할 수 없는 데이터가 된다. 더 이상 필요하지 않은 쓰레기 데이터라는 의미로 가비지(garbage, 쓰레기라는 뜻) 라고 불리며, 파이썬이 자동적으로 삭제한다.
Assignment의 동작을 확인해 보자
Assignment의 동작을 id( ) 함수를 이용해서 확인해 보자. id( )함수는 괄호 안에 변수의 이름을 넣으면 그 변수의 참조자(reference) 를 넘겨준다. 참조자는 각 데이터에 부여된 숫자로 만들어진 아이디(id, identity)라고 생각하면 된다. # 사람들이 숫자로 만들어진 주민등록번호, 우편번호, 전화번호, 학번 등의 아이디를 사용하고 있음을 떠올려 보라.
참조자는 주소(address)라고 생각해도 된다. 24라는 데이터의 참조자가 104503이라면 24라는 데이터가 104503이라는 주소가 가리키는 장소에 존재한다(저장되어 있다)라는 의미와 동일하게 생각해도 된다. 우리 반 친구 중에 "홍길동은 00아파트 104동 503호에 산다" 라는 말과 "24라는 데이터가 104503 번지에 저장되어 있다"라는 말은 의미상 동일하다. # 나중에 객체 개념을 다룰 때 조금더 보완 설명하도록 하겠다.
이를 id( )함수를 이용해사 간단하게 한번 확인해 보자.

In[3]: a=24에서 만들어진 데이터의 레퍼런스 값은 140733900449328이다. 그런데, In[5]에서 동일한 변수에 다른 값 200을 assignment 했다. 그리고 나서 a 변수의 id 값을 구했더니 아까의 레퍼런스 값과 다른 값을 보인다. 무슨 의미인가? 우리가 기존에 24라는 숫자 데이터를 가리키는 용도로 사용하던 a 라는 이름을, 이제는 다른 어떤 데이터 200을 가리키는 이름으로 사용하도록 바뀌었다는 뜻이다.
어떤 데이터가 만들어지면 그 데이터를 저장할 장소가 지정되고, 그 장소의 논리적 주소로 그 데이터의 레퍼런스가 만들어진다 (또는, 레퍼런스에 해당하는 메모리의 주소에 그 데이터가 저장된다.)
그런데, 그 데이터를 참조하기 위해 15자리의 숫자를 외워서 사용하기는 힘들다. 그래서, 일종의 별명 alias처럼 그 데이터의 이름을 짓는다. 사람들이 쉽게 기억할 수 있도록. 그렇게 만들어진 이름이 변수(variable)이다.
변수 이름을 짓는 규칙
식별자로 사용되는 이름은 그 이름이 가리키는 대상의 의미나 특징을 나타낼 수 있는 단어로 사용자가 마음대로 만들 수 있다. 단, 다음과 같은 몇가지 제약사항을 지켜야 한다.
첫째, 키워드 keywords 라고도 불리는 예약어들 (reserved words)은 식별자로 사용할 수 없다. 파이썬의 예약어로는 아래와 같이 for, if, return 등의 단어가 포함되어 있다
False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield
둘째, 파이썬은 대문자와 소문자를 구별한다. 즉 A 라는 변수 이름과 a 라는 변수 이름은 서로 다르다. 하지만, 식별자로는 소문자가 주로 사용되며, 특별한 경우에만 대문자를 사용한다. # 참고로, print(a, A) 라는 명령어는 a 값과 A 값을 화면에 출력하라는 뜻의 명령어이다.

셋째, 식별자의 첫 번째 글자는 대문자 A에서 Z 까지, 소문자 a에서 z까지, 그리고 언더스코어(_) 만 사용될 수 있다. 두 번째 글자부터는 첫 번째 글자가 될 수 있는 문자 이외에 0부터 9까지의 숫자 글자를 사용할 수 있다. 따라서, a, a10, abc_11, _a 등의 이름은 식별자로 사용될 수 있다.
넷째, 식별자를 구성하는 문자들 사이에 블랭크 blank를 포함하여 특수문자가 있으면 안된다. 예를 들어, abc def, abc@def와 같이 중간에 blank를 포함하거나 특수문자가 사용된 경우는 식별자로 사용될 수 없다.
다섯째, 여러 개의 단어를 묶어서 하나의 식별자로 사용하는 경우에는 캐멀 노테이션 (camel notation)이라고 해서 연속되는 각 단어의 첫 글자는 대문자를 사용한다. 단, 첫 단어의 첫 글자는 소문자를 쓴다. 이는 여러개의 단어가 사용되어 길어진 식별자를 사람들이 쉽게 읽고 식별하기 위해서 추천되는 사항이다. 즉, 어긴다고 하여 에러가 발생하는 것은 아니다. 예를 들어, find, max, from, list 의 4개 단어를 연결하여 식별자를 만드는 경우에 findMaxFromList의 형태가 추천된다는 뜻이다. findmaxfromlist 로 식별자를 만드는 경우에 비해 가독성이 높지 않은가? 세상의 모든 전문가들이 이렇게 쓰고 있으니 따르자 !!
'파이썬 (python)' 카테고리의 다른 글
[python 7] 파이썬 내장함수 built-in function (0) | 2020.02.20 |
---|---|
[python 6] 데이터와 연산 (0) | 2020.02.19 |
[python 4] 모든 프로그램은 변수와 함수로 구성된다 (0) | 2020.02.15 |
[python 3] 주피터 노트북 Jupyter Notebook (0) | 2020.02.14 |
[python 2] 파이썬 가상환경 설치와 ipython (0) | 2020.02.14 |