[Swift] String 다루기 1(문자열 나누기)
개요
Swift를 처음 접하고 가장 당황스러웠던 것 중 하나는 문자열을 다루는 것이 다른 언어에 비해 복잡하다는 것이었다. 이 글에서는 Swift의 String과 다른 언어의 String을 간단하게 비교하고 String을 다루는 방법에 대해서 설명하겠다.
Swift의 String과 다른 언어와의 차이
일반적으로 다른 언어의 String은 문자열을 나타내는 문자들의 배열로 구현되어 있습니다. 그러나 Swift의 String은 Unicode 문자의 컬렉션으로 구현되어 있습니다. Unicode는 전 세계의 모든 문자를 표현하기 위한 표준으로, 문자, 이모지, 특수 문자 등 다양한 문자를 표현할 수 있습니다. Swift의 String은 이러한 다양한 문자를 표현하기 위해 설계되었으며, 이를 위해 내부적으로 UTF-8 인코딩을 사용합니다.
Swift의 String은 다양한 문자열 조작 기능을 제공합니다. 예를 들어, 문자열의 길이를 가져오거나, 문자열을 분리하거나, 대소문자를 변경하거나, 문자열에서 문자를 검색하거나, 다른 문자열과 결합할 수 있습니다.
또한, Swift는 문자열 보간(string interpolation)을 지원합니다. 이 기능은 문자열 안에 변수나 상수 값을 삽입하는 것으로, 문자열을 더욱 동적으로 만들 수 있게 해줍니다.
마지막으로, Swift의 String은 값 타입입니다. 이는 문자열이 상수나 변수에 할당될 때, 해당 문자열의 복사본이 생성되는 것을 의미합니다. 이러한 값 타입은 코드의 안정성과 예측 가능성을 높여줍니다.
특정 문자를 기준으로 문자열 자르기
Swift에서 문자열을 자르는 방법은 문자열을 분할(split)하는 기능을 활용하는 것입니다. 문자열을 분할하는 함수는 split(separator: ) 메서드로, 해당 메서드는 문자열을 특정 구분자(seperator)를 기준으로 나누어 분할할 수 있습니다.
예를 들어, 다음과 같은 문자열이 있다고 가정해봅시다.
swiftlet str = "apple,banana,orange"
이 문자열을 쉼표를 기준으로 분할하려면 다음과 같이 split 메서드를 사용할 수 있습니다.
swiftlet arr = str.split(separator: ",") print(arr) // ["apple", "banana", "orange"]
위 코드에서 split 메서드는 , 쉼표를 구분자로 사용하여 문자열을 세 개의 요소로 분할합니다. 분할된 문자열은 arr 상수에 배열로 저장되며, 배열의 각 요소는 분할된 문자열을 나타냅니다.
또한, split 메서드는 다양한 매개변수를 사용하여 문자열을 분할하는 방법을 커스터마이즈할 수 있습니다. 예를 들어, maxSplits 매개변수를 사용하여 문자열을 나눌 최대 횟수를 지정할 수 있으며, omittingEmptySubsequences 매개변수를 사용하여 빈 문자열(subsequence)을 무시할지 여부를 지정할 수 있습니다. 자세한 내용은 Swift 공식 문서에서 확인할 수 있습니다.
Index 기준으로 문자열 자르기
1. prefix(:)와 suffix(:)
prefix(_:) 메서드는 문자열의 앞부분을 자르는 기능을 제공합니다. 이 메서드는 자를 길이를 매개변수로 받으며, 문자열의 앞에서부터 해당 길이만큼을 자른 결과를 반환합니다. 예를 들어, 다음과 같은 문자열이 있다고 가정해봅시다.
swiftlet str = "Hello, world!"
이 문자열의 앞 5글자만 자르려면 prefix(_:) 메서드를 다음과 같이 사용할 수 있습니다.
swiftlet prefix = str.prefix(5) print(prefix) // "Hello"
위 코드에서 prefix(_:) 메서드는 str 문자열의 앞에서부터 5글자만 자른 결과를 prefix 상수에 저장합니다.
반면에, suffix(_:) 메서드는 문자열의 뒷부분을 자르는 기능을 제공합니다. 이 메서드도 자를 길이를 매개변수로 받으며, 문자열의 뒤에서부터 해당 길이만큼을 자른 결과를 반환합니다. 예를 들어, 다음과 같은 문자열이 있다고 가정해봅시다.
swiftlet str = "Hello, world!"
swiftlet suffix = str.suffix(6) print(suffix) // "world!"
위 코드에서 suffix(_:) 메서드는 str 문자열의 뒤에서부터 6글자만 자른 결과를 suffix 상수에 저장합니다.
또한, prefix(_:)와 suffix(_:) 메서드는 각각 prefix(upTo:), prefix(through:), suffix(from:)와 같은 다양한 변형 메서드를 지원하여 문자열을 다양한 방식으로 자를 수 있습니다. 자세한 내용은 Swift 공식 문서에서 확인할 수 있습니다.
2. range(of:)
위에서 설명한 prefix(:), suffix(:)는 비교적 간단하지만, 문자열 중간을 자르는 것은 불가능 합니다. 중간 부분을 자르기 위해서는 substring(with:) 메서드를 사용하면 됩니다. 이 메서드는 시작 인덱스와 끝 인덱스를 인자로 받아서 해당 범위에 해당하는 부분 문자열을 반환합니다.
예를 들어, 아래의 코드는 문자열의 인덱스 2부터 인덱스 4까지의 부분 문자열을 반환합니다.
swiftlet str = "Hello, World!" let start = str.index(str.startIndex, offsetBy: 2) let end = str.index(str.startIndex, offsetBy: 4) let result = str.substring(with: start..<end) print(result) // "llo"
위 코드에서 substring(with:) 메서드를 사용하여 시작 인덱스와 끝 인덱스로 문자열의 중간 부분을 자르고 있습니다. 자를 범위를 정확하게 지정하기 위해 시작 인덱스와 끝 인덱스를 먼저 구한 다음, 이를 인자로 전달합니다.
이렇게 구한 result 변수의 값은 "llo"입니다.