본문 바로가기

프로그래밍/Python

파이썬(Python) 기초 Step 1. 변수

○ 변수란?

변수는 프로그래밍을 하는데 있어서 가장 기초적이면서도 가장 중요한 개념입니다. 변수란 데이터를 저장할 수 있는 메모리 공간을 말하며, 이 메모리 공간 즉, 변수에는 변수 안에 어떠한 데어터가 저장되는지 알기 쉽도록 이름이 붙여집니다. 프로그램을 만들다보면 동일한 데이터를 여러 번 사용하는 경우가 많은데, 이러한 경우에 데이터를 계속해서 대입해서 사용하는 것 보다는 변수라는 메모리 공간에 데이터를 저장해놓고 필요할 때 메모리 공간에 저장해놓은 데이터를 참조하여 사용하는 것이 더 효율적이므로 변수를 사용하는 것입니다. 그리고 이 메모리 공간에 자신과 다른 개발자들이 이해하기 쉬운 이름을 붙이고, 그 이름을 통해서 참조를 하는 것입니다.

실제 코드에서는 age = 25와 같은 코드를 사용하여 변수에 데이터를 저장하는데, 좌항(age)는 변수의 이름이고, 우향(25)는 변수에 저장된 데이터의 값입니다. 그리고 가운데 연산자(=)는 할당 연산자 또는 대입 연산자(Assigment Operator)라고 하며, 수학에서의 '같다'라는 의미가 아닌, 25라는 값을 age라는 이름을 가진 변수 안에 할당한다는 의미를 갖고 있습니다. 


○ 변수를 사용하는 이유

우리가 age = 25라는 변수를 파이썬에게 전달하면 25를 한 메모리 블록에 0x0000004와 같은 형태로 저장합니다. 그리고 저장한 25라는 데이터를 다시 참조하고 싶을 때는 0x0000004와 같은 길고 외우기 어려운 메모리 주소를 사용하여 참조하는 것이 아니라, age라는 기억하기 쉬운 이름을 메모리 주소에 꼬리표처럼 붙여놓고, 이 이름을 사용하여 데이터 값인 25를 참조하는 것입니다. 

예를 들어, 단가 1,000원인 A라는 상품을 5개, 10개, 15개, 20개를 판매한다고 가정해봅시다. 이러한 가정을 엑셀 또는 표를 이용하여 나타내볼텐데, 셀의 수식 또는 변수 지정 없이 표현해보면 아래와 같습니다.

판매 수량(단위 : 개) 계산 식 결과(단위 : 원)
5 5 × 1,000 5,000
10 10 × 1,000  10,000
15 15 × 1,000 15,000
20 20 × 1,000 20,000

이번에는 위의 표에서 사용했던 예시를 파이썬 언어를 통해 구현해보도록 하겠습니다. 

print ("단가 : {}".format(1000))
print ("5개 가격 : {}".format(1000 * 5))
print ("10개 가격 : {}".format(1000 * 10))
print ("15개 가격 : {}".format(1000 * 15))
print ("20개 가격 : {}".format(1000 * 20))

이렇게 A라는 상품이 5개, 10개, 15개, 20개일 때의 판매가격을 계산해보았습니다. 만약에 이러한 목록이 단순히 4개만 있는 것이 아니라, 1 ~ 999개까지 존재한다면 어떻게 할까요? 또한 하루 종일 입력해서 1~999개의 수량에 대한 판매가격을 계산했지만, A라는 상품의 단가가 10% 하락했다면 어떻게 할까요? 위의 파이썬 코드에 입력된 가격(1000)을 전부 900원으로 바꿔야 할까요?

이러한 상황을 유연하게 해결하고자 우리에게는 반드시 변수가 필요합니다. 다음은 A라는 상품의 단가를 price_A라는 변수로 지정하여 파이썬 언어를 통해 구현해보도록 하겠습니다. 

