아요 개발 일기

[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

반응형