파이썬/변수와 데이터 타입

파이썬 동적 타이핑 완벽 정리 : 변수, 객체, 타입 흐름, 실수 사례, 해결법까지 한번에 이해하기

creator6556 2025. 12. 8. 16:28

1 왜 동적 타이핑을 배워야 할까?

→ 파이썬은 변수를 만들 때 타입을 미리 선언할 필요가 없음

→ 그래서 처음엔 쉽고 편하지만, 실제 코드를 작성하다 보면 타입 변화 때문에 예측 못 한 오류가 자주 발생함

→ 즉, 동적 타이핑을 배우는 목적은 개념 암기가 아니라 내부 동작 방식을 이해해 예측 가능한 코드를 작성하기 위함


2 정적 타이핑 vs 동적 타이핑

구분 정적 타이핑 동적 타이핑
타입 확정 시점 실행 전 실행 중
타입이 붙는 대상 변수 값(객체)
변수 재사용 타입이 고정됨 어떤 타입이든 재할당 가능

3 동적 타이핑의 핵심 원리

→ 파이썬에서 타입은 변수에 붙지 않고 값(객체)에 붙음

1-1 코드

x = 10
x = '10'
x = 3.14

→ 위의 코드는 x가 바뀐 것이 아니라, x가 가리키는 객체가 바뀌면서 타입이 함께 바뀌는 것


4 변수는 객체를 참조한다 (메모리 모델 핵심)

→ x=10은 'x안에 10이 저장된 것'이 아니라 10 객체가 생성되고, x가 그 객체를 가리키는 것

2-1 코드

a = 100
b = a

→ 위의 코드는 100이라는 객체는 하나이고, a와 b가 같은 객체를 가리킴

재할당'값 수정'이 아니라 변수가 가리키는 대상이 변경되는 것

2-2 코드

x = 10
x = 20   # 10 객체가 수정된 것이 아니라 x가 20 객체를 새로 가리킴

5 불변(Immutable) vs 가변(Mutable)

종류 값 변경 방식 예시
불변 값이 바뀌면 새 객체를 생성함 int, float, str, bool
가변 같은 객체 안에서 데이터를 수정함 list, dict, set

6 얕은 복사 vs 깊은 복사

복사 방식 특징 결과
얕은 복사 겉 객체만 새로 만들고 내부는 공유함 한쪽을 수정할 시 다른 쪽도 영향을 줌
깊은 복사 내부 객체까지 전부 새로 복사함 서로 완전히 독립적임

728x90

7 장단점

1) 장점

→ 타입 선언 없이 빠르게 개발하여, 코드가 간결하고 읽기 쉬우며, 다양한 데이터 타입을 유연하게 처리함

→ 같은 코드가 값의 타입에 따라 자동으로 적절히 동작하며, 빠르게 만들고 빠르게 수정하는 개발 방식과 잘 맞음


2) 단점

→ 변수 타입이 바뀌어도 바로 에러가 나지 않으며, 변수 이름만 보고 타입을 오해하기 쉬움

→ 타입을 확인하지 않은 채 연산/비교/조건식을 작성하며, 입력/조건/반환 흐름에 따라 타입이 달라지는 것을 추적 못함

→ 출력만 보고 정상이라고 착각하지만 오류가 늦게 터져 디버깅이 어려움


8 가장 자주 발생하는 실전 오류 3가지

3-1 코드 : 문자열 + 숫자 연산

age = '20'
print(age + 5)   # 문자열 + 숫자 → 오류

3-1 결과

3-2 코드 : 리스트를 정수로 바꾼 후 반복문 사용

items = [1, 2, 3]
items = 0
for x in items:  # int는 반복 불가
    print(x)

3-2 결과

3-3 코드 : 리스트를 복사하여 값을 바꿨더니 같이 바뀜

a = [1, 2, 3]
b = a
b.append(4)
print(a)   # 같이 바뀜

3-3 결과


9 동적 타이핑을 안전하게 쓰는 습관

→ 변수 이름만 보고 타입을 유추할 수 있게 만들기

→ 한 변수에 여러 타입을 섞지 않기

→ 입력값은 반드시 변환 후 사용하기

→ 함수의 반환 타입은 상황과 상관없이 항상 동일하게 유지하기

→ 가변 객체는 공유하지 말고 copy()해서 사용하기

→ 디버깅 시 값 + type() 함께 출력하기


10 타입 힌트(Type Hint)로 단점 보완하기

실행 방식은 그대로지만, 코드 가독성, 오류 예방, 협업에 큰 도움이 됨

4-1 코드 : 기본 예시

age: int = 20
name: str = 'Alice'

def add(a: int, b: int) -> int:
    return a + b

4-2 코드 : 컬렉션 내부 타입 포함

scores: list[int] = [10, 20, 30]
students: dict[str, float] = {'철수': 95.5, '영희': 88.0}

4-3 코드 : 복잡한 타입은 별칭으로 사용함

User = dict[str, str]
def get_user() -> User:
    return {'name': 'Alice', 'email': 'alice@example.com'}

Python 동적 타이핑에 대해 더 상세한 설명을 원하는 분들은 아래 사이트에 접속하기

Python 동적 타이핑


Python 동적 타이핑뿐만 아니라 다른 프로그래밍 언어에 대해 알고 싶은 분들은 아래 사이트에 접속하여 원하는 링크에 접속하기

프로그래밍 언어 정리 모음 

728x90