변수는 데이터를 저장하기 위해 메모리에 할당된 이름을 가진 공간입니다. 프로그래밍에서 변수는 특정 값을 저장하고, 이 값을 필요에 따라 참조하거나 변경할 수 있게 해줍니다. 예를 들어, 어떤 숫자, 문자열, 객체 등의 데이터를 저장하고 사용할 때 변수를 이용하여 그 데이터를 프로그램 내에서 쉽게 다루고 조작할 수 있습니다.
변수를 사용하는 이유는 코드의 가독성과 유지보수성을 높이고, 복잡한 계산이나 데이터 처리에서 동일한 값을 여러 번 사용할 때 효율성을 극대화하기 위함입니다. 변수를 정의하고 사용하는 것은 프로그래밍의 기본적인 과정이며, 이를 통해 복잡한 문제를 쉽게 해결할 수 있는 도구로 활용됩니다.
변수는 값을 저장하기 위해 이름을 부여한 메모리 공간입니다. 변수를 선언할 때는 = 기호를 사용하여 값을 할당합니다.
=은 할당연산자로 수학에서의 같다와는 다릅니다. (프로그램에서의 같다는 == =두개 입니다.)
코드:
x = 10
y = 20
print(x)
print(y)
결과:
10
20
x라는 변수이름에 10이 저장된 메모리 주소를 바인딩 하였습니다. print(x)로 값을 출력하면 저장된 메모리 주소가 아닌 메모리에 담긴 값을 출력합니다. 변수는 이름없는 데이터에 이름을 붙여 손쉽게 관리 할 수 있습니다.
그림으로 설명하면 아래와 같습니다. 10, 20은 컴퓨터의 메모리어딘가에 저장되어 있고 x,y는 그 값이 저장된 메모리의 주소를 카르킵니다.
값이 담긴 메모리 주소를 확인하고 싶을때는 id()함수를 사용합니다.
코드:
x = 10
y = 20
print(id(x))
print(id(y))
결과:
140725572549336
140725572549656
id로 변수를 확인해보면 변수의 값이 담긴 주소를 확인 할 수 있습니다. 주소를 실행할때마다 컴퓨터 마다 다르므로 내 컴퓨터에 지금 x,y이 값이 저장된 변수의 주소입니다.
파이썬의 변수는 저장할 데이터타입을 지정하지 않아도 됩니다. 데이터타입은 코드를 실행하는 시점에 런타임시에 파이썬이 데이터를 보고 자동으로 형식을 지정합니다. type() 함수를 이용하여 변수의 데이터타입을 확인할 수 있습니다.
코드:
integer_var = 42
print(integer_var)
print(type(integer_var))
결과:
42
<class 'int'>
실행결과 숫자의 값이 잘 출력되었고 정수형 숫자데이터 타입인 int형이 출력되었습니다. int는 integer의 약자로 정수형 숫자형 데이터 타입 입니다. <class 'int'>로 나온 이유는 파이썬에서 모든 데이터는 class입니다. 이부분은 class를 다루면서 자세하게 설명하도록 하겠습니다.
정수, 부동 소수점, 문자열, 리스트, 딕셔너리 등 다양한 데이터를 형을 지정하지 않고 바인딩 할 수 있습니다.
코드:
integer_var = 42
float_var = 3.14
string_var = "Hello, Python!"
list_var = [1, 2, 3, 4]
dict_var = {"name": "Alice", "age": 30}
print(integer_var, type(integer_var))
print(float_var, type(float_var))
print(string_var, type(string_var))
print(list_var, type(list_var))
print(dict_var, type(dict_var))
결과:
42 <class 'int'>
3.14 <class 'float'>
Hello, Python! <class 'str'>
[1, 2, 3, 4] <class 'list'>
{'name': 'Alice', 'age': 30} <class 'dict'>
정수형 숫자 int, 소수점 숫자 float, 문자열 str, 리스트형 list, 딕셔너리형 dict 데이터를 보고 파이썬이 데이터형식을 자동으로 할당하였습니다.
변수에 할당되는 값에 따라서 자동으로 데이터 타입을 결정하는 것을 [동적 타이핑] 이라고 명칭합니다. 움직일 "동" 을 사용하여 미리 데이터타입을 결정하는게 아닌 실행될때 데이터 타입을 보고 파이썬이 타입을 결정합니다.
변수이름을 만들때는 규칙이 있습니다. 아래는 올바른 변수의 이름입니다.
코드:
a = 3
a3 = 'hello'
my_var = 10
_my_var = 20
변수 이름은 문자, 숫자, 밑줄(_)만 사용할 수 있습니다.
변수의 이름은 숫자는 허용하지만 숫자로 시작할 수 없습니다.
아래는 변수를 만들때 틀린 변수 규칙입니다.
코드:
3a = 10
my variable = 60
a-3 = 20
a$ = 'hello'
if = 10
변수는 숫자로 시작할 수 없습니다. 3a 는 숫자로 시작하기때문에 틀렸습니다.
변수에는 공백이 들어갈 수 없습니다. my variable 은 공백이 포함되어 있기때문에 틀렸습니다.
변수에는 특수문자가 들어갈 수 없습니다. a-3은 - 특수문자로인해, a$은 $ 특수문자로 인해 틀렸습니다.
또한 파이썬의 키워드는 변수이름으로 사용할 수 없습니다. if = 10은 if는 조건문의 키워드로 변수로 사용할 수 없습니다.
아래는 파이썬의 키워드 목록 입니다. 키워드에 포함되어 있는 이름은 변수로 사용할 수 없습니다.
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
또한 변수의 이름은 대소문자를 구분합니다. 아래 대소문자가 조금씩 다른 3개의 변수를 만들고 각각 값을 출력해봅니다.
코드:
myhome = 10
myHome = 20
MyHome = 30
print(myhome,myHome,MyHome)
결과:
10 20 30
myhome, myHome, MyHome 은 대소문자로 구문되었습니다. 3개의 변수는 모두 다른 변수 입니다.
변수의 이름을 만들때는 의미있는 이름을 사용하는것이 좋습니다. 나이를 저장하고 출력하는 코드를 만들어 보도록 하겠습니다.
코드:
x = 10
age = 10
print("나이는",x,"살입니다.")
print("나이는",age,"살입니다.")
결과:
나이는 10 살입니다.
나이는 10 살입니다.
코드를 보면 결과는 동일합니다. 다만 나이를 저장하는 변수는 x 이름을 사용하고 또 하나는 age를 사용합니다. print를 이용하여 나이를 출력하였습니다. 예제코드는 코드가 몇줄되지 않아 단순하여 x의 값도 나이값을 저장하는 변수이고 age도 나이 값을 저장하는 변수인것을 알수있습니다. 다만 코드가 길어지면 print만을 사용하였을때 x 의 이름으로 변수의 이름을 지정하였을때는 x값을 무엇을 담은 값인지 짐작하기 어렵습니다. 그렇기 때문에 변수의 이름은 어디에서 보더라도 무슨값을 바인딩하고 있는지 짐작이 가능한 이름으로 만드는것이 좋습니다.
변수의 이름을 만들때 하나의 단어로 이루어진 변수가 있는 반면 여러개의 단어의 조합으로 이루어진 변수이름이 있을 수 있습니다. 아래와 같이 유저의 이름을 저장하는 username 변수와 유저의 핸드폰번호를 저장하는 userphonenumber 변수가 있어 각각의 값을 저장하였습니다.
username = "jang moon chul"
userphonenumber = "010-1234-5678"
변수의 이름이 여러개의 단어의 조합으로 되어 있지만 단어와 단어 사이에 띄어쓰기를 할 수 없어서 변수의 가독성이 좋지 않습니다. 파이썬에서는 단어와 단어 사이를 _(언더바)로 분리하여 가독성을 좋게합니다.
user_name = "jang moon chul"
user_phone_number = "010-1234-5678"
_(언더바)로 단어와 단어사이를 분리하였습니다. 여러 단어를 이어 붙이면 뱀 처럼 생겼다라고 해서 뱀의 영어인 스네이크 케이스 라고 부릅니다. 아래의 뱀 처럼 생겼습니다.
파이썬에서는 변수, 함수의 이름을 생성할때 스네이크 케이스를 사용하는 것을 가독성측면에서 추천합니다. 변수 또는 함수 이름을 만들때 스네이크 케이스 사용하지 않아도 문법적인 오류는 없지만 가독성적인 측면에서 사용하는 것을 추천합니다.
아직 함수부분은 배우지 않았지만 아래와 같이 함수의 이름을 만들때도 파이썬에서는 스네이크 케이스의 이름규칙을 사용합니다.
def say_hello():
print("hello")
say_hello()
함수를 호출할때는 함수이름() 소괄호를 붙여 호출합니다. 파이썬의 함수역시 이름을 만들때는 _(언더바)를 붙여 스케이크 케이스의 이름규칙을 권장합니다.
스네이크 케이스 이외에 C/C++ 언어에서 변수와 함수를 생성할때 사용하는 규칙인 캐멀 케이스가 있습니다.
userName = "jang moon chul"
userPhoneNumber = "010-1234-5678"
캐멀케이스는 처음 시작하는 단어는 소문자로 시작하고 단어가 변경될때 시작되는 단어를 대문자로 합니다.
캐멀은 낙타로 변수이름이 낙타 등처럼 생겼다 라고해서 붙여진 이름입니다. 파이썬에서는 캐멀케이스의 규칙은 사용하지 않습니다. 파이썬에서 권장하지 않는 방식이지 사용한다고 해서 문법상의 오류는 발생하지 않습니다. 회사나 팀에서 캐멀케이스를 사용해서 코딩스타일을 유지한다고 정했다면 파이썬의 권장사항보다 회사나 팀의 규칙을 먼저로 적용하여 개발 해도 됩니다.
스네이크 케이스, 캐멀 케이스 이외에 파스칼 케이스가 있습니다. 파스칼 케이스는 캐멀케이스와 비슷하지만 첫 단어도 대문자로 시작합니다. 아래는 파스칼 케이스로 만든 클래스 입니다. 레시피북 클래스를 만들고 객체를 생성하는 간단한 예제입니다. 지금은 코드를 이해하기 보다는 파스칼케이스의 변수이름 규칙으로 클래스를 생성한다 라는 부분만 이해를 하면 됩니다. 클래스는 책의 뒷부분에서 자세하게 다룹니다.
class RecipeBook:
pass
my_cook = RecipeBook()
파이칼 케이스는 스케이스 케이스인 뱀, 캐멀 케이스인 낙타와는 다르게 동물을 지칭하지는 않습니다. 파스칼 이라고 하는 프로그램 언어에서 주로 사용했던 이름 규칙이어서 파스칼 케이스로 명칭하였습니다. 파스칼 케이스는 클래스의 이름을 만들때 주로 사용합니다. 파이썬 뿐만 아니라 C++에서도 클래스의 이름을 생성할 때 파스칼 케이스를 사용합니다.
첫글자로 대문자로 시작하고 단어가 변경될때 변경된 단어의 첫글자를 대문자로 시작합니다.
지금까지는 변수의 이름 규칙에 대해 알아보았습니다. 변수는 변하는 값으로 변하지 않는 값인 상수도 있습니다. 파이썬에서 변하지 않는 상수의 이름을 만들때도 권장하는 규칙이 있습니다. 상수는 모두 대문자로 만들고 여러개의 단어가 있다면 _(언더바)를 붙여 스네이크 케이스로 만듭니다. 아래의 파이값과 빚의 속도를 저장하고 출력하는 코드를 작성합니다.
코드:
PI = 3.14159
SPEED_OF_LIGHT = 299792458
print("Pi:", PI)
print("Speed of Light:", SPEED_OF_LIGHT)
결과:
Pi: 3.14159
Speed of Light: 299792458
파이썬에서 상수의 이름을 만들때 대문자로 만들어 값이 변하지 않는 상수 임을 알려줍니다. 단 파이썬에서는 문법으로 값을 변하지 못하게 할 수는 없습니다. PI 도 실제로는 변수로 다른값으로 변경해서 사용할 수 있습니다. 모두 대문자로 이루어진 변수는 상수라고 생각하고 코드에서 값을 임의로 변경하지 않도록 합니다.
변수, 상수, 함수, 클래스의 이름을 파이썬 코드를 작성할때 동일한 형식으로 만들면 이점이 많습니다.
코드:
PI = 3.14159
user_phone_number = "010-1234-5678"
class RecipeBook:
pass
def say_hello():
print("hello")
print("Pi:", PI)
print("phone:", user_phone_number)
my_cook = RecipeBook()
say_hello()
변수, 상수, 함수, 클래스등이 포함된 코드에서 선언하는 부분이 아닌 사용하는 부분에서 코드의 스타일만을 보고선 변수인지, 상수인지, 함수인지, 클래스인지 확인하기 쉽니다.
위의 코드에서 PI는 모두 대문자로 이루어져 있기때문에 상수입니다. 상수이기때문에 값을 내가 변경하면 안되겠구나 생각하고 코드를 작성합니다. user_phone_number 의 경우 스네이크 케이스로 되어 있기때문에 변수입니다. 또한 RecipeBook()은 첫글자가 대문자로 시작하는 파스칼케이스 이고 ()호출을 하는 소괄호가 있기때문에 클래스 입니다. say_hello()는 스케이크 케이스로 되어 있고 호출하는 ()소괄호가 있기때문에 함수 입니다.
지금은 코드가 짧아 확 와닿지 않을 수 있지만 코드가 길어지고 외부에서 만든 함수, 클래스 등을 사용할때 무엇을 불러와 사용하고 있는지 이름의 형식만을 보고 알 수 있습니다.
'파이썬 > 파이썬 기초문법' 카테고리의 다른 글
파이썬 문법 - 3.4 문자열 고급 (1) | 2024.09.03 |
---|---|
파이썬 문법 - 3.3 문자열 (0) | 2024.08.29 |
파이썬 문법 - 3.2 숫자형 (1) | 2024.08.29 |
파이썬 문법 - 2.3 print 및 주석 연습문제 (0) | 2024.08.27 |
파이썬 문법 - 2.2 주석 (0) | 2024.08.27 |
파이썬 문법 - 2.1 print 함수로 출력하기 (0) | 2024.08.27 |