반응형
파이썬은 인터프리터 언어이다.
인터프리터 언어는 코드를 한 줄씩 읽고 실행하는 방식으로 동작한다.
이러한 특징 때문에 아래와 같이 아직 정의하지 않은 클래스를 참조할 때, 타입 힌팅에 어려움이 있다.
class A:
def __init__(self, b: B):
self._b = b
class B:
def __init__(self):
pass
이 문제를 해결할 수 있는 방법으로 '전방 참조(forward reference)'가 있다.
전방 참조 이용 방법
1. 문자열 방식
기본적으로 아직 정의되지 않은 클래스를 정의하기 위해 아래와 같이 전방참조를 이용할 수 있다.
타입 힌팅을 하고자 하는 클래스를 문자열로 감싸 정의한다.
이 방식을 사용하면 아직 클래스 A 입장에서 아직 정의되지 않은 클래스 B를 미리 참조할 수 있다.
class A:
def __init__(self, b: 'B'):
self._b = b
class B:
def __init__(self):
pass
2. __future__ 방식
python 3.7부터는 __future__ 를 사용하여 문자열을 이용하지 않아도 전방 참조를 할 수 있다.
from __future__ import annotations
class A:
def __init__(self, b: B):
self._b = b
class B:
def __init__(self):
pass
동작 구조
인터프리터 방식을 이용하는 파이썬에서 어떻게 이 방식이 가능할까?
1. 전방 참조를 하는 경우, 파이썬은 문자열을 그대로 저장한다.
2. 런타임 시점에 문자열로 작성했던 클래스가 정의되었는지 확인한다.
3. 전방 참조 문자열과 실제 클래스를 연결한다.
이 과정을 지연 평가(Lazy evaluation)이라고도 한다 (참조 평가를 실행할 때 하는 것).
레퍼런스
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
| Fluent Python - The Python Data Model (3) | 2025.05.28 |
|---|