안녕하세요!
이번에는 비슷하게 문자 자르는 역할을 하는 Split과 Components의 특징과 차이점을 알아보도록 하겠습니다!
Components
Parameters
매개변수가 seperator 하나만 있으며 매개변수로 받은 seperator을 기준으로 문자열을 분리
Return Type
String을 받고 return을 [String] 형태로 반환
Foundation 프레임 워크
components는 Foundation 프레임 워크에 속해있기 때문에 Foundation을 import 해야만 사용할 수 있음
import Foundation
let str = "My name is Sojin"
var result = str.components(seperatedBy: " ")
print(result) // ["My","name","is","Sojin"]
Split
해석 그대로 문자열을 특정 문자 기준으로 쪼개는 함수입니다.
표준 라이브러리(Swift Standard Library)에 들어가 있어, 따로 import Foundation을 할 필요 없이 사용할 수 있습니다.
parameter
split의 paramet에는 3가지가 있습니다.
- seperator: 쪼개려는 문자 단위를 받음
- maxSplits: 지정한 문자 단위로 얼마나 쪼갤지 지정
- omittingEmptySubsequences: Bool 값으로 결과 값에서 빈 시퀀스의 포함 유무를 설정
1. seperator
Character 타입으로 매개변수로 받아서 해당 인자를 기준으로 쪼개 줍니다.
2. maxSplit
쪼개는 횟수를 지정해주는 parameter 입니다.
let str = "My name is Sojin"
var result = str.split(separator: " ", maxSplit: 1)
print(result) // ["My","name is Sojin"]
위의 코드를 보면 maxSplit이 1이기 때문에 공백을 기준으로 1번만 쪼깨집니다.
3. omittingEmptySubsequence
Bool 타입을 매개변수로 받습니다.
false인 경우에는 seperator의 인스턴스마다 결과에 "" empty subsequence를 반환하며,
true인 경우에는 비어있지 않은 non-empty subsequence만 반환합니다.
기본값은 true입니다.
var str = "My name is Sojin "
var result = str.split(separator: " ", omittingEmptySubsequenece: false)
print(result) // -> ["My","name","is","Sojin",""]
---------------------------------------------------------------------
var str1 = "My name is Sojin "
var result1 = str1.split(separator: " ", omittingEmptySubsequenece: true)
print(result1) // -> ["My","name","is","Sojin"]
false인 경우에는 Sojin 뒤에 있는 빈칸에 대해서 split을 할 때 뒤에 아무것도 없기 때문에 "" 빈 subsequence를 돌려준 것을 확인할 수 있다.
반면에 true인 경우에는 "" 빈 subsequnece는 반환되지 않는 것을 확인할 수 있다.
Return Type
parameter로 Character 를 받고 return을 [Substring] 형태로 반환
표준 라이브러리
split은 Swift 표준 라이브러리에 포함되어 있어 Foundation을 import 하지 않아도 사용할 수 있음
Split VS Components
split | components | |
parameter의 개수 | 3개 separator, maxSplit, omittingEmptySubsequeneces |
1개 separator |
Return Type | [Substring] | [String] |
Foundation 프레임워크의 import 여부 | X | O |
성능의 차이
split가 component에 비해서 성능이 좋다고 하는데 그 이유는 바로 "" empty subsequence의 처리에 있다고 합니다.
split은 위에서 보았듯이 omittingEmptySubsequence의 bool 값에 따라서 변하지만
components는 항상 empty subsequence를 돌려주게 되므로 만약 space를 separator로 가졌을 때 쪼개려는 문자열에 빈 공간이 많다면 그만큼 "" empty subsequence를 반환하게 되므로 성능적으로 느리다고 합니다.
참고
Apple 공식문서 components
Apple 공식문서 split
split과 components
stackOverflow split VS components
'Swift' 카테고리의 다른 글
[Swift] Method 랑 Computed Property 중 어떤걸 사용해야할까? (0) | 2023.01.29 |
---|---|
[Swift] 생성자(initializer) (0) | 2023.01.29 |
[Swift] Method (메소드) (0) | 2023.01.29 |
[Swift] Diffable Datasource와 Compositional Layout (1) | 2023.01.29 |
[Swift] Weak, Strong Reference (feat. ARC) (0) | 2023.01.29 |