IT /파이썬 강의

파이썬 강의 2편: 변수와 데이터 타입

· 7분 읽기
#파이썬 #변수 #데이터타입 #기초

파이썬 강의 2편: 변수와 데이터 타입

변수가 뭔지

“변수는 값을 저장하는 상자”라는 설명을 처음 들었을 때 솔직히 잘 안 와닿았습니다. 코드를 직접 쳐보고 나서야 아, 이름을 붙여서 값을 꺼내 쓸 수 있게 하는 거구나 하고 이해했습니다.

age = 25  # "age"라는 이름으로 25를 저장
name = "홍길동"  # "name"이라는 이름으로 "홍길동"을 저장

이게 전부입니다. 파이썬에서 변수 선언은 이름 쓰고 = 쓰고 값 넣으면 끝입니다.

C언어랑 비교하면 바로 느껴지는 차이

처음에 C언어 예제를 봤을 때 파이썬이 왜 입문자한테 편하다고 하는지 바로 이해했습니다.

// C언어: 타입을 미리 지정해야 함
int age = 25;
float height = 175.5f;
char grade = 'A';
# 파이썬: 그냥 값을 넣으면 됨
age = 25
height = 175.5
grade = 'A'

타입 선언이 없으니까 처음부터 “이 데이터가 뭔지”에 집중할 수 있습니다. int가 뭔지 float가 뭔지 먼저 외우지 않아도 되니까요.

변수 선언

name = "홍길동"
age = 25
height = 175.5
is_student = True

이게 다입니다. 따로 뭘 더 적을 필요 없습니다.

데이터 타입 종류

파이썬이 알아서 타입을 정해주긴 하는데, 어떤 타입들이 있는지는 알아둬야 합니다. 나중에 타입 때문에 에러 나는 경우가 꽤 있어서요.

정수 (int)

소수점 없는 숫자입니다.

age = 25
count = -10
big_number = 1000000
temperature = -5

print(type(age))  # <class 'int'>

파이썬은 정수 크기 제한이 거의 없습니다. 다른 언어처럼 long 타입이 따로 있는 것도 아니고 그냥 전부 int입니다. 이것도 처음에 좀 신기했습니다.

실수 (float)

소수점 있는 숫자입니다.

height = 175.5
pi = 3.14159
temperature = -5.5
price = 1234.56

print(type(height))  # <class 'float'>

소수점이 하나라도 있으면 자동으로 float가 됩니다. 1.5e3 같은 과학적 표기법도 됩니다 (결과는 1500.0).

문자열 (str)

글자를 다루는 타입입니다.

name = "홍길동"
message = '안녕하세요'
multiline = """여러 줄
문자열입니다"""

print(type(name))  # <class 'str'>

