[스위프트]

3.5 String

String은 문자의 나열, 즉 문자열이다. String은 Character와 마찬가지로 유니코드 9를 사용할 수 있으며, 값의 앞뒤에 큰따옴표를 사용하여 표현한다.

// 상수 선언된 문자열은 변경이 불가능하다.
let name: String = "lhj"

// 이니셜라이저를 사용하여 빈 문자열을 생성할 수 있다.
// var 키워드를 사용하여 변수를 생성했으므로 문자열의 수정 및 변경이 가능하다.
var introduce: String = String()

// append() 매서드를 사용하여 문자열을 이어붙일 수 있다.
introduce.append("제 이름은")

// + 연산자를 통해서도 문자열을 이어붙일 수 있다.
introduce = introduce + " " + name + "입니다."
print(introduce)

// name에 해당하는 문자의 수를 셀 수 있다.
print("name의 글자 수 \(name.count)")

// 빈 문자열인지 확인해볼 수 있다.
print("introduce가 비어있나요? : \(introduce.isEmpty)")

// 유니코드의 스칼라값을 사용하면 값에 해당하는 표현이 출력된다 - 어떤 모양이 출력될까?
let unicodeScalarValue: String = "\u{2665}")

사실 문자열을 다루는 것은 프로그래밍에서 꽤 까다로운 부분 중 하나이다. 그러나 스위프트에서는 비교적 손쉽게 문자열을 다룰 수 있다. String 타입에는 기본적으로 많은 메서드와 프로퍼티들이 구현되어 있다. 문자열과 관련된 연산자도 많이 정의되어 있기 때문에 문자열을 조금이나마 다루기 쉽게 지원해준다.

3.5.1 특수 문자

스위프트에는 문자열 내에서 일정 기능을 하는 특수문자(제어문자라고도 한다.)가 있다. 특수문자는 모두 백슬래시에 특정한 문자를 조합하여 사용한다. 가장 많이 쓰는 특수문자는 아래와 같다.

특수문자 설명
\n 줄바꿈 문자
\ 문자열 내에서 백슬래시를 표현하고자 할 때 사용
* 문자열 내에서 큰따옴표를 표현하고자 할 때 사용
\t 탭 문자. 키보드의 탭키를 눌렀을 때와 같은 효과
\0 문자열이 끝났음을 알리는 null 문자

3.6 Any, AnyObject와 nil

Any는 스위프트의 모든 데이터 타입을 사용할 수 있다는 뜻이다. 변수 또는 상수의 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관없이 항당할 수 있다.

AnyObject는 Any보다는 조금 한정된 의미로 클래스의 인스턴스만 할당할 수 있다. 클래스에 대한 내용은 후에 다루겠다.

var someVar: Any = "lhj"  // Any로 선언된 변수에는 문자열도
someVar = 50              // 정수도
someVar = 100.1           // 실수, 또는 어떤 타입의 값이라도 할당할 수 있다.

[NOTE]

nil은 사실 특정 타입이 아니라 ‘없음’을 나타내는 스위프트의 키워드이다. 즉, 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타내는 데 사용한다. 변수 또는 사우셍 값이 없는 경우, 즉 nil이면 해당 변수 또는 상수에 접근했을 때 잘못된 메모리 접근으로 런타임 오류가 발생한다. 잘못된 메모리에 접근하여 발생하는 런타임 오류중 흔히 널 포인터 익셉션이라고 불리는 오류 상황에 대해서는 이후에 다루겠다.