Swift 자료형(Data Type) - 문자(Charactor), 문자열(String)
업데이트:
문자열(String)
문자열(String)은 “안녕하세요.”와 같이 여러개의 글자들의 모음을 뜻하며 다음과 같이 문자들의 앞뒤에 큰따옴표(“)로 둘러쌓는 형태로 표현합니다.
"안녕하세요."
Swift에서 문자열 자료형을 뜻하는 키워드는 String입니다.
let string: String = "안녕하세요." // string이라는 이름의 문자열 상수를 선언하고 "안녕하세요."로 초기화함
let string2 = "안녕하세요." // string2라는 이름의 문자열 상수를 선언하고 "안녕하세요."로 초기화함
위 예제는 string과 string2라는 이름의 변수를 String형 변수로 선언하고 “안녕하세요.”라는 문자열로 초기화한 수식입니다.
위 예제의 수식 중 string2를 선언한 수식에서 String이라는 키워드는 생략되어 있지만 초기화하는 값이 “안녕하세요.” 문자열이므로 자동으로 string2는 문자열 타입의 변수로 선언이 되었습니다.
여러줄의 문자열(Multiline String)
여러 줄로 이루어진 문자열을 표현하고 싶을 때는 3중 큰따옴표(“””)를 이용하여 아래 예제와 같이 표현합니다.
let lineBreaks = """
This string starts with a line break.
It also ends with a line break.
"""
print("----- start -----")
print(lineBreaks)
print("----- end ------")
위 코드의 실행 결과는 다음과 같습니다.
----- start -----
This string starts with a line break.
It also ends with a line break.
----- end ------
결과를 보면 “—- start —-“와 “—- end —-“ 사이에 빈줄을 포함하여 4줄이 출력된 것을 확인하실 수 있습니다.
문자(Charator)
문자(Character) 자료형은 한개의 문자를 저장할 수 있는 자료형입니다.
let char: Character = "가" // char이라는 이름의 문자형 상수를 선언하고 "가"로 초기화함
위 예제는 char이라는 이름의 상수를 선언하고 ‘가’라는 문자로 초기화하는 수식입니다.
위에서 가문자의 앞뒤에 “(큰따옴표)가 있는데 Swift에서는 큰따옴표 사이에 문자가 하나 있으면 문자형 데이터가 됩니다.
Character 타입 자료형의 변수에 다음과 같이 2글자를 넣을 수 있을까요?
let char: Character = "가나" // char이라는 이름의 문자형 상수를 선언하고 "가"로 초기화함
위 예제와 같이 코딩해보면 다음과 같이 에러가 발생합니다.
Character 타입 변수에 문자열을 저장하면 안된다네요.
이와 같이 Character형 변수에는 반드시 문자 하나만 저장이 가능합니다.
문제를 하나 내 볼까요?
let constant = "가"
위 constant라는 변수의 타입은 무슨 타입일까요?
정답은 문자열(String) 타입입니다.
변수/상수 선언 시 자료형을 생략하고 “가”로 초기화할 때 Swift는 “가”를 1글자의 문자열로 판단합니다.
즉, Character 타입으로 변수/상수를 선언하고자 할 때에는 Character라는 타입을 반드시 명시해 주어야 합니다.
특수 문자(Special Character)
다른 언어들과 마찬가지로 Swift에서도 문자열 내에 이스케이프 문자를 넣을 수 있습니다.
Character | 설명 |
---|---|
\ | 백슬래시(Back Slash) |
\t | 탭문자(Horizontal tab) |
\n | 줄바꿈(Line Feed) |
\r | 캐리지리턴(Carriage Return) |
\” | 큰따옴표(Double quote) |
\’ | 작은따옴표(Single Quote) |
\u{n} | 유니코드(Unicode) n에 16진수의 유니코드를 넣음 |
"”” | 큰따옴표 3개 |
\0 | 널문자(Null character) |
아래 샘플을 통해 확인해 봅시다.
let wiseWords = "\"악법도 법이다.\" - 소크라테스" // 문자열 사이에 큰따옴표 넣기
let dollarSign = "\u{24}" // 유니코드 0x24번 문자($)
let blackHeart = "\u{2665}" // 유니코드 0x2665번 문자(♥)
let sparklingHeart = "\u{1F496}" // 유니코드 0x1f496 문자(💖)
print(wiseWords)
print(dollarSign)
print(blackHeart)
print(sparklingHeart)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
"악법도 법이다." - 소크라테스
$
♥
💖
이스케이프 문자(Escaped Character)를 이미 알고 계시는 분은 아마도 다른 언어를 경험해 보신 분일 가능성이 크고 위 표에 대해 따로 설명해 드리지 않아도 문자열 내에서 위 문자들이 어떠한 역할을 하는지 알고 계실 것입니다.
모르시는 분은 아마도 이 포스트 내에서의 짧은 설명을 통해서 이해하시기는 어려울 것이라고 생각됩니다.
모르시는 분은 모르시는데로 그냥 넘어가시는 것이 좋습니다. Swift를 공부하고 사용하면서 자연스럽게 알게 되실 테니까요.
확장 문자열 기호(Extended String Delimiters)
확장 문자열 기호는 Swift5 버전에서 새롭게 추가된 기능으로 문자열을 #”….”#과 같이 큰따옴표 앞뒤에 #을 붙임으로써 이스케이프 문자의 형식에 대해 변경이 가능합니다.
다음의 예을 보시죠.
let extended1 = "내이름은 \"코난\""
let extended2 = #"내이름은 \"코난\""#
let extended3 = #"내이름은 \#"코난\#""#
let extended4 = ##"내이름은 \##"코난\##""##
print(extended1)
print(extended2)
print(extended3)
print(extended4)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
내이름은 "코난"
내이름은 \"코난\"
내이름은 "코난"
내이름은 "코난"
문자열의 앞과 뒤에 #을 붙이면 이스케이프 문자임을 표시하는 (백슬레시)의 형식이 바뀝니다.
위 예제에서 extended1 상수는 기존과 동일하게 문자열 내의 큰따옴표를 이스케이프 문자로 처리하였습니다.
그런데, 두번째 extended2의 경우에는 문자열 앞뒤에 #을 추가한 형태인데 문자열 내 이스케이프 문자가 이스케이프 문자로 처리되지 않고 문자 그대로 처리됐습니다.
세번째 extended3는 /#”이 실제 변수에 저장 시 큰따옴표로 처리 되었습니다.
네번째 extended4는 /##”이 실제 변수에 저장 시 큰따옴표로 처리 되었습니다.
위와 같이 문자열 앞뒤에 #을 붙이면 앞뒤에 붙어 있는 #의 개수만큼 이스케이프 문자 사이에 #을 넣어줘야 이스케이프 문자로 처리가 된다는 것을 알 수 있습니다.
문자열 템플릿(String Template)
일단 예제를 먼저 보시죠.
let height = 183
let str = "내 키는 \(height)이다."
print(str)
위 코드의 실행 결과는 다음과 같습니다.
내 키는 183이다.
위에 str이라는 변수를 초기화 할 때 문자열 내에 \(height)와 같은 형식을 포함시켰더니 문자열 내에 정수형 상수 height의 값이 포함되었습니다.
이렇듯, 문자열 내에 \(수식)을 추가하면 실행 단계에서 결정되는 변하는 값을 문자열 내에 추가할 수 있습니다.
또다른 예제를 볼까요?
let myHeight = 183
let yourHeight = 177
let str = """
내 키는 \(myHeight)이고
네 키는 \(yourHeight)니까
우리 둘의 키의 합은 \(myHeight + yourHeight)이야.
"""
print(str)
위 코드의 실행 결과는 다음과 같습니다.
내 키는 183이고
네 키는 177니까
우리 둘의 키의 합은 360이야.
위와 같이 문자열 내에 \() 형식을 통해서 다양한 방법으로 다른 값을 문자열에 추가할 수 있습니다.
댓글남기기