이번엔 파이썬 코드의 가장 기본 단위인 변수와 자료형을 다룬다. 특히 "파이썬은 왜 타입을 안 적어도 되는가"라는 질문에 대해 실제 동작 원리를 근거로 설명한다.


1. 정적 타이핑 vs 동적 타이핑


자바나 C 같은 언어에서는 변수를 만들 때 타입을 반드시 선언해야 한다. 예를 들어 자바에서는 int var;처럼 변수가 담을 데이터 종류를 먼저 정하고, 그 후에 다른 타입의 값을 넣으면 컴파일 단계에서 바로 오류가 발생한다.


파이썬은 이 방식이 반대로 동작한다. 변수 이름이 특정 타입에 고정되는 게 아니라, 변수는 값을 가리키는 하나의 이름표(레이블)일 뿐이고 실제 타입 정보는 그 값(객체) 쪽에 저장된다. 그래서 같은 변수에 정수를 넣었다가 나중에 문자열을 넣어도 오류 없이 그대로 동작한다. 이런 방식을 동적 타이핑(dynamic typing)이라고 부른다.


x = 10 # 정수

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


x = "안녕" # 문자열로 재할당

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


이 코드가 오류 없이 그대로 실행되는 이유는, 파이썬이 값을 변수에 할당할 때마다 그 값의 타입을 런타임(실행 시점)에 자동으로 판별하기 때문이다.


2. 왜 이런 방식을 택했나


핵심은 개발 속도와 코드 간결성이다. 타입을 매번 선언하지 않아도 되기 때문에 코드 작성이 더 빠르고 간결해지며, 입문자가 타입 시스템을 신경 쓰지 않고 로직 자체에 집중할 수 있다는 장점이 있다.


다만 이 방식에는 트레이드오프도 있는데, 타입 관련 오류가 코드 작성 시점이 아니라 실제 실행 시점에야 드러난다는 점, 그리고 코드 규모가 커질수록 변수가 어떤 타입을 담고 있는지 추적하기 어려워질 수 있다는 점이 대표적으로 꼽힌다.


3. 주요 자료형 훑어보기

[파이썬 02] 파이썬 변수/자료형[파이썬 02] 파이썬 변수/자료형 (2)

파이썬에서 자주 다루는 기본 자료형은 다음과 같다.

  1. int (정수): x = 10
  2. float (실수): x = 3.14
  3. str (문자열): x = "안녕하세요"
  4. bool (참/거짓): x = True
  5. list, dict 등 컬렉션 타입


각 값의 타입은 type() 함수로 언제든 확인할 수 있다. 이건 디버깅할 때 자주 쓰이는 방법이라 초반에 익혀두면 유용하다.


4. 완전히 자유로운 건 아니다, 타입 힌트


동적 타이핑이 편하긴 하지만, 코드가 커지면 "이 변수가 정확히 어떤 타입이어야 하는가"를 문서화할 필요가 생긴다.


그래서 파이썬 3.5부터는 타입 힌트(type hint)라는 기능이 도입됐다. 이는 변수나 함수의 예상 타입을 표기해주는 기능이지만, 실행 시점에 강제되는 규칙은 아니고 어디까지나 개발자와 IDE, 정적 분석 도구를 위한 힌트로만 동작한다.


age: int = 25


이렇게 써도 파이썬 자체는 여전히 다른 타입 값을 할당하는 걸 막지 않는다. 다만 VS Code 같은 에디터나 타입 체커가 이를 보고 경고를 띄워줄 수 있다.


5. 정리


파이썬이 타입을 안 적어도 되는 이유는 변수가 값 자체가 아니라 값을 가리키는 이름표이고, 타입은 값(객체) 쪽에서 실행 시점에 결정되기 때문이다.


이 방식은 코드를 짧고 빠르게 작성할 수 있게 해주지만, 큰 프로젝트에서는 타입 힌트 같은 보완 수단을 함께 쓰는 게 일반적이다.