코로나에 걸리고 여러가지 일에 겹쳐서 오랜만에 글을 쓰게 되었네요..
다시 열심히 해야지..
오늘은 Swift에서 문자열을 처리하는 방법중에 문자열을 쪼개야 하는 경우에 사용되는 split와 components 메소드에 대해서 알아보겠습니다. 알고리즘에서도 자주 사용되는 메소드이니 차이점을 알아두면 좋겠죠?
split()
split 메소드를 먼저 공식문서를 통해서 봅시다.
위와같이 split 메소드는 separator, maxSplits, omittingEmptySubsequences 의 3가지 파라미터가 있습니다. 하나씩 알아봅시다!
📍 separator
Character 타입으로, 매개변수를 받아서 해당 인자를 기준으로 쪼개주는 역할을 합니다. 우리가 원하는 바로 그 역할이죠
let str = "Hello World"
let arr = str.split(separator: " ")
// 출력 : ["Have", "a", "nice", "day"]
📍 maxSplits
Int 타입으로 문자열을 분리하는 횟수를 뜻합니다. 간단히 말하면, 앞의 separator 메소드의 인자를 기준으로 몇 번을 쪼개는가를 뜻합니다. maxSplit: 1 로 하게된다면 그 인자만큼 1번만 쪼갠다는 뜻이 되겠습니다.
let str = "Have a nice day"
let arr = str.split(separator: " ", maxSplits: 2)
// 출력 : ["Have", "a", "nice day"]
📍 omittingEmptySubsequences
Bool 타입으로, false인 경우에는 separator의 인스턴스 결과마다 비어있는 하위 시퀀스("")를 반환하며, true인 경우는 비어있지 않은 하위 시퀀스를 반환합니다. 즉, 빈 시퀀스의 포함 유무라고 생각하면 되겠네요. 기본값은 true입니다.
제 생각으로는 omittingEmptySubsequences 파라미터는 굳이 빈 시퀀스를 추가할 경우가 없어보여서 쓸 일이 많지 않을거같네요..? (주로 사용하는곳이 있다면 댓글로 알려주시면 감사하겠습니다 👍
📍 return 타입
split의 return 타입은, 위의 공식문서 사진과 같이 "SubString" 입니다.
components()
이번에는 components 메소드에 대해서 알아봅시다!
components 메소드는 split 메소드와 다르게 separatedBy 매개변수 하나만 있습니다.
그리고 중요한점 한 가지는, components 메소드를 사용하기 위해서는 Foundation 프레임워크를 import 해주어야 사용이 가능합니다. 잊지 않도록 주의합시다
📍 separatedBy
String 타입으로, 매개변수를 받아서 해당 인자를 기준으로 쪼개주는 역할을 합니다. 위의 split의 separator 파라미터와 동일한 역할을 하는 파라미터 입니다.
import Foundation
let str = "Have a nice day"
let arr = str.components(separatedBy: " ")
// 출력 : ["Have", "a", "nice", "day"]
📍 return 타입
components의 return 타입은, 위의 공식문서 사진과 같이 "String" 입니다.
이제 split()과 components()에 대해 알아보았으니, 이제 위의 내용을 토대로하여 간략하게 정리해봅시다!
split VS components
1. 파라미터의 개수
- split() : 3개의 파라미터 (separator, maxSplits, omittingEmptySubsequences)
- components() : 1개의 파라미터 (separatedBy)
2. import Foundation 여부
- split() : (사용 X) 스위프트 표준 라이브러리에 속해있으므로 Foundation을 import 해주지 않아도 괜찮습니다.
- components() : (사용 O) Foundation 프레임워크에 속해있으므로 Foundation을 import 해주어야 합니다.
3. 반환 타입이 다르다.
- split() : [Substring]
- components() : [String]
정리
split()과 components()는 파라미터의 사용 여부와 자신에게 맞는 스타일을 골라서 어떤 메소드를 주로 사용할지 정하시면 좋을거같습니다. 👊
속도에 대한 차이도 있다고는 하는데... 다음에 더 공부하여 업데이트하거나, 새로운 글로 작성해오도록 하겠습니다! 그럼 저는 이만~~~~~
Reference
'📌 Swift' 카테고리의 다른 글
[오늘의 Swift 지식] 고차 함수 (map, filter, reduce) (0) | 2022.02.01 |
---|---|
[오늘의 Swift 지식] stride 함수 (백준 2742번 기찍 N, 역수 구하기) (0) | 2021.10.24 |
[오늘의 Swift 지식] In-Out이란 무엇일까? (0) | 2021.08.24 |
[오늘의 Swift 지식] 전달인자(Argument)와 매개변수(Parameter) (0) | 2021.08.13 |
[오늘의 Swift 지식] if let과 guard let의 차이는? (0) | 2021.08.09 |