아요 개발 일기

[Swift] Split과 Components 본문

Swift

[Swift] Split과 Components

소진이 2023. 1. 29. 15:28

안녕하세요!

이번에는 비슷하게 문자 자르는 역할을 하는 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 split VS components