본문 바로가기
프로그래밍 언어/Python

파이썬 - 전방 참조 (Forward reference) 로 타입 힌팅하기

by 데브조이 2025. 2. 16.
반응형

파이썬은 인터프리터 언어이다. 
인터프리터 언어는 코드를 한 줄씩 읽고 실행하는 방식으로 동작한다.  
이러한 특징 때문에 아래와 같이 아직 정의하지 않은 클래스를 참조할 때, 타입 힌팅에 어려움이 있다. 

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)이라고도 한다 (참조 평가를 실행할 때 하는 것). 


레퍼런스 

https://docs.python.org/ko/3.13/whatsnew/3.7.html

반응형

'프로그래밍 언어 > Python' 카테고리의 다른 글

Fluent Python - The Python Data Model  (3) 2025.05.28