문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인
← 수업 목록
▶ 슬라이드 시작

변수·자료형·형변환

수업 목표

  • 변수의 개념을 보관 상자 모델로 이해하고 데이터를 저장하여 재사용할 수 있다.
  • 대입 연산자(=)의 컴퓨터 과학적 의미를 올바르게 설명할 수 있다.
  • 파이썬의 대표적인 4가지 기본 자료형의 특징을 이해하고, 서로의 데이터 타입을 변환할 수 있다.

왜 배워야 할까요?

컴퓨터가 아무리 복잡하고 대단한 계산을 할 수 있어도, 그 값을 기억해 두는 능력(변수)이 없다면 프로그램은 매번 모든 과정을 처음부터 다시 실행해야 할 것입니다. 또한, 컴퓨터는 문자와 숫자를 엄격하게 구별하므로, 적절한 형태(자료형)를 지정하고 바꾸는 법(형변환)을 모른다면 사소한 계산에서도 심각한 오류가 발생하게 됩니다. 이 수업을 통해 프로그램이 데이터를 기억하고 스마트하게 처리하게 만드는 프로그래밍의 기초 체력을 기르게 됩니다.


생각해보기: 짐 정리와 상자 이름표

새집으로 이사를 갈 때 우리는 물건들을 상자에 담아 포장합니다. 옷 상자에는 "옷"이라고 이름표를 쓰고, 부엌 식기 상자에는 "그릇"이라고 이름을 적어둡니다. 그래야 나중에 새집에 도착해서 헷갈리지 않고 물건들을 제자리에 풀어놓을 수 있습니다.

컴퓨터 프로그램도 마찬가지입니다. 게임을 할 때 플레이어의 현재 체력, 점수, 아이디 등을 컴퓨터 메모리라는 보관 공간에 안전하게 저장해 두어야 나중에 그 값을 활용해 점수를 올리거나 화면에 보여줄 수 있습니다. 이처럼 데이터를 보관해 두기 위해 이름을 붙여놓은 메모리 공간을 변수(Variable)라고 합니다. 쉽게 말해, 변수는 고유한 이름표가 붙은 보관 상자입니다.


1. 변수와 대입 연산자 (=)

파이썬에서 변수를 만드는 법은 아주 간단합니다. 상자의 이름(변수명)을 왼쪽에 쓰고, 대입 연산자(=) 뒤에 상자에 넣고 싶은 값을 적어 줍니다.

# score라는 상자를 만들고 정수 95를 담습니다.
score = 95
print(score)  # 95

# 기존 score 상자에 들어있던 값을 비우고 정수 100을 새로 채워 넣습니다.
score = 100
print(score)  # 100

수학의 등호(=)와 프로그래밍의 대입 연산자(=)의 차이

수학시간에 배우는 = 기호와 프로그래밍에서의 = 기호는 모양만 같을 뿐, 의미와 작동 방식이 완전히 다릅니다. 학생들이 가장 많이 헷갈려하는 두 가지 결정적인 차이를 알아봅시다.

1. 등호가 아니라 화살표(←)입니다.
수학에서 A = B는 "A와 B가 서로 같다"는 상태를 나타내는 기호입니다. 따라서 10 = x처럼 양변을 바꾸어 적어도 아무 문제가 없습니다.
하지만 프로그래밍에서 =은 "오른쪽(우변)에 있는 값을 왼쪽(좌변)의 변수 상자에 집어넣으라"는 명령입니다. 즉, A ← B의 흐름으로 작동합니다. 따라서 프로그래밍에서 10 = x라고 적으면 "숫자 10이라는 상자에 변수 x를 집어넣으라"는 말이 안 되는 명령이 되어 컴퓨터가 즉시 에러를 발생시킵니다.

2. 수학에서는 불가능하지만 프로그래밍에서는 가능한 식
대표적인 예가 x = x + 1입니다. 수학적으로 $x = x + 1$은 성립할 수 없는 모순된 식입니다. 양변에서 $x$를 빼면 $0 = 1$이 되기 때문입니다.
하지만 프로그래밍에서 x = x + 1은 매주 자주 쓰이는 정상적인 식입니다. 이는 "오른쪽(x + 1)을 계산하여 나온 결과를 왼쪽의 x 상자에 다시 덮어씌워라"는 명령입니다. 만약 기존 x 상자에 5가 들어있었다면, x + 1은 6이 되고 이 6을 다시 x에 덮어씌우게 되므로 x 상자 안의 값은 6이 됩니다.

