Swift랑 친해지기/Swift 책보면서 정리해보기

쿼우팅, 멀티 라인 스트링 - 스위프트

데브킹덕 2022. 1. 13. 17:08

쿼우팅이란?

문자열을 따옴표(" ")로 묶어 표시하는 방법

프로그래밍 코드에서는 대부분 문자열 정의,표현 하는 용도로 사용 

var message = "Hi"

 

이런 역할을 하는 쿼우팅을 누락하고 작성하게 된다면 어떻게 될까??

var message = Hi

1. Hi라는 단어에 대해 스위프트 컴파일러가 해석을 시도함

2. 문자열이 예약어이거나 키워드로 등록된 것인지 판단함

3. 예약어나 키워드가 아니면 함수나 클래스,구조체나 열거형 등 객체 타입으로 정의된 이름인지 확인을 해봄

4.이게 아니라면 변수나 상수로 정의된 단어인지 확인을 해봄

5.위에 His는 단순한 쿼우팅이 누락된 문자열이기 때문에 오류를 발생함

 

let Hello = "Hi!!I`m GD"

//var message = "Hello" 를 사용하게 되면 Hello출력이 됨
var message = Hello

print(message)

다음과 같이 Hello에 쿼우팅이 누락될 경우 Hi!!I`m GD가 출력이 됨

message 변수의 값을 출력했는데 Hello 상수의 값이 출력되는 것은 컴파일러는 Hello라는 문자열에 대해 

의미적인 해석을 시도하기 때문임 그래서 정의된 상수인 Hello를 출력하게 되는거임 

 

 

 

더블쿼우팅 = 큰 따옴표 

그럼 싱글쿼우팅은??

= 작은 따옴표 

자바에서는 Character 형에는 싱글쿼우팅을 사용하지만 스위프트는 Character형도 더블쿼우팅을 사용함

let name = "A"                         //타입추론에 의해 String 자료형
let name1 : Character = "A"            //타입어노테이션이 선언되어 Character 자료형

근데 이렇게 되면 "A"라는 단어가 보기에 따라 문자가 될 수도 있고,

문자열로도 볼 수 있겠쥬?

이 상황에서는 스위프트의 타입추론기는 아키텍처의 안정성을 위해, 다음의 두가지 원칙에 따라 타입을 결정함

 

원칙 1) 주어진 값이 타입A와 B에 동시에 속하는 경우, 더 넓은 타입으로 결정함

원칙 2) 더 작은 범위의 타입으로 정의하려면 반드시 타입 어노테이션을 통해 명시적으로 선언하도록 함

 

스위프트에서 여러 줄의 문자열을 처리하는 방법

스위프트에서는 문자열 쿼우팅 내부에서 줄바꿈하는 것을

허용하지 않기 때문에 엔터키로 작성하면 컴파일 오류가 발생함

 

때문에 긴문자열을 여러 줄에 나누어 작성하기 위해서는 +연산자를 이용해야함

문자열과 문자열 사이에서 사용하면 양쪽 문자열을 이어주는 역할을 하는것임

 

여기에 줄바꿈을 위해서는 리턴피드인 '\n'을 줄바꿈할 위치에 직접 넣어주어야함 

let poem = "가을에는 단풍 \n"
	+"겨울에는 눈사람 \n"
	+"봄에는 벗꽃 \n"

이러한 방식은 특수 문자가 사용 되어 복잡하고 한번에 문자열 구조를 알기 어려움

또, 실제 출력되는 결과와 조금씩 차이가 있어 좋은 방식이라 보기 어려움

 

이러한 문자열 처리 면에서 확장성의 한계로 인하여

스위프트에서는 멀티라인 스트링(Multi-line String) , 트리플 쿼우팅(Triple Quoting)을 사용함

 

멀티라인 스트링(Multi-line String)

시작과 끝 큰 따옴표 세개(""" ~ """) 를 연속으로 붙여서 사용

사용할 때 주의할 점 3가지

 

1) 시작 쿼우팅 다음에는 반드시 줄바꿈후 값 작성

쿼우팅이 시작된 라인에서 쿼우팅 이후 어떤 값도 들어가면 안됨 

let sing = """가을이 오면 눈부신 아침 햇살에 비친 그대에 미소가 아름다워요"""       (x)

2) 멀티라인 스트링이 입력을 끝낼 때에는 반드시 줄바꿈 후 쿼우팅 처리해야함.

쿼우팅이 종료하는 라인에서 쿼우팅 앞에 어떤 값도 들어가면 안됨

let sing = """가을이 오면 눈부신
아침 햇살에 비친
그대에 미소가 아름다워요"""       (x)

3)멀티라인 쿼우팅 내부에 특수문자(\n,\t) 가 들어가면 문자 그대로 출력

let sing = """
가을이 오면 눈부신
아침 햇살에 비친 
그대에 미소가 아름다워요
"""  // 이문세님 노래  주석 넣는 것은 가능 (O)