파이썬 getattr() 함수는 객체의 멤버 변수나 메서드에 동적으로 접근할 수 있도록 도와주는 매우 유용한 함수입니다. 정적 코딩보다 더 유연한 방식으로 객체의 속성에 접근할 수 있기 때문에, 다양한 상황에서 활용할 수 있습니다. 이번 글에서는 getattr()
함수의 사용법과 유용한 활용 방법, 주의사항 등을 알아보겠습니다.
목차
파이썬 getattr() 함수란?
getattr()
함수는 기본적으로 객체에서 특정 속성에 접근할 때 사용됩니다. 보통 객체의 속성에 접근할 때는 ‘점(.)’ 연산자를 사용하지만, getattr()
을 사용하면 속성의 이름을 문자열로 제공하여 동적으로 접근할 수 있습니다. 이를 통해 정해진 코드를 미리 작성하지 않아도 런타임 중에 속성의 이름을 결정해 접근할 수 있습니다.
getattr() 함수 기본 문법
getattr(object, attribute_name, default_value=None)
object
: 속성이나 메서드를 조회할 객체입니다.attribute_name
: 조회할 속성이나 메서드의 이름을 문자열로 입력합니다.default_value
: 속성이 존재하지 않을 경우 반환할 기본값입니다. 생략할 경우 속성이 없으면AttributeError
가 발생합니다.
예를 들어, 아래의 코드를 보겠습니다.
class Example:
def __init__(self):
self.name = 'Kyle'
self.age = 23
example = Example()
getattr(example, 'name')
getattr(example, 'age')
getattr(example, 'gender', 'unknown')
위의 예제에서 getattr()
함수는 example
객체의 name
과 age
속성에 성공적으로 접근했으며, 존재하지 않는 gender
속성에 대해서는 기본값인 'unknown'
을 반환합니다.

동적으로 속성에 접근하는 유용한 활용 방법
동적 속성 접근
사용자 입력에 따라 다르게 동작해야 하는 경우, getattr()
함수는 매우 유용하게 사용됩니다.
class User:
def __init__(self, name, email):
self.name = name
self.email = email
user = User("John", "john@example.com")
attribute = input("어떤 속성에 접근하시겠습니까? (name/email): ")
getattr(user, attribute, "해당 속성이 없습니다.")
사용자가 입력한 속성 이름에 따라 name
이나 email
에 동적으로 접근할 수 있습니다.

기본값을 통한 에러 방지
기본적으로 존재하지 않는 속성에 접근하려 할 때 AttributeError
가 발생하지만, getattr()
의 세 번째 인자에 기본값을 설정하면 오류를 방지하고 코드의 안전성을 높일 수 있습니다. 이는 특히 대규모 코드나 복잡한 클래스 구조를 사용할 때 유용합니다.
getattr(user, 'address')
getattr(user, 'address', '주소 정보가 없습니다.')
아래의 그림은 기본값을 적용하지 않은 라인 1을 실행한 결과입니다.

메서드에 접근하기
getattr()
함수는 객체의 속성뿐만 아니라 메서드에도 사용할 수 있습니다. 객체의 메서드를 문자열로 접근한 후 이를 호출할 수 있습니다.
class Calculator:
def add(self, x, y):
return x + y
def subtract(self, x, y):
return x - y
calc = Calculator()
operation = 'add'
method = getattr(calc, operation)
method(5, 3)
operation = 'subtract'
method = getattr(calc, operation)
method(5, 3)
위 예제에서는 getattr()
을 사용해 add
와 subtract
메서드에 동적으로 접근하여 계산을 수행했습니다. 아래의 결과를 보면 operation 값에 따라 method()의 실행 결과가 달라지는 것을 확인할 수 있습니다.

getattr() 함수 사용 시 주의사항
- 존재하지 않는 속성 접근 시 에러 발생:
getattr()
은 객체에 없는 속성에 접근하려 할 때AttributeError
를 발생시킵니다. 이를 방지하려면 세 번째 인자에 기본값을 설정해야 합니다. - 동적 속성 접근의 남용:
getattr()
을 지나치게 사용하면 코드가 복잡해지고 유지보수가 어려워질 수 있습니다. 필요할 때만 동적으로 속성에 접근하고, 대부분의 경우에는 정적인 속성 접근 방식을 사용하는 것이 좋습니다. - 보안 문제: 사용자 입력을 받아서
getattr()
을 사용할 때는 주의해야 합니다. 잘못된 사용자 입력으로 인해 의도하지 않은 속성에 접근할 수 있고, 이로 인해 보안 문제가 발생할 수 있습니다. 따라서 사용자 입력을 신중히 검증하는 것이 중요합니다.
정리
getattr()
함수는 파이썬에서 객체의 속성이나 메서드에 동적으로 접근할 수 있게 해주는 매우 유용한 도구입니다. 특히, 동적 프로그래밍이 필요한 상황에서 코드의 유연성을 크게 높여줍니다. 하지만 과도한 사용은 코드의 가독성과 유지보수성을 떨어뜨릴 수 있으므로 필요한 경우에만 신중하게 사용하는 것이 좋습니다.
또한, 기본값을 설정해 에러를 방지하고, 사용자 입력을 받는 경우 보안 문제에 주의하는 것이 중요합니다. 적절히 사용하면, 파이썬 코딩에서 더 큰 유연성과 편리함을 제공하는 도구로 자리잡을 수 있을 것입니다.