티스토리 뷰
String은 mutable일까 immutable일까? 라는 질문을 받아서 찾아본 내용.
Swift의 String은 Struct이다. 결국 Struct는 mutable일까 immutable일까랑 똑같은 질문!
Objective-C에서는 string이 struct가 아닌 class였다. 또한 NSString, NSMutableString처럼 애초에 선언할 때부터 mutable, immutable이 구분 가능했다. 하지만 Swift에서는 struct로 등장했고, swift의 struct는 value-type 이다. 따라서 int와 같은 value랑 같게 동작한다고 보면 된다.
Struct의 내부 value를 바꾸는 struct 내부 메서드를 생성할 때는 mutating이라는 키워드를 추가해줘야 한다. String의 Definition파일을 보면 대표적인 mutating 함수로 "@inlinable public mutating func append(_ newElement: Character)" 을 볼 수 있다.
즉, value-type의 객체를 let이 아닌 var로 선언하면 mutating 함수를 통해 값을 업데이트 할 수 있으므로 mutable.
let으로 선언하면 mutating 함수로도 값을 업데이트 할 수 없으므로 immutable로 보면 되겠다!
(찾아봤더니, 겉으로 보기에는 struct 내부의 value를 바꾸는 것 처럼 보이지만, 내부적으로는 바꾸려는 value를 가지고 있는 value-type(여기서는 struct)를 다시 세팅하는거라고 한다. 그렇군..)
궁금증 해결쓰!
'iOS' 카테고리의 다른 글
SwiftLint와 SwiftFormat의 차이? 같이 써도 될까? (0) | 2020.06.07 |
---|---|
SwiftFormat을 적용해보았습니다. (0) | 2020.06.07 |
SwiftLint를 적용해보았습니다. (0) | 2020.06.06 |