Python에서 getattr를 언제 사용해야 할까

발행: (2025년 12월 29일 오전 03:56 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

기본 아이디어

보통은 속성을 이렇게 접근합니다:

p.name

이는 코딩 시점에 속성 이름을 알고 있을 때만 동작합니다.

getattr는 같은 일을 동적으로 할 수 있게 해줍니다:

getattr(p, "name")

문자열 "name"p의 속성과 일치하면 파이썬은 그 값을 반환합니다.

이것들은 같은가요?

예, 하지만 오직 이 특정 경우에만 같습니다:

p.name
getattr(p, "name")

두 코드 모두 같은 값을 반환합니다.

그렇다면 getattr가 왜 존재할까요? 점 표기법으로는 불가능하기 때문입니다:

attr = "nombre"
p.attr        # 문자 그대로 "attr"라는 이름의 속성을 찾음

하지만 이렇게는 동작합니다:

attr = "name"
getattr(p, attr)

이것이 핵심 차이점입니다.

“동적”이 중요한 이유

간단한 클래스를 하나 만든다고 가정해 봅시다:

class Person:
    def __init__(self):
        self.name = "Alice"
        self.age = 30

person = Person()

이제 접근하려는 속성이 실행 시점 로직에 따라 달라진다고 생각해 보세요:

fields = ["name", "age"]

for field in fields:
    print(getattr(person, field))

getattr가 없었다면 조건문을 사용해야 했을 것입니다:

if field == "name":
    print(person.name)
elif field == "age":
    print(person.age)

기본값 (크래시 방지)

또 다른 중요한 기능: 안전한 접근.

속성이 존재하지 않으면 AttributeError가 발생합니다:

getattr(person, "height")
# AttributeError: 'Person' object has no attribute 'height'

하지만 기본값을 제공할 수 있습니다:

getattr(person, "height", 170)

이제 프로그램이 안전하게 계속됩니다.

메서드를 동적으로 호출하기

속성은 데이터뿐만 아니라 메서드도 포함합니다.

class Calculator:
    def add(self, x, y):
        return x + y

calc = Calculator()

method = getattr(calc, "add")
print(method(2, 3))  # 5

getattr가 하지 못하는 것

getattr다음이 아닙니다:

  • 점 접근보다 빠른 것
  • 일반 속성 접근을 대체하는 것
  • 어디서든 사용해야 하는 것

속성 이름을 미리 알고 있다면 점 표기법을 사용하는 것이 더 나을 수 있습니다:

p.name

getattr는 유연성을 위한 도구이며, 스타일 포인트를 위한 것이 아닙니다.

최종 생각

getattr는 똑똑해 보이기 위한 것이 아니라, 하드코딩된 가정에 얽매이지 않고 실행 시점에 코드를 적응시킬 수 있게 해주는 도구입니다. 이를 이해하면 매우 정밀한 도구가 됩니다.

Back to Blog

관련 글

더 보기 »

Python의 Random 모듈

개요: Python의 random 모듈은 무작위성을 생성하는 도구를 제공하며, 예를 들어 random numbers, 시퀀스에서 항목 선택, 데이터 shuffling 등을 지원합니다. 그것은…