파이썬 __str__과 __repr__, 무엇이 다를까?
파이썬의 내장 함수인 repr()과 str()은 각각 객체의 object.__repr__(self) 메서드와 object.__str__(self) 메서드를 호출합니다. 이때 repr()은 객체의 공식적인(official) 표현을 계산하고, str()은 객체의 비공식적인(informal) 표현을 반환합니다.
정수 객체에서는 결과가 동일
정수 객체에 대해서는 두 함수의 결과가 서로 같습니다.
>>> x = 1
>>> repr(x)
'1'
>>> str(x)
'1'
문자열 객체에서는 결과가 다름
하지만 문자열 객체의 경우에는 상황이 달라집니다.
>>> x = "Hello"
>>> repr(x)
"'Hello'"
>>> str(x)
'Hello'
eval() 함수와의 관계
문자열 객체에 대한 repr()의 반환값은 eval() 함수로 평가했을 때 유효한 문자열 객체가 됩니다. 반면 str()의 결과는 평가할 수 없습니다.
>>> y1 = repr(x)
>>> eval(y1)
'Hello'
>>> y2 = str(x)
>>> eval(y2)
NameError: name 'Hello' is not defined
핵심 요약
정리하면 다음과 같습니다.
- repr(): 객체의 기본적이고 모호하지 않은(unambiguous) 공식 표현을 반환합니다. 디버깅이나 개발 시 객체를 정확히 파악하는 데 유용합니다.
- str(): 사람이 읽기 쉬운 비공식 표현을 반환합니다. 가독성은 높지만 항상 모호하지 않은 것은 아닙니다.
따라서 로그 출력이나 사용자에게 보여줄 메시지에는 str()이 적합하고, 디버깅이나 객체의 정확한 재현이 필요한 경우에는 repr()을 사용하는 것이 좋습니다.