빠른 결론
문자열을 특정 구분자를 통해 배열로 반환해야할 땐 components를 사용하는게 좋다.
split을 사용할 경우 반환값으로 Substring이 반환되어 메모리 누수 위험이 생길 수 있기 때문이다.
split vs components
String 타입의 데이터를 주어진 조건에 따라 분할하여 배열을 반환하는 메소드 split & components 는 어떤 차이가 있을까?
split
func split(separator: Character,
maxSplits: Int = Int.max,
omittingEmptySubsequences: Bool = true) -> [Substring]
- separator : 분할하는 기준
- maxSplits : 컬렉션을 분할할 최대 횟수, 반환할 하위 시퀸스보다 하나 적다. 그리고 0보다 크거나 같아야 한다.
- omittingEmptySubsequences : false인 경우 각 인스턴스에 대한 결과에 빈 하위 시퀸스가 반환됩니다. true일 경우 비어있지 않은 하위 시퀸스만 반환됩니다. 기본값은 true
split의 특징은 반환값이 Substring이라는 타입으로 이루어진 배열을 반환한다.
Substring은 구조체로서 split의 결과이외에도 String.Index를 통한 부분 문자열 연산을 했을 때 얻을 수 있는 결과물이며 원래 문자열과 저장소를 공유한다는 특징을 갖고 있다.
Substring이 원래 문자열과 저장소를 공유한다는 특징 때문에 부분 문자열을 저장할 시 원래 문자열에 대한 참조 해제가 되어도 Substring으로 인해 강한 참조가 유지되므로 문자열의 데이터 수명이 연장되며 이는 메모리 누수로 나타날 수 있습니다.
components
func components(separatedBy separator: String) -> [String]
- separatedBy : 분할하는 기준
components의 특징은 NSString에 속한 메소드로 NSString은 Foundation에 포함되어 있는 클래스로서 Foundation을 import해야 components를 사용할 수 있습니다.
그리고 split과 다르게 반환값으로 String 타입을 반환하기 때문에 반환값에 대해 별도의 작업을 할 필요가 없습니다.
'Swift' 카테고리의 다른 글
[Swift] Data(contentsOf: url) 동기적인 파일 다운로드 (0) | 2021.10.15 |
---|---|
[Swift] URLSession으로 multipart/form-data request하기 (0) | 2021.09.27 |
[Swift] Struct And Class (0) | 2021.09.19 |
[Swift] String and Characters(문자열과 문자) (0) | 2021.09.16 |
[Swift] 옵셔널 Optional (0) | 2021.09.13 |