파이썬에서 str() 함수는 객체를 사람이 읽기 쉬운 문자열 표현으로 변환합니다. 반면 repr() 함수는 객체를 표현식 문자열(expression string), 즉 해당 객체를 재생성할 수 있는 형태의 문자열로 변환합니다.
두 함수의 핵심 차이는 다음과 같습니다.
- __repr__: 모호함이 없는(unambiguous), “공식적인” 문자열 표현을 목표로 합니다. 주로 디버깅이나 로깅에 사용됩니다.
- __str__: 사용자가 읽기 쉬운(readable) 결과를 목표로 합니다. 주로 화면 출력용으로 사용됩니다.
datetime 예제
datetime 객체를 예로 들어 두 함수가 각각 어떤 결과를 만들어내는지 살펴보겠습니다.
import datetime
today = datetime.datetime.now()
str(today)
repr(today)
실행 결과
'2018-04-08 11:25:36.918979'
'datetime.datetime(2018, 4, 8, 11, 25, 36, 918979)'
결과 분석
출력 결과를 비교해 보면 그 차이가 명확합니다. str()은 날짜와 시간을 보기 좋게 포맷팅한 결과를 반환하는 반면, repr()은 해당 객체를 다시 생성할 수 있는 생성자(constructor) 형태의 표현을 그대로 보여줍니다.
즉, repr()이 반환한 문자열은 eval() 함수에 전달했을 때 원래와 동일한 값을 가진 객체를 다시 만들어낼 수 있습니다. 이러한 특성 때문에 개발자는 디버깅 시 repr()을, 최종 사용자에게 정보를 보여줄 때는 str()을 사용하는 것이 일반적입니다.