본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] return이 없는 함수는 무엇을 반환하나요? None의 비밀과 활용

by Papa Martino V 2026. 2. 12.
728x90

return
return

 

 

파이썬 프로그래밍을 시작할 때 가장 먼저 마주하는 개념 중 하나가 함수의 반환 값(Return Value)입니다. 보통 함수는 연산의 결과를 return 키워드를 통해 호출자에게 전달하지만, 명시적인 반환문이 생략된 경우도 자주 목격하게 됩니다. 그렇다면 파이썬 인터프리터는 return이 없는 함수를 어떻게 처리할까요? 이 글에서는 파이썬의 독특한 객체인 None의 정체와 함수 반환 메커니즘을 심도 있게 분석합니다.


1. 파이썬의 암시적 반환 규칙

파이썬은 모든 함수가 반드시 무언가를 반환하도록 설계된 언어입니다. 다른 언어(C, Java 등)에서 반환 값이 없는 함수를 void 타입으로 정의하는 것과 달리, 파이썬에는 '값의 부재'를 나타내는 특별한 싱글톤 객체인 None이 존재합니다.

  • 명시적 return 부재: 함수 본문에 return 문이 아예 없는 경우입니다.
  • 값 없는 return: 단순히 return 키워드만 작성하고 뒤에 아무런 값을 명시하지 않은 경우입니다.

위 두 가지 경우 모두 파이썬은 내부적으로 None을 반환한 것으로 간주합니다. 이는 프로그램의 흐름이 끊기지 않고 객체 지향적인 일관성을 유지하기 위한 파이썬만의 철학입니다.


2. 반환 타입별 동작 비교 분석

함수의 반환 구조에 따른 차이점을 표를 통해 정리해 보았습니다.

구문 형태 실제 반환되는 값 데이터 타입 주요 용도
return result 연산된 객체(Value) 객체에 따라 다름 계산 결과 전달
return None NoneType 함수의 조기 종료
(return 문 생략) None NoneType 단순 절차 실행(출력, 저장 등)

3. None은 단순한 '무(無)'가 아니다

많은 초보 개발자들이 None을 '아무것도 없는 상태'로 오해하지만, 파이썬에서 None은 엄연히 NoneType 클래스의 유일한 인스턴스입니다. 이는 메모리 상에 존재하는 객체이며, 다음과 같은 특징을 가집니다.

① 싱글톤(Singleton) 객체

파이썬 내에서 None은 단 하나만 존재합니다. 따라서 두 변수가 None인지 비교할 때는 == 연산자보다 메모리 주소를 비교하는 is 연산자를 사용하는 것이 훨씬 빠르고 관례적(Pythonic)입니다.

② 불리언 문맥에서의 평가

조건문(if문)에서 None은 언제나 False로 취급됩니다. 하지만 False 그 자체는 아니라는 점에 주의해야 합니다. None은 값이 '정해지지 않았음'을 의미하는 논리적 지표로 자주 활용됩니다.


4. Sample Example: 암시적 반환의 실체 확인

다음 코드를 통해 return 문이 없는 함수의 동작을 직접 확인해 보겠습니다.


def say_hello(name):
    print(f"Hello, {name}!")
    # 명시적인 return이 없음

def empty_return():
    return
    # 값 없이 return 키워드만 사용

# 1. 반환 값을 변수에 저장
result1 = say_hello("Python")
result2 = empty_return()

# 2. 결과 출력
print(f"Result 1: {result1}")  # None 출력
print(f"Result 2: {result2}")  # None 출력

# 3. 타입 및 비교 확인
print(f"Type: {type(result1)}")
print(f"Is it None?: {result1 is None}")

5. 실무에서의 활용: 언제 return을 생략하는가?

명시적인 반환 값이 없는 함수는 대개 부수 효과(Side Effect)를 목적으로 합니다. 데이터를 화면에 출력하거나, 파일에 로그를 기록하거나, 데이터베이스의 값을 업데이트하는 등의 작업이 이에 해당합니다. 반면, 함수의 로직 중 특정 조건에서 더 이상 진행할 필요가 없을 때 return 단독으로 사용하여 함수를 즉시 탈출하는 기법은 코드의 중첩(Nesting)을 줄이는 'Guard Clause' 패턴으로 널리 사용됩니다.


6. 결론

파이썬에서 return이 없는 함수는 결코 비어있는 채로 끝나지 않습니다. 인터프리터는 친절하게도 None이라는 마침표를 찍어줍니다. 이 None의 성질을 명확히 이해하는 것은 에러를 방지하고 객체지향적인 설계를 완성하는 첫걸음입니다. 함수의 의도에 따라 명시적 반환을 할지, 혹은 암시적으로 None을 남길지 결정하는 감각을 기르는 것이 중요합니다.


7. 내용의 출처 및 참고 자료

  • Python Software Foundation. "Built-in Constants - None".
  • Mark Lutz. "Learning Python, 5th Edition" (O'Reilly Media).
  • Python Enhancement Proposals (PEP 8). "Programming Recommendations - Comparisons to Singletons".

 

728x90