보간된 문자열 (Visual Basic 참조)Interpolated Strings (Visual Basic Reference)

문자열을 생성하는 데 사용됩니다.Used to construct strings. 보간된 문자열은 보간된 식이 포함된 템플릿 문자열과 유사합니다.An interpolated string looks like a template string that contains interpolated expressions. 보간된 문자열은 포함하는 보간된 식을 해당 문자열 표현으로 바꾸는 문자열을 반환합니다.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. 이 기능은 Visual Basic 14 이상 버전에서 사용할 수 있습니다.This feature is available in Visual Basic 14 and later versions.

보간된 문자열의 인수는 복합 형식 문자열보다 더 쉽게 이해할 수 있습니다.The arguments of an interpolated string are easier to understand than a composite format string. 예를 들어 보간된 문자열For example, the interpolated string

Console.WriteLine($"Name = {name}, hours = {hours:hh}")

에는 두 개의 보간된 식 '{name}' 및 '{hours:hh}'가 포함되어 있습니다.contains two interpolated expressions, '{name}' and '{hours:hh}'. 동등한 복합 형식 문자열은 다음과 같습니다.The equivalent composite format string is:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours);

보간된 문자열의 구조는 다음과 같습니다.The structure of an interpolated string is:

$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."

여기서where:

  • 필드 너비는 필드의 문자 수를 나타내는 부호 있는 정수입니다.field-width is a signed integer that indicates the number of characters in the field. 양수이면 필드가 오른쪽에 맞춰지고, 음수이면 왼쪽에 맞춰집니다.If it is positive, the field is right-aligned; if negative, left-aligned.

  • 형식 문자열은 형식을 지정할 개체 형식에 적합한 형식 문자열입니다.format-string is a format string appropriate for the type of object being formatted. 예를 들어 DateTime 값의 경우 "d" 또는 "d"와 같은 표준 날짜 및 시간 형식 문자열일 수 있습니다.For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

중요

문자열을 시작하는 $" 사이에 공백이 없어야 합니다.You cannot have any white space between the $ and the " that starts the string. 이렇게 하면 컴파일러 오류가 발생 합니다.Doing so causes a compiler error.

문자열 리터럴을 사용할 수 있는 곳이면 어디든지 보간된 문자열을 사용할 수 있습니다.You can use an interpolated string anywhere you can use a string literal. 보간된 문자열을 포함하는 코드가 실행될 때마다 보간된 문자열이 평가됩니다.The interpolated string is evaluated each time the code with the interpolated string executes. 이렇게 하면 보간된 문자열의 정의 및 평가를 구분할 수 있습니다.This allows you to separate the definition and evaluation of an interpolated string.

보간된 문자열에 중괄호("{" 또는 "}")를 포함하려면 두 개의 중괄호 "{{" 또는 "}}"를 사용합니다.To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". 자세한 내용은 암시적 변환 섹션을 참조하세요.See the Implicit Conversions section for more details.

큰따옴표("), 콜론(:), 쉼표(,) 등 특별한 의미를 가진 다른 문자가 보간된 문자열에 포함된 경우 리터럴 텍스트에 발생하면 이스케이프해야 하거나, 보간된 식에 포함된 언어 요소이면 괄호로 구분된 식에 포함해야 합니다.If the interpolated string contains other characters with special meaning in an interpolated string, such as the quotation mark ("), colon (:), or comma (,), they should be escaped if they occur in literal text, or they should be included in an expression delimited by parentheses if they are language elements included in an interpolated expression. 다음 예제에서는 따옴표를 이스케이프하여 결과 문자열에 포함하고, 콜론이 형식 문자열의 시작으로 해석되지 않도록 괄호를 사용하여 (age == 1 ? "" : "s") 식을 구분합니다.The following example escapes quotation marks to include them in the result string, and it uses parentheses to delimit the expression (age == 1 ? "" : "s") so that the colon is not interpreted as beginning a format string.

Public Module Example
   Public Sub Main()
      Dim name = "Horace"
      Dim age = 34
      Dim s1 = $"He asked, ""Is your name {name}?"", but didn't wait for a reply."
      Console.WriteLine(s1)
      
      Dim s2 = $"{name} is {age:D3} year{(If(age = 1, "", "s"))} old."
      Console.WriteLine(s2) 
   End Sub
End Module
' The example displays the following output:
'       He asked, "Is your name Horace?", but didn't wait for a reply.
'       Horace is 034 years old.
' </Snippet1>

암시적 변환Implicit Conversions

