본문 바로가기
Python

파이썬 객체를 탐색하는 dir() 함수의 개념과 활용!

by 산코디 2024. 5. 21.

파이썬에서 dir() 함수는 객체의 속성과 메서드를 나열해 주는 기능이다. 작업 중인 코드에서 특정 객체의 내부 속성을 조회하고자 할 때 주로 사용된다. 알아두면 종종 활용될 것 같아서 이 함수에 대해 자세히 살펴보도록 하자.




dir() 함수의 개념

dir() 함수는 파이썬에서 사용할 수 있는 내장 함수중 하나로, 특정 객체의 속성과 메서드를 나열시켜주는 기능이다. 이 함수는 객체의 스코프 탐색을 하여 사용 가능한 기능을 살펴보는데 유용한 함수다.

기능 탐색
dir() 함수를 사용하면 파이썬에서 사용 가능한 기능을 탐색할 수 있다. 특히 대화형 셀에서 객체를 조회하거나 디버깅할때 유용하다.

출력
dir() 함수는 해당 객체의 속성과 메서드를 문자열 리스트로 반환한다.

비공개 속성
기본적으로 dir() 함수는 객체의 모든 속성과 메서드를 나열하며, 이 중에는 밑줄로 시작하는 이름(비공개 속성)도 포함된다.

동적 탐색
dir() 함수는 런타임 시점에 호출되므로, 프로그램이 실행되는 동안 동적으로 객체의 속성과 메서드를 확인할 수 있다.


이렇게 dir() 함수는 파이썬에서 객체를 탐색하는 데 유용하게 사용될 수 있다.




dir() 함수의 활용

간단한 예제들을 통해서 dir() 함수를 사용하는 방법을 정리해 보았다.

 

문자열 탐색

string = "Hello, World!"
print("String Methods:")
for item in dir(string):
    if not item.startswith("__"):  # 내부 속성은 출력하지 않음
        print(item)

위의 코드는 문자열을 기준으로 dir() 함수를 사용한 예제 코드다. 일반 문자열의 경우에도 위와 같이 dir 탐색을 한다면 해당 문자열에 속한 내장 함수들을 확인할 수 있다.

실행 결과

String Methods:
capitalize
casefold
center
count
encode
endswith
expandtabs
find

...

title
translate
upper
zfill

실행 결과 위와 같이 문자열에 속한 내장 함수의 리스트를 확인할 수 있다. 이를 통해 해당 문자열에서 어떤 기능의 함수들을 사용할 수 있는지 한눈에 확인할 수 있다.


리스트 탐색

my_list = [1, 2, 3]
print("List Methods:")
for item in dir(my_list):
    if not item.startswith("__"):  # 내부 속성은 출력하지 않음
        print(item)

리스트의 경우에도 위와 같이 dir() 함수를 사용하여 탐색할 수 있다. 객체 유형이 리스트이기 때문에 리스트에 해당하는 내장 함수들을 조회할 수 있다.

실행 결과

List Methods:
append
clear
copy
count
extend
index
insert
pop
remove
reverse
sort

위와 같이 리스트에 해당하는 내장 함수의 목록을 확인할 수 있다.


파일 탐색

# 파일을 읽기 모드로 열기
file = open("example.txt", "r")
print("File Methods:")
for item in dir(file):
    if not item.startswith("__"):  # 내부 속성은 출력하지 않음
        print(item)

# 파일 닫기
file.close()

파일을 읽을 때에도 동일하게 dir() 함수를 사용할 수 있다. 위의 코드와 같이 txt 파일을 읽어와 해당 파일 유형의 내장 함수를 조회할 수 있다.

실행 결과

File Methods:
buffer
close
closed
detach
encoding
errors
fileno
flush
isatty

...

write
write_through
writelines

위와 같이 파일 유형 역시 dir() 함수를 사용하여 내장 함수 목록을 확인할 수 있다.


스코프 탐색

import math

# math 모듈에 정의된 모든 이름 나열
print(dir())

dir() 함수에 아무 값 없이 호출하게 되면 현재 스코프(모듈, 클래스, 인스턴스 등)에서 사용 가능한 요소를 동일하게 조회할 수 있다.
위와 같이 아무 값 없이 dir() 함수를 호출한 경우, 현재 스코프에 해당하는 math 모듈을 대상으로 내장 요소들을 조회하게 된다.




dir()과 vars()의 비교

dir() 함수와 유사한 기능을 제공하는 vars() 함수가 있다. 두 함수 모두 객체의 속성을 조회하는 데 사용되지만, 약간의 차이점이 있어 이를 정확히 알고 상황에 따라 선택하는 것이 중요하다.

반환 값 형태

dir()
객체의 속성과 메서드를 반환
vars()
객체의 속성과 그 값들을 담고 있는 딕셔너리(dictionary)를 반환

내부 구조의 정보

dir()
객체의 속성과 메서드를 반환할 때, 클래스의 속성과 메서드도 포함된다.
vars()
객체의 실제 속성 값만 반환한다. 클래스의 속성이나 메서드는 포함되지 않는다.

활용 용도

dir()
대상 객체의 구조를 탐색하고 사용 가능한 기능을 파악하는데 주로 사용되며, 주로 디버깅이나 동적 프로그래밍에 유용하다.
vars()
대상 객체의 실제 속성 값을 확인하고, 해당 값에 접근하는 데 사용된다. 특히 객체 상태를 검사하거나 수정할 때 유용하다.

호출 범위

dir()
모든 객체에서 호출 가능하다.
vars()
일반 객체뿐만 아니라 모듈, 클래스, 인스턴스 등 대부분의 객체에서 호출할 수 있다. 그러나 __dict__ 속성이 없는 경우에는 호출이 불가능하다.


두 함수는 전체적으로 유사하지만 세부적으로 조회되는 대상이 조금 다르고, 활용 용도도 다르다는 것을 확인할 수 있었다. 상황에 맞게 적절하게 선택하여 사용하면 좋을 것 같다.



마무리

코드를 잘 작성하여 기능을 구현하는 것도 좋지만, dir(), vars()와 같이 디버깅에 유용한 기능들을 잘 활용하는 것도 코드 작업의 품질을 올려주는 작업이라고 생각한다. 개발을 잘한다는 것은 코드만 잘 짜는 것이 아니라 전체적인 흐름을 파악하며 문제를 해결해 가는 것이라고 생각한다. 이와 같은 기능들을 알고만 있어도 충분히 활용 가치가 있을 것이다.



경제 지표 서비스

https://econoflow.co.kr

 

Economy Flow

 

econoflow.co.kr

 

 

반응형