작은따옴표(')든 큰따옴표(")든 상관없습니다. 편한 걸 쓰면 됩니다. 여러 줄 쓰고 싶으면 삼중따옴표를 씁니다.

# 다 같은 문자열
text1 = "Hello"
text2 = 'Hello'
text3 = """Hello"""

# 여러 줄
poem = """동해물과 백두산이
마르고 닳도록
하느님이 보우하사
우리나라 만세"""

불린 (bool)

참/거짓만 담는 타입입니다.

is_student = True
is_working = False
is_raining = True

print(type(is_student))  # <class 'bool'>

여기서 주의할 점 하나: TrueFalse첫 글자가 대문자여야 합니다. true라고 쓰면 에러 납니다. 처음에 다른 언어 보다가 소문자로 써서 왜 안 되지 한 적이 있습니다.

리스트 (list)

여러 값을 순서대로 묶어서 저장합니다.

numbers = [1, 2, 3, 4, 5]
names = ["홍길동", "김철수", "이영희"]
mixed = [1, "문자열", 3.14, True]  # 다양한 타입 섞어서 가능

print(type(numbers))  # <class 'list'>

대괄호 []로 감싸고, 타입을 섞어서 넣을 수 있다는 게 파이썬 리스트의 특징입니다.

딕셔너리 (dict)

키-값 쌍으로 저장합니다. 이름으로 값을 찾을 수 있어서 편합니다.

student = {
    "name": "홍길동",
    "age": 25,
    "grade": "A"
}

print(type(student))  # <class 'dict'>

중괄호 {}를 쓰고, 키로 값을 꺼내 쓸 수 있습니다.

변수 이름 짓기

변수 이름 아무렇게나 지으면 나중에 코드 읽을 때 고생합니다.

규칙

  1. 영문자, 숫자, 언더스코어(_)만 사용 가능
  2. 숫자로 시작할 수 없음
  3. if, for, while, def 같은 예약어 사용 불가

되는 것들:

student_name = "홍길동"    # 의미가 명확함
student_age = 25           # 언더스코어로 단어 구분
max_score = 100            # 여러 단어는 이렇게
totalCount = 50            # 이것도 되긴 하는데 파이썬에서는 언더스코어 스타일 추천

안 되는 것들:

2name = "홍길동"          # 숫자로 시작 -- 안 됨
student-name = "홍길동"    # 하이픈 -- 안 됨
if = 10                   # 예약어 -- 안 됨
a = 10                    # 되긴 하는데 나중에 뭔지 모름

파이썬에서는 student_age 같은 스네이크 케이스가 표준입니다. studentAge 같은 카멜 케이스는 자바 스타일이라 파이썬에서는 잘 안 씁니다.

타입 확인

type() 함수로 확인합니다.

age = 25
name = "홍길동"
height = 175.5
is_student = True

print(type(age))        # <class 'int'>
print(type(name))       # <class 'str'>
print(type(height))     # <class 'float'>
print(type(is_student)) # <class 'bool'>

디버깅할 때 특히 유용합니다. 에러가 나면 일단 type() 찍어보는 습관을 들이면 원인을 빨리 찾을 수 있습니다.

타입 변환

처음에 타입 변환이랑 타입 캐스팅이 같은 건지 헷갈렸는데, 파이썬에서는 그냥 int(), str(), float() 같은 함수를 써서 바꾸는 걸 타입 변환이라고 부릅니다.

# 정수를 문자열로
age = 25
age_str = str(age)
print(age_str, type(age_str))  # 25 <class 'str'>

# 문자열을 정수로
number_str = "100"
number = int(number_str)
print(number, type(number))  # 100 <class 'int'>

# 정수를 실수로
num = 10
num_float = float(num)
print(num_float, type(num_float))  # 10.0 <class 'float'>

# 실수를 정수로 (소수점 버림)
pi = 3.14159
pi_int = int(pi)
print(pi_int)  # 3 (소수점이 버려짐)

자주 쓰는 것들:

  • str(): 문자열로
  • int(): 정수로
  • float(): 실수로
  • bool(): 불린으로

int(3.14)하면 3이 됩니다. 반올림이 아니라 버림이라는 거 주의해야 합니다. 처음에 반올림인 줄 알고 한참 삽질한 적이 있습니다.

값 변경

변수는 언제든 값을 바꿀 수 있습니다. 파이썬은 타입까지 바꿀 수 있습니다.

age = 25
print(age)  # 25

age = 26
print(age)  # 26

# 타입도 바꿀 수 있음
age = "스물여섯"
print(age, type(age))  # 스물여섯 <class 'str'>

C언어에서는 int로 선언한 변수에 문자열 못 넣는데 파이썬은 됩니다. 편하긴 한데 나중에 실수로 타입이 바뀌어서 에러 나는 경우도 있어서, 이건 양날의 검이긴 합니다.

여러 변수 한 번에 할당

# 같은 값 넣기
a = b = c = 10
print(a, b, c)  # 10 10 10

# 다른 값 넣기 (언패킹)
name, age, height = "홍길동", 25, 175.5
print(name, age, height)  # 홍길동 25 175.5

# 값 교환 -- 이거 진짜 편함
x = 10
y = 20
x, y = y, x  # 한 줄로 교환
print(x, y)  # 20 10

C언어에서 값 교환하려면 임시 변수를 써야 합니다:

// C언어: 임시 변수 필요
int temp = x;
x = y;
y = temp;
# 파이썬: 한 줄
x, y = y, x

이런 거 볼 때마다 파이썬 문법이 확실히 간결하긴 하다고 느낍니다.

예제: 학생 정보 관리

# 학생 정보 변수 선언
student_name = "홍길동"
student_age = 20
student_score = 85.5
is_passed = True

# 정보 출력
print("=== 학생 정보 ===")
print("이름:", student_name)
print("나이:", student_age, "세")
print("점수:", student_score, "점")
print("합격 여부:", "합격" if is_passed else "불합격")
print("=================")

# 정보 업데이트
student_age = 21
student_score = 90.0

print("\n=== 업데이트된 정보 ===")
print("나이:", student_age, "세")
print("점수:", student_score, "점")

출력:

=== 학생 정보 ===
이름: 홍길동
나이: 20 세
점수: 85.5 점
합격 여부: 합격
=================

=== 업데이트된 정보 ===
나이: 21 세
점수: 90.0 점

예제: 원의 넓이 계산

# 원의 넓이 계산
radius = 5
pi = 3.14159
area = pi * radius * radius

print("반지름:", radius)
print("원의 넓이:", area)
print("원의 넓이 (소수점 2자리):", round(area, 2))

# 사각형의 넓이 계산
width = 10
height = 5
rectangle_area = width * height

print("\n사각형의 넓이:", rectangle_area)

출력:

반지름: 5
원의 넓이: 78.53975
원의 넓이 (소수점 2자리): 78.54

사각형의 넓이: 50

예제: 타입 변환 써보기

# input()은 항상 문자열을 반환함 -- 이거 모르면 에러 남
age_str = "25"  # 문자열
print("나이 (문자열):", age_str, type(age_str))

# 정수로 변환
age = int(age_str)
print("나이 (정수):", age, type(age))

# 내년 나이 계산
next_year_age = age + 1
print("내년 나이:", next_year_age)

# 문자열과 숫자 결합
message = "내년에는 " + str(next_year_age) + "세가 됩니다!"
print(message)

출력:

나이 (문자열): 25 <class 'str'>
나이 (정수): 25 <class 'int'>
내년 나이: 26
내년에는 26세가 됩니다!

문자열이랑 숫자를 +로 붙이려면 숫자 쪽을 str()로 바꿔줘야 합니다. 이거 안 하면 TypeError 나옵니다.

변수가 메모리에서 어떻게 작동하는지

좀 더 깊은 얘기인데 알아두면 나중에 헷갈리는 상황을 줄일 수 있습니다.

a = 10
b = a  # b는 a와 같은 객체를 참조
print(a, b)  # 10 10

a = 20  # a는 새로운 객체를 참조
print(a, b)  # 20 10 (b는 여전히 10)

b = a 하면 b가 a의 값을 “복사”한다기보다, 같은 값을 가리킨다고 보는 게 맞습니다. 그런데 a = 20을 하면 a만 새 값을 가리키게 되고 b는 그대로 10을 가리키고 있습니다. 처음에 이게 좀 헷갈렸는데 코드로 직접 쳐보니까 금방 이해됐습니다.

잘 틀리는 것들 모음

문자열이랑 숫자 연산

age = "25"  # 이건 문자열
# next_age = age + 1  # 에러남. 문자열 + 숫자 안 됨
next_age = int(age) + 1  # 타입 변환하고 연산해야 함

변수명 오타

student_age = 20
# print(student_ag)  # 오타 -- NameError
print(student_age)  # 맞는 이름

예약어 쓰기

# def = 10  # def는 예약어라 변수명으로 못 씀
def_count = 10  # 이런 식으로 바꿔야 함

input() 타입 안 바꾸기

user_input = input("나이를 입력하세요: ")  # 이건 항상 문자열임
# age = user_input + 1  # 에러
age = int(user_input) + 1  # int()로 바꿔야 연산 가능

연습 문제

직접 쳐보면 좋은 것들:

  1. 올해 나이와 내년 나이를 출력하는 코드
  2. 키와 몸무게로 BMI 계산하기 (BMI = 몸무게(kg) / 키(m)의 제곱)
  3. 문자열 “100”을 정수로 바꾸고, 50 더한 뒤, 다시 문자열로 바꾸기
# 1번
age = 25
print("올해 나이:", age)
print("내년 나이:", age + 1)

# 2번
weight = 70.0
height = 1.75
bmi = weight / (height ** 2)
print("BMI:", round(bmi, 2))

# 3번
num_str = "100"
num = int(num_str)
result = num + 50
result_str = str(result)
print(result_str)

변수 쪽은 한번 손에 붙으면 계속 반복해서 쓰게 됩니다. 조건문이든 함수든 결국 변수 위에서 돌아가는 거라, 여기서 type() 찍어보면서 감 잡아두면 뒤에 가서 편합니다.