Swift/TOPIC

Swift | Raw Strings에 대하여(feat. 특수문자 처리반)

UDDT 2025. 7. 1. 08:26

 문자열에서 사용되는 특수한 문자

   Swift에서 문자열을 표현할 때 자주 사용하게 되는 기호는 " 와 \ 입니다

let greeting = "Hello Swift"

 

    "를 양 옆에 붙여 String임을 명시하거나,

let greeting = "Hello\nSwift"

 

   위와 같이 줄 바꿈을 할때에도 \ 를 사용할 수 있습니다

 

  이 간단한 전제는 문제점을 가지고 있습니다

 

  상황 1)

  도서 관련 앱을 만들고 있는데, 다음과 같은 문구가 들어가야 합니다

 철수가 말했습니다. "안녕 영희야"

 

   이럴 땐 어떻게 해야할까요?

let str = "철수가 말했습니다. "안녕 영희야""

 

    다음과 같이 작성할 수는 없습니다

 

   그러면 어떻게 해야할까요?

   문자 그대로 사용하고자 하는 " 앞에 \ 를 붙여 작성할 수는 있습니다

let str = "철수가 말했습니다. \"안녕 영희야\""

 

  상황 2)

  이번에는 \ 기호를 포함한 문자열을 만들어야 합니다. 

힘들다면 당근을 흔들어주세요! \O\
let str = "힘들다면 당근을 흔들어주세요! \O\"

 

     \는 escape 문자라서 오류가 납니다

   아까 1번 상황의 케이스를 떠올리며 \ 를 하나씩 더 붙여줍니다

let str = "힘들다면 당근을 흔들어주세요! \\O\\"

 

 

    여차저차 만들긴 했는데, 왠지 가독성도 떨어지고 여간 불편한게 아닙니다

 

    그래서 등장한 것이 바로 Swift 5부터 등장한 Raw Strings라는 개념입니다

 Raw Strings

    Raw Strings는 특수 문자를 문자 그대로 받아들이는 문자열입니다

  뭔가 어려워 보이지만, 사용법 자체는 정말 간단합니다

  

    특수 문자를 사용하고자 하는 문자열에 #을 붙여주면 됩니다

let str = #"철수가 말했습니다. "안녕 영희야""#

 

let str = #"힘들다면 당근을 흔들어주세요! \O\"#

 

    자, 이제 특수문자를 쉽게 반영할 수 있게 되었습니다!

   그러나 이 경우에도 문제점을 가지고 있습니다

 

  상황 1)

  디자이너가 줄바꿈을 해달라고 합니다

  "OO님, 힘들다면 당근을 흔들어주세요와 이모티콘 줄바꿈을 해주세요"

 

   이럴 땐 어떻게 해야할까요?

let str = #"힘들다면 당근을 흔들어주세요! \n \O\"#

  양 옆에 붙은 #으로 인해 특수문자가 Raw하게 출력됩니다

 

  이를 해결할 때도 #을 붙이면 됩니다

let str = #"힘들다면 당근을 흔들어주세요! \#n \O\"#

 

  상황 2)

  디자이너가 유저의 이름을 텍스트에 반영해달라고 합니다

  "OO님, 힘들다면 당근을 흔들어주세요 \O\"

 

  이럴 땐 어떻게 해야할까요?

 

  String Interpolation(문자열 보간법)을 사용하면 된다는 것은 잘 알고 있습니다

let name = "김유저"
let str = #"\(name)님, 힘들다면 당근을 흔들어주세요! \#n \O\"#
print(str)

 

   이렇게 작성을 하면 다음과 같이 나오게 됩니다

 

  앞서 배웠던 내용들을 통해 우리는 패턴을 기억하고 있습니다 

 

결론부터 말하자면 #을 붙이면 됩니다!

let name = "김유저"
let str = #"\#(name)님, 힘들다면 당근을 흔들어주세요! \#n \O\"#
print(str)

 

결론

    문자열 앞뒤에 #을 붙이면 \나 "" 같은 기호를 사용할 수 있습니다

   줄바꿈이나 문자열 보간법 같이 \를 기호 자체로 사용하지 않을 때는 사이에 #을 붙이면 됩니다

 Reference

  Base: SeSAC 내부 비공개 강의 자료

 

  https://github.com/swiftlang/swift-evolution/blob/main/proposals/0200-raw-string-escaping.md

 

swift-evolution/proposals/0200-raw-string-escaping.md at main · swiftlang/swift-evolution

This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. - swiftlang/swift-evolution

github.com