Logo

[파이썬] 내장 함수 dir 사용법

이번 포스팅에서는 네임 스페이스를 들여다보고 싶을 때 요긴하게 쓸 수 있는 dir() 내장 함수에 대해서 알아보겠습니다.

네임 스페이스와 dir() 함수

파이썬에는 다른 언어와 비슷하게 소위 네임 스페이스(name space)라는 개념이 있는데요. 변수명이나 함수명 그리고 클래스의 이름을 언어 차원에서 관리해주는 매커니즘이라고 생각하시면 편할 것 같습니다.

dir()은 네임 스페이스에 등록되어 있는 모든 이름들을 리스트로 반환해주는 파이썬의 내장 함수입니다.

예를 들어, 변수 AB를 선언 후 dir() 함수를 호출해보겠습니다.

>>> A = 1
>>> B = 2
>>> dir()
['A', 'B', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

ABdir() 함수가 반환하는 리스트 맨 앞에 추가되어 있는 것이 보이시나요?

이번에는 HI라는 함수를 하나 선언한 다음에, dir() 함수를 호출해보죠.

>>> def HI():
...     print('Hi!')
...
>>> dir()
['A', 'B', 'HI', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

내침 김에 User라는 클래스도 하나 선언해볼까요? 😆

>>> class User:
...     pass
...
>>> dir()
['A', 'B', 'HI', 'User', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

이처럼 변수나 함수, 클래스 이름을 선언하면 네임 스페이스에 등록되어 dir() 함수로 쉽게 확인할 수 있습니다.

특수한 이름들

앞 뒤로 __가 붙은 이름들은 우리가 따로 네임 스페이스에 등록한 적이 없죠? 이 이름들은 파이썬 인터프리터를 실행될 때 자동으로 등록된 특수한 목적이 있는 이름들입니다.

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

예를 들어, 가장 많이 사용되는 __name__ 변수 이름에는 현재 프로그램이 실행되고 있는 모듈의 이름이 저장되어 있습니다.

>>> __name__
'__main__'

다른 특수한 이름들도 시간되실 때 하나씩 살펴보시면 재미있으실 겁니다.

특정 모듈의 네임 스페이스 엿보기

특정 모듈이 어떤 기능을 제공하는지 파악하고 싶을 때도 dir() 함수를 유용하게 쓸 수 있습니다.

예를 들어, math 모듈에서 어떤 변수와 함수를 제공하는지가 궁금하면 어떻게 해야 할까요?

먼저, math 모듈을 임포트해야겠죠? dir() 함수를 호출해보면 마치 변수나 함수, 클래스처럼 모듈의 이름도 네임 스페이스에 추가되는 것을 알 수 있습니다.

>>> import math
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math']

이제 dir() 함수의 인자로 math를 넘기면 짜짠! 🎉 math 모듈이 제공하는 모든 기능들을 한 눈에 확인할 수 있습니다.

>>> dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

모듈이 제공하는 변수명이나 함수명이 정확히 뭐였는지 햇갈릴 때 사용하면 매우 편리합니다.

마치면서

이상으로 파이썬에 내장되어 요긴하게 쓸 수 있는 dir() 함수에 대해서 살펴보았습니다.