파이썬/기초 프로그래밍

Python 함수에서 ... (Ellipsis)의 의미는?

Data Jun 2025. 5. 14. 21:49

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 리턴 타입을 통해 결과를 반환하지 않는 함수임을 명확히 함

 

정리: ...는 “비워둔 약속”이다

...는 마치 **“여기에 로직이 들어올 예정입니다”**라는 약속처럼 쓰입니다.
팀원들과의 협업이나 테스트 설계 시,
또는 대규모 파이프라인에서 단계별 구현을 나눌 때 매우 유용한 표현입니다.

 

마무리 요약