티스토리 뷰

 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)를 다시 세팅하는거라고 한다. 그렇군..)

 

 

궁금증 해결쓰!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함