placeholder와 None 리턴 타입의 관계까지 정리해보기
Python 코드를 보다 보면, 종종 함수 내부에 **... (세 개의 점)**만 들어 있는 함수를 마주칠 때가 있습니다.
예를 들어 다음과 같은 코드입니다:
def daily_sales() -> None:
...
이걸 처음 보는 분이라면 당황할 수 있습니다.
“이게 뭔 의미지? 에러는 안 나는데 왜 아무 코드도 없지?”
사실 이건 **Python에서 의도적으로 비워둔 자리(placeholder)**이며, 중요한 역할이 있습니다.
...는 무엇인가요?
Python에서 ...는 Ellipsis 객체입니다.
문법적으로는 다음과 같습니다:
>>> type(...)
<class 'ellipsis'>
Ellipsis는 일반적으로 쓰이지 않는 객체이지만, 특별한 상황에서 “아직 구현하지 않은 부분”을 표시하는 용도로 널리 사용됩니다.
함수 안에서 ...는 무엇을 의미하나요?
함수 본문에 ...만 있는 코드는 아래와 같은 의도를 갖고 작성됩니다:
✅ “이 함수는 나중에 구현될 예정이지만, 지금은 문법 오류 없이 정의만 해두겠다.”
예를 들어 다음과 같은 함수가 있다고 합시다:
def generate_report():
...
이건 다음과 같은 의미를 담고 있습니다:
- 함수는 존재해야 한다 (예: 외부에서 호출되거나 테스트 대상)
- 하지만 내부 로직은 아직 구현되지 않았음
- 문법 오류 없이 실행되도록 자리만 마련함
pass와의 차이점은?
...와 비슷한 것으로는 pass가 있습니다.
이 둘은 모두 **“아무것도 하지 않는다”**는 점에서 유사하지만, 의도 표현에 차이가 있습니다.
리턴 타입 -> None은 어떤 의미?
def daily_sales() -> None:
...
- -> None은 이 함수가 값을 반환하지 않을 것임을 명시한 것입니다.
- 마치 void 함수처럼, 단순히 로깅, 저장, 출력만 하고 끝나는 경우 자주 사용합니다.
예시: Dagster 자산(asset) 정의에서의 활용
Dagster 같은 워크플로우 프레임워크에서는 자산(asset)이나 작업(op)을 정의할 때 아래처럼 작성하는 경우가 많습니다:
@asset
def visualize_daily_sales() -> None:
...
- 아직 자산의 로직을 구현하지 않았지만, 파이프라인 구조상 정의는 필요할 때
- None 리턴 타입을 통해 결과를 반환하지 않는 함수임을 명확히 함
정리: ...는 “비워둔 약속”이다
...는 마치 **“여기에 로직이 들어올 예정입니다”**라는 약속처럼 쓰입니다.
팀원들과의 협업이나 테스트 설계 시,
또는 대규모 파이프라인에서 단계별 구현을 나눌 때 매우 유용한 표현입니다.
마무리 요약
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
_wrapfunc()는 NumPy 내부에서 정의한 유틸리티 함수 (0) | 2025.03.27 |
---|---|
NumPy의 _wrapfunc()는 뭘 할까? — np.round()의 진짜 동작 방식 (0) | 2025.03.27 |
파이썬에서 _internal.py 같은 모듈은 왜 언더바로 시작할까? (0) | 2025.03.27 |
파이썬 스페셜 메서드는 왜 꼭 정해진 이름을 써야 할까? (0) | 2025.03.27 |
파이썬 hasattr() 제대로 이해하기 – 반복 가능한 객체 판별 (0) | 2025.03.27 |