Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
GDScript 형식 문자열
Godot는 문자열의 내용을 동적으로 변경하는 다양한 방법을 제공합니다:
형식 문자열:
var string = "I have %s cats." % "3"String.format()방법:var string = "I have {0} cats.".format([3])문자열 연결:
var string = "I have " + str(3) + " cats."
이 페이지에서는 형식 문자열을 사용하는 방법을 설명하고 format() 메서드와 문자열 연결에 대해 간략하게 설명합니다.
서식(Formatting)
GDscript는 형식 문자열 이란 기능을 제공하는데, 비슷한 문자열들을 간결하게 텍스트 템플릿으로 재사용할 수 있도록 해줍니다.
형식 문자열은 특정 플레이스홀더 문자 시퀀스를 포함한다는 점을 제외하고는 보통 문자열과 같습니다. 그러면 플레이스홀더는 형식 문자열에 전달된 매개변수로 쉽게 대치될 수 있습니다.
구체적인 GDScript 예시를 참고해보세요:
# Define a format string with placeholder '%s'
var format_string = "We're waiting for %s."
# Using the '%' operator, the placeholder is replaced with the desired value
var actual_string = format_string % "Godot"
print(actual_string)
# Output: "We're waiting for Godot."
플레이스홀더는 항상 %로 시작하지만, 다음 문자나 문자열인 형식 지정자(format specifier)는 주어진 값을 문자열로 변환하는 방법을 결정합니다.
위의 예제에서 볼 수 있는 %s는 가장 단순한 플레이스홀더로 대부분의 사용 사례에서 작동합니다. 이 플레이스홀더는 암시적 문자열 변환 또는 str()이 값을 변환하는 것과 동일한 방법으로 값을 변환합니다. 문자열은 변경되지 않고 부울은 "True" 또는 "False"를, 정수 또는 실수는 십진수를, 다른 타입은 데이터를 일반적으로 사람이 읽을 수 있는 문자열로 반환합니다.
다른 `format specifiers`_도 있습니다.
여러 자리표시자
형식 문자열은 여러가지 플레이스 홀더를 가질 수 있습니다. 이런 경우, 값은 배열의 형식으로, 각각의 플레이스 홀더에 단일 값으로 전달됩니다 (* 으로 이루어진 형식 지정자를 사용하지 않는다면, 동적 패딩 을 참조하세요):
var format_string = "%s was reluctant to learn %s, but now he enjoys it."
var actual_string = format_string % ["Estragon", "GDScript"]
print(actual_string)
# Output: "Estragon was reluctant to learn GDScript, but now he enjoys it."
값은 순서대로 삽입됩니다. 모든 플레이스 홀더는 한번에 바꾸어야 하기 때문에, 적절한 수의 값이 있어야 합니다.
형식 지정자(Format specifiers)
플레이스 홀더에 사용되는 s 이외에도 다른 형식 지정자가 있습니다. 이들은 하나 이상의 문자로 구성됩니다. s 처럼 스스로 작동하는 것이 있는 반면, 일부는 다른 문자 앞에 나타나기도 하며, 어떤 것은 오직 특정 값이나 문자에만 작동합니다.
자리표시자 유형
이들 중 하나가 반드시 형식 지정자의 마지막 문자로 항상 나타나야 합니다. s와는 별개로, 이들은 특정 타입의 매개변수가 필요합니다.
|
암시적 문자열 변환과 같은 방법으로 문자열을 간단히 변환합니다. |
|
하나의 유니코드 문자. 코드 포인트나 단일 문자의 경우 부호가 없는 8비트 정수 (0-255) 가 필요합니다. |
|
십진법 정수. 정수나 (반올림 되는) 실수가 필요합니다. |
|
8진법 정수. 정수나 (반올림 되는) 실수가 필요합니다. |
|
소문자 로 이루어진 16진법 정수. 정수나 (반올림 되는) 실수가 필요합니다. |
|
대문자 로 이루어진 16진법 정수. 정수나 (반올림 되는) 실수가 필요합니다. |
|
실수. 정수나 실수가 필요합니다. |
|
벡터. float 또는 int 기반 벡터 객체( |
자리표시자 모디파이어
이 문자는 위 문자들보다 앞에서 나타납니다. 일부는 특정 조건에서만 작동합니다.
|
숫자 지정자에서, 숫자가 양수라면 + 부호를 표시합니다. |
정수 |
패딩 를 설정합니다. 정수 플레이스 홀더에서 정수가 |
|
|
|
왼쪽 대신 오른쪽을 채웁니다. |
|
동적 패딩(Dynamic padding) 으로, 패딩이나 |
패딩
. (점), * (별표), - (빼기 문자) 그리고 한 자리 수 (0-9) 문자들이 패딩에 사용됩니다. 이것을 고정 너비 글꼴에 사용한다면, 세로로 정렬된 여러 값들을 프린트할 수 있습니다.
문자열을 최소 길이로 패딩하기 위해선, 지정자에 정수를 추가하세요:
print("%10d" % 12345)
# output: " 12345"
# 5 leading spaces for a total length of 10
정수가 ``0``으로 시작한다면, 적분 값은 공백 대신 0으로 패딩됩니다:
print("%010d" % 12345)
# output: "0000012345"
정밀도는 정수 뒤에 ``.``(점)을 추가해서 실수로 지정할 수 있습니다. ``.``뒤에 정수가 없다면, 정밀도가 0으로, 적분 값에 반올림됩니다. 패딩에 쓰이는 정수는 점 앞에 나와야 합니다.
# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space
- 문자는 왼쪽이 아닌 오른쪽으로 채우므로, 오른쪽 텍스트 정렬에 유용합니다:
print("%-10d" % 12345678)
# Output: "12345678 "
# 2 trailing spaces
동적 패딩
* (별표) 문자를 사용해서, 형식 문자열을 수정하지 않고 패딩이나 정밀도를 설정할 수 있습니다. 이것은 형식 지정자에서 정수 대신 사용됩니다. 패딩과 정밀도의 값은 서식을 지정할 때 전달됩니다:
var format_string = "%*.*f"
# Pad to length of 7, round to 3 decimal places:
print(format_string % [7, 3, 8.8888])
# Output: " 8.889"
# 2 leading spaces
* 앞에 0 을 추가해 정수 플레이스 홀더를 0으로 채울 수도 있습니다:
print("%0*d" % [2, 3])
# Output: "03"
이스케이프 시퀀스
상수 % 문자를 형식 문자열에 넣으려면, 플레이스 홀더처럼 읽히지 않도록 이스케이프 해야 합니다. 잘못하면 문자를 두 배로 만들 것입니다:
var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"
정보 설정
GDScript에서 텍스트를 형식화하는 또 다른 방법은 String.format() 메서드입니다. 문자열에 있는 모든 키를 해당하는 값으로 바꿉니다. 이 메서드는 배열 또는 딕셔너리를 키/값 묶음으로 다룰 수 있습니다.
배열은 키, 인덱스, 혼합 스타일로 사용됩니다 (아래 예제 참조). 순서는 배열의 인덱스나 혼합 스타일을 사용할 때만 중요합니다.
GDScript의 빠른 예제:
# Define a format string
var format_string = "We're waiting for {str}"
# Using the 'format' method, replace the 'str' placeholder
var actual_string = format_string.format({"str": "Godot"})
print(actual_string)
# Output: "We're waiting for Godot"
형식 메서드 예제
String.format 메서드의 호출을 사용하는 방법은 다음과 같습니다.
유형 |
스타일 |
예제 |
결과 |
딕셔너리 |
키 |
|
안녕, Godette v3.0! |
딕셔너리 |
인덱스 |
|
안녕, Godette v3.0! |
딕셔너리 |
믹스 |
|
안녕, Godette v3.0! |
배열 |
키 |
|
안녕, Godette v3.0! |
배열 |
인덱스 |
|
안녕, Godette v3.0! |
배열 |
믹스 |
|
안녕, Godette v3.0! |
배열 |
인덱스 없음 |
|
안녕, Godette v3.0! |
자리표시자에도 String.format을 사용할 때 사용자 지정할 수 있습니다. 여기에 몇 가지 예가 있습니다.
유형 |
예제 |
결과 |
중위 (기본) |
|
안녕, Godette v3.0 |
후위 |
|
안녕, Godette v3.0 |
접두사 |
|
안녕, Godette v3.0 |
String.format 메서드와 % 연산자를 결합함으로써 String.format이 다룰 수 없는 숫자 표현을 다룰 수 있게 됩니다.
예제 |
결과 |
|
안녕, Godette v3.11 |
문자열 연결
+ 연산자를 사용하여 문자열을 *연결*하여 결합할 수도 있습니다.
# Define a base string
var base_string = "We're waiting for "
# Concatenate the string
var actual_string = base_string + "Godot"
print(actual_string)
# Output: "We're waiting for Godot"
문자열 연결을 사용하는 경우 문자열이 아닌 값은 str() 함수를 사용하여 변환해야 합니다. 변환된 값의 문자열 형식을 지정할 수 있는 방법은 없습니다.
var name_string = "Godette"
var version = 3.0
var actual_string = "Hi, " + name_string + " v" + str(version) + "!"
print(actual_string)
# Output: "Hi, Godette v3!"
이러한 제한으로 인해 형식 문자열이나 format() 방법이 더 나은 선택인 경우가 많습니다. 많은 경우 문자열 연결은 가독성도 떨어집니다.
참고
Godot의 C++ 코드에서 GDScript 형식 문자열은 Variant 헤더의 vformat() 도우미 함수를 사용하여 접근할 수 있습니다.