CLOSE SEARCH

Swift – “String” + “Character”

@“hello world”가 아니고 “hello world”입니다. 이제 어느정도 골뱅이(@)에 적응이 되었다 싶었는데, 다시 C 스타일의 문자열로 되돌렸네요. 하지만 Swift의 String 자료형은 NSString 클래스와 긴밀하게 연동(toll-free bridged 와 유사하다고 보시면 됩니다)되어 있으므로, @만 빼고 마치 NSString 클래스를 사용하듯이 쓰면 됩니다.

참조 형식인 Objective-C의 문자열과 달리 Swift의 문자열은 값 형식이기 때문에, 할당이나 파라미터 등에 사용될 때 참조가 아닌 값 자체가 복사(copy-by-default)됩니다. NSString과 유사한 역할을 하지만 “참조 vs 값”이라는 큰 차이가 있기 때문에 주의해서 사용해야 합니다. 이러한 특징 때문에, 문자열을 사용할 때 메모리의 사용량이 증가하지 않을까 하는 의문을 가질수도 있습니다. Swift는 실제로 문자열 값의 복사가 반드시 필요하다고 판단되는 경우에만 복사를 수행하도록 최적화 되어 있기 때문에, 항상 좋은 성능을 보장한다고 합니다.

초기화

코드 1-1과 같이 문자열을 초기화 할 수 있습니다. emptyString, nonEmptyString 변수는 문자열 리터럴을 통해 초기화 되고, anotherEmptyString은 초기화 문법을 통해 초기화 됩니다.

문자열이 아닌 개별 문자를 선언할 때는 Character 자료형을 직접 지정해 주어야 합니다. C에서는 ‘a’, “str”과 같이 작은 따옴표와 큰 따옴표로 문자와 문자열을 구분했지만, Swift에서는 큰 따옴표만 사용하기 때문에, 아래의 코드와 같이 자료형을 지정해 주지 않는 경우에는 Character가 아닌 String으로 추론됩니다.

 

가변성

Objective-C의 문자열은 기본적으로 불변(Immutable) 문자열입니다. 즉, 문자열을 수정하면 원본 문자열의 메모리 상에서 수정되는 것이 아니라 새로운 메모리가 할당되었습니다. 가변(Mutable) 문자열을 사용하려면 NSMutableString 객체를 사용했었습니다.
별도의 클래스를 제공하여 가변성을 지원했던 Objective-C와 달리 Swift는 기본적으로 가변 문자열은 var, 불변 문자열은 let으로 선언합니다. NSMutableString 해당하는 MutableString 자료형은 존재하지 않습니다.

 

문자열 연산자

Swift는 연산자 오버로딩을 통해 문자열 연산을 제공합니다.

String 자료형을 서로 연결하거나, String 자료형과 Character 자료형을 연결하는 것은 가능하지만, Character 자료형에 String 자료형을 연결할 수는 없습니다.

 

간단한 문자열 처리

문자열의 길이를 구할 때는 countElements 전역함수를 사용합니다.

빈문자열인지 확인하는 코드는 다음과 같습니다.

for-in문을 사용해서 문자열에 포함된 개별 문자에 접근할 수도 있습니다.

 

형식화 문자열(Formatted String) 생성

Objective-C에서는 stringWithFormat: 등의 메소드를 통해 형식화 문자열을 생성했습니다. 이러한 작업을 String Interpolation 이라고 하며, Swift에서는 좀 더 쉬운 문법으로 수행할 수 있습니다.

 

문자열 비교

전체 문자열을 비교할 때는 == 연산자를 사용합니다.

접두어나 접미어를 비교하는 메소드의 이름은 Objective-C와 동일한 메소드(hasPrefix, hasSuffix)를 사용합니다.

 

대소문자 변환

Objective-C에서는 uppercaseString, lowercaseString 이라는 이름의 메소드를 제공했지만, Swift에서는 동일한 이름의 속성으로 제공합니다.

 

 

ps. Facebook 페이지에 가입해서 함께 정보를 공유해보아요 :)   https://www.facebook.com/groups/254425194763076/

이 글의 예제 코드는 다음에서 발췌하였습니다: Apple Inc. ‘The Swift Programming Language.’ iBooks. https://itun.es/kr/jEUH0.l

Filed under: Swift