기억해야 할 정보를 안전하게 저장하고 형변환하는 규칙
컴퓨터가 아무리 복잡하고 대단한 계산을 할 수 있어도, 그 값을 기억해 두는 능력(변수)이 없다면 프로그램은 매번 모든 과정을 처음부터 다시 실행해야 할 것입니다.
또한 문자와 숫자를 엄격히 구분하는 컴퓨터의 규칙을 이해하고 형변환을 제어할 수 있어야 오류 없이 데이터를 정확하게 처리하는 스마트한 프로그램을 작성할 수 있습니다.
이사를 갈 때 물건들을 종류별로 상자에 담는 과정과 동일합니다.
프로그래밍은 필요할 때마다 이름표가 붙은 상자에서 데이터를 꺼내 쓰는 연산입니다.
오른쪽(우변)에 있는 데이터를 왼쪽(좌변)의 변수 상자에 집어넣는 동작을 수행합니다.
# score 변수 상자를 만들어 정수 95 저장 (score <- 95)
score = 95
print(score) # 95
# 값 덮어쓰기 (기존의 95는 사라지고 100이 채워짐)
score = 100
print(score) # 100
* 수학의 '같다'가 아니라, 값을 변수에 넣는 '대입/저장'의 명령 기호입니다.
모양은 똑같지만 의미와 연산의 방향이 완전히 다릅니다.
A = B와 B = A는 완전히 같은 뜻입니다. (예: 10 = x)A = B는 B의 값을 A에 집어넣으라는 뜻입니다. (방향: A ← B)수학에서는 에러지만 프로그래밍에선 정상인 식:
# 수학적으로는 모순이지만, 프로그래밍에선 1을 증가시키는 코드
x = x + 1
# 수학에선 가능하지만, 프로그래밍에선 상자가 우변이어서 에러인 코드
# 10 = x -> SyntaxError 상자만 만들어두고 데이터를 채워 넣지 않으면 오류가 발생합니다.
x = 0 처럼 대입 연산자 =를 활용해 초기값을 반드시 채워 넣는 작업이 선행되어야 합니다.데이터의 종류에 따라 컴퓨터가 수행해야 하는 역할이 완전히 다르기 때문입니다.
컴퓨터에게 데이터의 성격을 정확하게 알려주어 올바른 연산을 수행하게 만들기 위해 자료형을 구분하여 다룹니다.
파이썬은 변수를 만들 때 타입을 직접 적지 않아도 잘 작동합니다.
int score = 100;score = 100 (int로 자동 지정)타입을 명시적으로 적지 않을 뿐, 파이썬의 모든 변수 상자는 내부적으로 엄격한 자료형을 가지고 동작합니다.
| 타입 | 파이썬 타입 | 예시 | 주요 용도 |
|---|---|---|---|
| 정수 | int | 42, -5, 0 | 딱 떨어지는 개수, 순서 |
| 실수 | float | 3.14, 5.0 | 소수점이 있는 정밀 연산 |
| 문자열 | str | "홍길동" | 텍스트 및 이름 등 |
| 불리언 | bool | True, False | 참/거짓 판단 상태 |
파이썬에서는 정수끼리 연산해도 일반 나누기(/)를 거치면 무조건 실수형이 됩니다.
print(10 / 2) # 5.0 (정수 형태가 아님)
# 몫 나누기 (//) - 소수점 아래는 다 버리고 정수 몫만 얻음
print(10 // 2) # 5
# 나머지 구하기 (%)
print(10 % 3) # 1 연산이 가능하도록 자료의 성질을 다른 성질로 유도합니다.
# 문자열 "100"을 계산용 숫자로 변환
val = int("100")
print(val + 10) # 110
# 정수를 실수로, 실수를 정수(소수점 이하 버림)로 변환
print(float(5)) # 5.0
print(int(3.99)) # 3 대부분의 언어에서 통용되는 고전적인 방법 — 빈 컵(temp)에 잠시 옮겨 담기
left = "방패"
right = "칼"
# Step 1: left 값을 임시로 보관
temp = left # temp = "방패"
# Step 2: left에 right 값을 덮어씌움
left = right # left = "칼"
# Step 3: right에 원래 left 값을 넣음
right = temp # right = "방패"
print("왼손:", left, "오른손:", right)
# 왼손: 칼 오른손: 방패 파이썬 전용 튜플 패킹/언패킹 문법 — 임시 변수 없이 단 한 줄로 교환
left = "방패"
right = "칼"
# 파이썬만 가능한 한 줄 Swap
left, right = right, left
print("왼손:", left, "오른손:", right)
# 왼손: 칼 오른손: 방패 상황에 따라 올바른 방식을 선택하세요.
| 임시 변수(temp) 방식 | 파이썬 한 줄 방식 | |
|---|---|---|
| 코드 줄 수 | 3줄 | 1줄 |
| 사용 언어 | C, Java, Python 등 대부분 | Python 전용 |
| 원리 | 빈 컵(temp)에 잠시 옮겨 담기 | 튜플 패킹 후 동시 언패킹 |
형변환에 실패하여 발생하는 ValueError
# 1. 쌩뚱맞은 일반 문자 정수화 시도
# int("hello") -> Error!
# 2. 소수점 문자열 정수화 시도
# int("3.14") -> Error!
# -> 해결책: float를 먼저 적용
num = int(float("3.14"))
print(num) # 3 | 용어 / 도구 | 한 줄 요약 |
|---|---|
| 변수 | 데이터를 임시 저장하는 라벨 붙은 보관함 |
| 대입 연산자 (=) | 우변의 연산 결과를 좌변의 변수에 할당 |
| 자료형 4종 | int, float, str, bool |
| 나누기 (/) | 결과는 무조건 float 상태가 됨 |
| 형변환 | 타입 가공 (예: int(), str()) |