왜 변수 상자에 반드시 값을 채워 넣어야(대입해야) 할까요?

처음 변수를 배울 때 "상자만 먼저 빈 채로 만들어두면 안 되나요?"라는 질문을 많이 합니다.
컴퓨터 메모리는 빈 상자와 같습니다. 상자 이름표만 붙여두고 내용물을 채워 넣지 않은 채로 print(상자이름)을 실행하거나 계산을 시도하면, 컴퓨터는 "이 상자 안이 텅 비어있어서 아무것도 할 수 없다(NameError)"며 에러를 내고 멈춰버립니다. 따라서 변수를 정의할 때는 반드시 대입 연산자 =를 사용하여 초기값(시작 데이터)을 꼭 채워 넣는 과정이 먼저 실행되어야 합니다.


2. 기본 자료형 4가지 — 상자의 종류

보관 상자에 어떤 형태의 데이터가 들어오느냐에 따라 컴퓨터는 데이터를 다르게 다룹니다. 이것을 자료형(Data Type)이라고 합니다. 파이썬은 상자에 입력되는 값의 형태를 관찰하여 자동으로 변수의 종류를 규정합니다.

왜 서로 다른 자료형(타입)을 나누어 써야 할까요?

데이터의 종류에 따라 컴퓨터가 수행해야 하는 연산(일)이 완전히 다르기 때문입니다.

  • 숫자형 데이터: 덧셈, 뺄셈, 곱셈, 나눗셈 같은 수학적 사칙연산을 수행해야 합니다.
  • 문자열 데이터: 글자를 이어 붙이거나, 특정 글자를 찾고, 자르는 등의 문자 편집 연산을 수행해야 합니다.
  • 불리언(참/거짓) 데이터: "만약 참이라면 작동해라"처럼 조건에 따라 흐름을 바꾸는 판단 연산을 수행해야 합니다.

만약 데이터의 종류를 구별하지 않는다면, 컴퓨터는 100 + 200을 만났을 때 이를 수학적으로 더해서 300을 만들어야 할지, 아니면 단순 글자로 이어 붙여서 100200으로 표현해야 할지 판단할 수 없습니다. 따라서 컴퓨터에게 데이터의 '성격'을 명확히 알려주기 위해 서로 다른 자료형을 나누어 지원합니다.

파이썬은 타입을 안 적는데, 왜 자료형이 존재할까요?

C언어나 Java 같은 프로그래밍 언어에서는 변수를 만들 때 int score = 100;처럼 어떤 자료형을 쓸지 사람이 직접 지정해야 합니다. 반면 파이썬은 score = 100이라고만 적어도 오류 없이 잘 작동합니다.
이 때문에 "파이썬에는 변수 타입이 없구나!"라고 생각하기 쉽지만, 이는 오해입니다. 파이썬에 타입이 없는 것이 아니라, 우리가 대입한 값을 컴퓨터가 실시간으로 관찰하여 알아서 변수의 타입을 자동으로 결정해 주는 것입니다. (이를 동적 타이핑이라고 합니다.)
우리가 score = 100이라고 쓰는 순간, 파이썬은 내부적으로 '아, 숫자가 들어왔으니 이 상자는 int(정수형) 상자로 써야겠구나!' 하고 자동으로 타입을 정합니다. 겉으로 타입을 적지 않더라도, 컴퓨터 내부에서는 매우 엄격한 자료형 규칙이 작동하고 있는 것입니다.

자료형 파이썬 타입 예시 용도
정수 int 0, 42, -7 횟수, 개수, 점수, 레벨 등 딱 떨어지는 수
실수 float 3.14, -0.5, 5.0 비율, 평균값 등 소수점이 있는 정밀한 수
문자열 str "홍길동", 'Python' 텍스트 메시지, 사용자 닉네임 등
불리언 bool True, False 상태 판별 (참/거짓 판단)

type() 함수로 자료형 검사하기

hp = 100
accuracy = 95.8
nickname = "아스란"
is_alive = True

print(type(hp))        # <class 'int'>
print(type(accuracy))  # <class 'float'>
print(type(nickname))  # <class 'str'>
print(type(is_alive))  # <class 'bool'>

수학적 나눗셈 연산의 자료형 규칙

정수끼리 나누더라도 파이썬에서 나누기 기호 하나(/)를 사용하면 결괏값은 항상 자동으로 실수형(float)으로 바뀝니다.

print(10 / 2)   # 5.0 (정수 5가 아닌 실수 5.0)