보간된 문자열에서 다음과 같은 세 가지 암시적 형식 변환을 수행할 수 있습니다.There are three implicit type conversions from an interpolated string:

  1. 보간된 문자열을 String으로 변환.Conversion of an interpolated string to a String. 다음 예제에서는 보간된 문자열 식이 해당 문자열 표현으로 바뀐 문자열을 반환합니다.The following example returns a string whose interpolated string expressions have been replaced with their string representations. 예를 들어:For example:

    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s1 = $"Hello, {name}!"  
          Console.WriteLine(s1)
       End Sub
    End Module
    ' The example displays the following output:
    '      Hello, Bartholomew!
    ' </Snippet1>
    

    이는 문자열 해석의 최종 결과입니다.This is the final result of a string interpretation. 나타나는 모든 이중 중괄호("{{" 및 "}}")가 단일 중괄호로 변환됩니다.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. 보간된 문자열을 IFormattable 변수로 변환. 이 변수를 사용하면 단일 IFormattable 인스턴스의 문화권별 콘텐츠로 여러 결과 문자열을 만들 수 있습니다.Conversion of an interpolated string to an IFormattable variable that allows you create multiple result strings with culture-specific content from a single IFormattable instance. 이 옵션은 개별 문화권의 올바른 숫자 및 날짜 형식 등을 포함하는 데 유용합니다.This is useful for including such things as the correct numeric and date formats for individual cultures. 모든 이중 중괄호("{{" 및 "}}")는 ToString() 메서드를 명시적 또는 암시적으로 호출하여 문자열을 형식을 지정할 때까지 이중 중괄호로 유지됩니다.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format the string by explicitly or implicitly calling the ToString() method. 포함 된 보간 식은 모두 {0}, {1}등으로 변환 됩니다.All contained interpolation expressions are converted to {0}, {1}, and so on.

    다음 예제에서는 리플렉션을 사용하여 보간된 문자열에서 생성된 IFormattable 변수의 필드 및 속성 값뿐 아니라 멤버를 표시합니다.The following example uses reflection to display the members as well as the field and property values of an IFormattable variable that is created from an interpolated string. 또한 IFormattable 변수를 Console.WriteLine(String) 메서드에 전달합니다.It also passes the IFormattable variable to the Console.WriteLine(String) method.

    Imports System.Globalization
    Imports System.Reflection
    
    Public Module Example
       Public Sub Main()
          Dim price = 1000
          Dim s2 As IFormattable = $"The cost of this item is {price:C}."  
          ShowInfo(s2)
          CultureInfo.CurrentCulture = New CultureInfo("en-US")
          Console.WriteLine(s2)
          CultureInfo.CurrentCulture = New CultureInfo("fr-FR")
          Console.WriteLine(s2)      
       End Sub
    
       Private Sub ShowInfo(obj As Object)
          Console.WriteLine($"Displaying member information:{vbCrLf}")
          Dim t = obj.GetType()
          Dim flags = BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.NonPublic
          For Each m In t.GetMembers(flags) 
             Console.Write($"   {m.Name} {m.MemberType}")   
             If m.MemberType = MemberTypes.Property Then
                Dim p = t.GetProperty(m.Name, flags)
                Console.Write($"   Value: {p.GetValue(obj)}")         
             End If
             If m.MemberType = MemberTypes.Field Then
                Dim f = t.GetField(m.Name, flags)
                Console.Write($"   Value: {f.GetValue(obj)}")
             End If
             Console.WriteLine()
          Next
          Console.WriteLine($"-------{vbCrLf}")
       End Sub
    End Module
    ' The example displays the following output:
    Displaying member information:
    
    '       get_Format Method
    '       GetArguments Method
    '       get_ArgumentCount Method
    '       GetArgument Method
    '       ToString Method
    '       System.IFormattable.ToString Method
    '       ToString Method
    '       Equals Method
    '       GetHashCode Method
    '       GetType Method
    '       Finalize Method
    '       MemberwiseClone Method
    '       .ctor Constructor
    '       Format Property   Value: The cost of this item is {0:C}.
    '       ArgumentCount Property   Value: 1
    '       _format Field   Value: The cost of this item is {0:C}.
    '       _arguments Field   Value: System.Object[]
    '       -------
    '
    '       The cost of this item is $1,000.00.
    '       The cost of this item is 1 000,00 €.
    ' </Snippet1>
    
    

    보간된 문자열은 리플렉션을 통해서만 검사할 수 있습니다.Note that the interpolated string can be inspected only by using reflection. WriteLine(String) 등의 문자열 형식 지정 메서드에 전달되는 경우 해당 형식 항목이 확인되고 결과 문자열이 반환됩니다.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. 보간된 문자열 FormattableString 을 복합 서식 문자열을 나타내는 변수로 변환Conversion of an interpolated string to a FormattableString variable that represents a composite format string. 예를 들어 복합 형식 문자열 및 복합 형식 문자열이 결과 문자열로 렌더링되는 방식을 검사하면 쿼리를 빌드하는 경우 삽입 공격으로부터 보호하는 데 도움이 됩니다.Inspecting the composite format string and how it renders as a result string might, for example, help you protect against an injection attack if you were building a query. FormattableString 는 다음도 포함 됩니다.A FormattableString also includes:

    모든 이중 중괄호 ("{{" 및 "}}")는 형식을 지정할 때까지 이중 중괄호로 유지 됩니다.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format. 포함 된 보간 식은 모두 {0}, {1}등으로 변환 됩니다.All contained interpolation expressions are converted to {0}, {1}, and so on.

    Imports System.Globalization
    
    Public Module Example
       Public Sub Main()
          Dim name = "Bartholomew"
          Dim s3 As FormattableString = $"Hello, {name}!"  
          Console.WriteLine($"String: '{s3.Format}'")
          Console.WriteLine($"Arguments: {s3.ArgumentCount}")
          Console.WriteLine($"Result string: {s3}")
       End Sub
    End Module
    ' The example displays the following output:
    '       String: 'Hello, {0}!'
    '       Arguments: 1
    '       Result string: Hello, Bartholomew!
    
    

참고자료See also