price_A = 1000
print ("단가 : {}".format(price_A))
print ("5개 가격 : {}".format(price_A*5))
print ("10개 가격 : {}".format(price_A*10))
print ("15개 가격 : {}".format(price_A*15))
print ("20개 가격 : {}".format(price_A*20)

이렇게 price_A라는 변수에 1000이라는 값을 할당해보았습니다. 만약 가격이 10% 하락한다고 해도 현재 판매가격에는 price_A라는 변수를 참조하고 있기 때문에 변수에 할당된 값을 1000에서 900으로 바꿔주기만 한다면 모든 판매가격이 변경됩니다.

변수를 사용하는 또 다른 예시로는 사용자와 의사소통을 하는 인터엑티브 프로그램입니다. 이 프로그래밍은 유저의 이름과 나이를 직접 콘솔창에서 입력받아 변수에 저장한 후, 변수의 데이터를 출력하는 간단한 프로그램입니다. 

user_name = input('이름을 입력하세요.\n=> ')
print("안녕하세요. {}님.".format(user_name))
user_name = input('나이를 입력하세요.\n=> ')
print("{}님은 {} 세 이시군요.".format(user_name, user_age))

결과 콘솔창

그 외에도 데이터베이스에 저장된 데이터를 변수에 저장하고 참조하여 같은 데이터베이스 쿼리의 반복을 줄여줌으로써 데이터베이스와 네트워크의 부하를 줄여주는 역할을 합니다. 


○ 변수의 네이밍(naming) 규칙

파이썬 뿐만 아니라 대부분의 프로그래밍에서 변수의 이름을 정할때에는 규칙이 있습니다. 이러한 규칙은 크게 5가지가 있으며 다음과 같습니다.

[규칙 1] 변수의 이름은 스페이스를 포함할 수 없습니다. 만약, 여러 개의 단어를 변수의 이름으로 사용하고자 할 때 에는 언더스코어(_)를 입력하여 포기하거나, 띄어쓰기 없이 모든 단어를 붙여서 사용해야 합니다.
[규칙 2] 변수의 이름은 숫자, 알파벳, 그리고 언더스코어(_)만 포함할 수 있습니다.
[규칙 3] 변수의 이름은 숫자로 시작할 수 없습니다. 변수의 이름의 첫 번째 글자는 알파벳이나 언더스코어(_)만 사용할 수 있습니다.
[규칙 4] 파이썬 내부에서 사용하는 키워드를 변수의 이름으로 사용할 수 없습니다. 파이썬 내부에서 사용되는 키워드는 다음과 같은 것들이 있습니다. 

and, del, from, not, while, as, elif, global, or, with, assert, else, if, pass, yield, break, except, import, print, class, exec, in, raise, continue, finally, is, return, def, for, lambda, try

다른 프로그래밍언어 내부에서 사용하는 키워드 역시 그 프로그래밍에서 변수로 사용할 수 없습니다. 
[규칙 5] 변수의 이름은 대문자와 소문자를 구별합니다. 즉, 대문자 A와 소문자 a는 완전히 다른 변수가 되는 것입니다. 

이러한 규칙을 따르지 않을 경우에는 Systax(문법) 에러를 발생시킵니다. 이외에도 PEP8이라는 파이썬을 만든 귀도반 로썸이 정한 파이썬 코드 스타일 가이드가 있습니다. PEP8을 따르지 않을 경우 에러가 발생하지는 않지만 파이썬 코더라면 반드시 따르는 것을 권장하고 있습니다. 다음은 네이밍의 좋은 예와 나쁜 예입니다. 

좋은 예 나쁜 예 결과 및 이유

first_name 또는 firstname

first name

실행 결과로는 Syntax(문법) 에러를 발생시키며, 변수의 이름은 한 단어이어야 한다. - [규칙 1] 위반

first_name first-name

실행 결과로는 Syntax(문법) 에러를 발생시키며, 언더스코어(_) 이외의 특수문자는 사용할 수 없다. - [규칙 2] 위반

button_1 1_button

실행 결과로는 Syntax(문법) 에러를 발생시키며, 변수의 이름은 숫자로 시작할 수 없다. - [규칙 3] 위반

print_first print

실행 결과로는 Syntax(문법) 에러를 발생시키며, 파이썬이 사용하는 키워드를 사용할 수 없다. - [규칙  4] 위반

my_first_name My_fitst_name

결과로는 정상적으로 실행되나, 클래스 이름이나 컨스턴스 이외에는 대문자로 시작하지 않는다. - [PEP8] 위반 

my_last_name myLastName

결과로는 정상적으로 실행되나, 클래스 이름 이외에는 캐멀케이스를 사용하지 않는다. - [PEP8] 위반 

MAX_VALUE max_value

결과로는 정상적으로 실행되나, 컨스턴트(상수)의 이름은 모두 대문자를 사용하고, 언더스코어를 사용하여 단어들을 연결한다. - [PEP8] 위반 

character_1_energy c1e

결과로는 정상적으로 실행되나, 변수의 이름은 자신 및 타인이 의미를 쉽게 이해하도록 만든다. - [PEP8] 위반 

my_int int

결과로는 정상적으로 실행되나, 파이썬의 스탠다드 데이터 타입의 이름이나 내장함수 이름은 가독성을 떨어뜨리며, 코드 간의 혼동을 야기할 수 있기 때문에 사용하면 안 된다. - [PEP8] 위반 


○ 변수에 저장할 수 있는 데이터

다음은 변수에 저장할 수 있는 데이터 형식입니다. 

데이터 종류 프로그래밍에서의 데이터 형식 예시
정수 int int my_num = 12
실수 float float my_double = 12
문자열 string string = "Hello Coda"
참/거짓 Boolean true_or_false = True
리스트 list first_list = [1, 2, 3, 4, 5]
튜플 tuple first_tuple = (1, 2, 3, 4, 5)
사전 dict first_dict = {'gender' : 'male', 'age' : 25}
클래스 인스턴스 class_instance class_instance = MyClass()

함수까지도 변수에 저장할 수 있는데, 이렇게 파이썬에서는 거의 모든 오브젝트를 변수에 저장할 수 있습니다.