# 정수 몫만 얻고 싶을 때는 슬래시 2개(//)를 사용합니다.
print(10 // 2)  # 5 (정수)

# 나머지를 구할 때는 퍼센트(%)를 사용합니다.
print(10 % 3)   # 1 (정수)

3. 형변환 — 상자의 속성 변경하기

문자형 데이터 "10"을 진짜 수학 연산이 가능한 정수형 10으로 바꾸거나, 문장 결합을 위해 숫자를 문자로 변경하는 작업을 형변환(Type Casting)이라고 합니다.

# 1. 문자를 숫자로 변환
val_str = "100"
val_int = int(val_str)
print(val_int + 10)  # 110 (계산 가능)

# 2. 정수를 실수로, 실수를 정수로 변환
print(float(5))      # 5.0
print(int(3.85))     # 3 (소수점 이하는 반올림하지 않고 버립니다.)

# 3. 숫자를 문자로 변환
level = 5
msg = "현재 레벨은 " + str(level) + "입니다."
print(msg)           # 현재 레벨은 5입니다.

4. 파이썬의 편리한 변수 제어 꿀팁

동시 할당 (Multi-Assignment)

여러 변수에 값을 한 줄로 할당하거나 초기화할 수 있습니다.

# 쉼표를 기점으로 1:1 대칭 배분됩니다.
level, exp = 1, 0

# 하나의 값을 동일하게 여러 변수에 담기
count = count2 = count3 = 0

변수 값 교환 (Swap)

두 변수의 값을 서로 맞바꾸는 작업을 스왑(Swap)이라고 합니다.
마치 두 컵에 담긴 음료를 바꿔 따를 때, 빈 컵 하나가 있어야 쏟지 않고 옮길 수 있는 것처럼,
대부분의 프로그래밍 언어에서는 임시 변수(temp)가 필요합니다.

방법 1 — 임시 변수(temp)를 사용하는 방식 (일반적인 방법)

C, Java 등 대부분의 언어에서 통용되는 고전적인 방법입니다.
순서를 반드시 지켜야 값이 덮어씌워지지 않습니다.

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)
# 왼손: 칼 오른손: 방패

방법 2 — 파이썬 한 줄 Swap (파이썬 전용 문법)

파이썬은 튜플 패킹/언패킹 문법 덕분에 임시 변수 없이 단 한 줄로 교환할 수 있습니다.
우변의 right, left가 먼저 튜플로 묶인 뒤, 좌변에 동시에 분배되기 때문에 값이 겹치지 않습니다.

left = "방패"
right = "칼"

# 한 줄로 맞바꾸기 (파이썬만 가능)
left, right = right, left

print("왼손:", left, "오른손:", right)
# 왼손: 칼 오른손: 방패

두 방법 비교

임시 변수 방식 (temp) 파이썬 한 줄 방식
코드 줄 수 3줄 (temp 선언 포함) 1줄
사용 가능 언어 C, Java, Python 등 거의 모든 언어 Python 전용
원리 빈 컵(temp)에 잠시 옮겨 담는 방식 튜플 패킹 후 동시 언패킹
권장 상황 개념 학습 초기, 다른 언어와 병행 학습 시 파이썬 실무 코드 작성 시

5. 자주 발생하는 형변환 오류

형식에 어긋난 무리한 형변환을 시도할 때 프로그램이 에러를 뿜으며 종료되는 현상을 겪게 됩니다.

# 1. 정수로 바꿀 수 없는 일반 문자열을 변환하려 할 때
# int("hello")  # ValueError 발생!

# 2. 소수점이 있는 문자열을 int()로 직접 바꾸려 할 때
# int("3.14")   # ValueError 발생!
# -> 해결방법: float()로 실수를 먼저 만들고 int()를 씌웁니다.
num = int(float("3.14"))
print(num)      # 3

핵심 정리

용어 / 기능 요약 설명
변수 데이터를 나중에 사용하기 위해 저장해두는 이름표가 달린 공간.
대입 연산자 (=) 우변의 데이터를 좌변의 상자에 대입하라는 의미의 연산자.
자료형 4총사 int(정수), float(실수), str(문자열), bool(불리언 - 참/거짓).
나눗셈 결과 나누기(/)의 결과물은 피연산자와 상관없이 항상 실수(float) 타입이 됨.
형변환 (Casting) int(), float(), str() 등으로 상황에 맞추어 데이터의 종류를 바꾸는 작업.

이번 주 대회 바로가기

1반  |  2반  |  3반  |  4반  |  5반  |  6반  |  7반  |  8반  |  9반

※ 대회 링크는 선생님이 별도 공지합니다.

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