[Python] 파이썬의 예약 함수에서 str() 과 repr()의 차이점 (260814)

WonTerry·2026년 8월 14일

Python

목록 보기
27/28

파이썬에서 __str____repr__은 객체를 문자열로 표현할 때 호출되는 특별한 메서드(Magic Method)입니다. 두 메서드의 핵심적인 차이점은 "누구를 위한 출력인가?"에 있습니다.


1. __str__(self)

  • 목적: 사용자(End-user)를 위한 출력입니다.
  • 특징: 객체를 사람이 읽기 편한(Readable) 형태의 문자열로 변환합니다.
  • 호출 시점: print(obj), str(obj), format() 함수를 사용할 때 호출됩니다.
  • 지향점: "이 객체가 무엇인지"를 예쁘고 친절하게 보여주는 것이 목표입니다.

2. __repr__(self)

  • 목적: 개발자(Developer)를 위한 출력입니다.
  • 특징: 객체의 정보를 명확하고(Unambiguous) 상세하게 보여줍니다.
  • 호출 시점: 인터프리터(REPL)에서 객체 이름을 그냥 입력했을 때, repr(obj)를 호출했을 때 호출됩니다.
  • 지향점: "이 객체를 어떻게 다시 생성할 수 있는지"를 보여줄 수 있을 만큼 상세해야 합니다. (가급적이면 해당 객체를 다시 만들 수 있는 파이썬 코드 형태를 지향합니다.)

💡 한눈에 비교하기

구분__str____repr__
주요 대상일반 사용자 (User)개발자 (Developer / Debugging)
성격읽기 좋게 (Readable)명확하고 상세하게 (Unambiguous)
호출 상황print(), str()REPL 인터프리터, repr()
비유"이 물건의 이름은 '빨간 사과'입니다.""사과(색상='빨강', 무게=200g)"

💻 코드 예제로 보기

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 사용자를 위한 친절한 설명
    def __str__(self):
        return f"{self.name} ({self.age}세)"

    # 개발자를 위한 상세하고 명확한 정보 (객체 생성 코드 형태)
    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

# 객체 생성
p = Person("홍길동", 30)

# 1. __str__ 호출 (print 사용 시)
print(str(p))   # 출력: 홍길동 (30세)
print(p)        # 출력: 홍길동 (30세)

# 2. __repr__ 호출 (repr 사용 시 또는 리스트 안에 있을 때)
print(repr(p))  # 출력: Person(name='홍길동', age=30)
print([p])      # 출력: [Person(name='홍길동', age=30)] (리스트 내부 객체는 repr 호출)

⚠️ 중요한 팁 (Fallback 관계)

  1. __str__이 없으면? \rightarrow 파이썬은 __repr__을 대신 호출합니다.
  2. __repr__이 없으면? \rightarrow 파이썬은 객체의 기본 형태인 <__main__.Person object at 0x...>를 출력합니다.

따라서, 클래스를 만들 때 가장 좋은 관행(Best Practice)은 최소한 __repr__을 구현하는 것입니다. __repr__만 잘 만들어두면 __str__이 없어도 프로그램이 동작하기 때문입니다.

profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글