HOWTO · Python

Python에서 tostring()에 해당하는 기능

Python에서 tostring()을 대체하는 방법을 알아봅니다. 변환에는 str(), 문자열 결합에는 join(), 템플릿에는 f-strings 또는 str.format(), 사용자 정의 객체에는 __str__()을 사용합니다.

이 페이지의 내용

Python에는 tostring()이라는 메서드가 없습니다. Java의 해당 메서드는 toString()으로 표기합니다. 단일 값의 문자열 표현이 필요하면 내장 함수 str(value)를 사용합니다. 여러 문자열을 결합할 때는 join()을, 메시지를 만들 때는 f-strings 또는 str.format()을 사용합니다. 이러한 연산은 표시용 텍스트를 만들며 범용 직렬화 형식은 아닙니다.

str()로 값 변환하기

str()은 숫자, 컬렉션 및 대부분의 다른 Python 객체에 대해 문자열을 반환합니다. “Python에서 tostring()에 해당하는 것은 무엇인가?”라는 질문에 대한 직접적인 답입니다. 컬렉션의 경우 구분 기호와 각 요소의 표현을 포함하는 읽기 쉬운 표현이 결과로 반환됩니다.

number = 123
values = [1, 2, 3]

print(str(number))
print(str(values))

출력:

123
[1, 2, 3]

두 호출의 결과는 모두 str입니다. 딕셔너리나 리스트를 이 방식으로 변환해도 JSON, CSV 또는 다른 교환 형식이 만들어지지는 않습니다. 다른 프로그램이 데이터를 안정적으로 읽어야 한다면 해당 형식 전용 라이브러리를 사용하세요.

문자열과 혼합 값 결합하기

join()은 리스트가 아니라 구분 기호에서 호출합니다. join()에 전달하는 모든 항목은 이미 문자열이어야 합니다. 이 중요한 경계로 문자열 결합과 일반 변환을 구분할 수 있습니다.

words = ["Hello", "world", "from", "Python"]
sentence = " ".join(words)
mixed = "|".join(map(str, [1, "two", None]))

print(sentence)
print(mixed)

출력:

Hello world from Python
1|two|None

숫자나 다른 객체가 포함된 iterable에서는 map(str, values)가 결합 전에 각 항목을 변환합니다. ", ".join(["one", 2])처럼 그대로 호출하면 TypeError가 발생합니다. join()은 문자열이 아닌 항목을 암시적으로 변환하지 않기 때문입니다.

f-strings로 값 형식 지정하기

메시지에 값이 포함되고 코드를 작성하는 위치에서 템플릿이 정해져 있다면 f-string을 사용합니다. 중괄호 안의 표현식은 평가된 뒤 형식 지정 과정에서 변환됩니다. 형식 사양으로 정밀도, 너비 및 기타 표시 세부 사항을 제어할 수 있습니다.

name = "Ada"
score = 3.14159
message = f"{name} scored {score:.2f}"

print(message)

출력:

Ada scored 3.14

F-strings는 Python 3.6에서 도입되었으며 현재 Python 3.14 계열에서도 사용할 수 있습니다. 로컬에서 읽기 쉬운 템플릿에는 대개 가장 명확한 선택이지만, 다른 시스템으로 보낼 데이터를 직렬화하는 데 사용해서는 안 됩니다.

템플릿에 str.format() 사용하기

str.format()은 템플릿을 별도로 저장하거나 재사용할 때, 또는 f-strings 이전의 코드를 지원해야 할 때 유용합니다. 번호가 있거나 이름이 지정된 필드를 치환하면서 전달된 값을 변환합니다.

item = "apple"
quantity = 5
message = "I have {quantity} {item}s.".format(quantity=quantity, item=item)

print(message)

출력:

I have 5 apples.

템플릿에 값이 여러 개라면 이름이 지정된 필드를 우선 사용하세요. 각 자리 표시자와 값의 관계를 더 쉽게 파악할 수 있습니다. 인라인 템플릿을 사용하는 새 코드에서는 일반적으로 f-string이 더 짧습니다.

사용자 정의 객체에 __str__() 정의하기

클래스에 사람이 읽기 좋은 표현이 필요하면 __str__()을 구현합니다. Python은 str(instance)를 평가하거나 print()가 인스턴스를 표시할 때 이 메서드를 호출합니다. 숫자나 다른 객체가 아니라 문자열을 반환해야 합니다.

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

    def __str__(self):
        return f"{self.name} ({self.age})"

person = Person("Ada", 36)
print(str(person))

출력:

Ada (36)

__str__()은 간결하고 사람에게 유용하게 작성하세요. __repr__()은 디버깅과 개발자용 표현이라는 다른 목적이 있으므로, 하나를 정의해도 다른 하나를 대신하지 않습니다.

제한 사항과 메서드 요약

필요한 결과에 맞는 연산을 선택하세요.

  • 단일 값이나 컬렉션의 읽기 쉬운 표현에는 str(value)를 사용합니다.
  • 문자열을 결합할 때는 separator.join(strings)를 사용하고, 필요하다면 먼저 map(str, values)로 항목을 변환합니다.
  • 읽기 쉬운 인라인 템플릿에는 f-strings를, 재사용하거나 별도로 저장하는 템플릿에는 str.format()을 사용합니다.
  • 자체 클래스에 사람이 읽기 좋은 표현이 필요하면 __str__()을 구현합니다.

이러한 메서드는 되돌릴 수 있거나 기계가 읽을 수 있는 표현을 보장하지 않습니다. JSON에는 json.dumps()를 사용하고 JSON으로 표현할 수 없는 타입을 처리하세요. 사용자 정의 전송 형식이라면 str() 출력에 의존하지 말고 스키마를 명시적으로 정의합니다.

요약하면 Java 스타일의 tostring() 호출을 str(value)로 바꾸고, 텍스트 결합, 형식 지정 또는 사용자 지정이라는 구체적인 작업에 따라 join(), f-string, str.format() 또는 __str__()을 선택하세요.