Files
python-examples/doc/10_08_reflection.md
2025-01-20 02:26:20 +09:00

2.0 KiB

리플렉션

**리플렉션(Reflection)**이란 실행 중인 프로그램이 자기 자신이나 다른 객체의 구조, 속성, 메서드 등을 동적으로 조사하고 조작하는 것을 의미합니다. 파이썬은 동적 언어이기 때문에 런타임 시에 객체의 정보에 접근하고 변경하는 것이 가능하며, 이를 통해 매우 유연하고 강력한 프로그래밍을 할 수 있습니다.

파이썬에서 리플렉션을 사용하는 방법

  • type() 함수: 객체의 타입을 확인합니다.
  • isinstance() 함수: 객체가 특정 클래스의 인스턴스인지 확인합니다.
  • dir() 함수: 객체가 가지고 있는 속성과 메서드의 목록을 반환합니다.
  • getattr() 함수: 객체의 속성에 접근합니다.
  • setattr() 함수: 객체의 속성 값을 설정합니다.
  • hasattr() 함수: 객체가 특정 속성을 가지고 있는지 확인합니다.
  • delattr() 함수: 객체의 속성을 삭제합니다.
  • inspect 모듈: 클래스, 함수, 모듈 등에 대한 상세한 정보를 제공합니다.
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Alice", 30)

# 객체의 타입 확인
print(type(person))  # <class '__main__.Person'>

# 객체가 가지고 있는 속성과 메서드 확인
print(dir(person))

# 속성 값 가져오기
print(person.name)

# 속성 값 변경하기
setattr(person, 'age', 31)
print(person.age)

# 새로운 속성 추가
person.city = 'Seoul'
print(person.city)

리플렉션의 활용

  • 데이터 직렬화/역직렬화: 객체를 JSON이나 XML 형식으로 변환하거나, 이러한 형식의 데이터를 다시 객체로 변환할 때 사용됩니다.
  • ORM (Object-Relational Mapping): 데이터베이스 테이블과 객체를 매핑할 때 사용됩니다.
  • 플러그인 시스템: 다양한 플러그인을 동적으로 로드하고 실행할 때 사용됩니다.
  • 메타 프로그래밍: 코드를 생성하거나 수정하는 프로그램을 작성할 때 사용됩니다.