코로나에 걸리고 여러가지 일에 겹쳐서 오랜만에 글을 쓰게 되었네요..
다시 열심히 해야지 😤
오늘은 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 |