[Swift] class와 struct의 차이

naljin
3 min readJul 25, 2020

--

맨날 class 는 refernce 타입, struct는 value 타입이라고 주입식 교육 마냥 외우고 있었는데 유툽 강의 듣다가 핵심 쏙쏙 부분 있어서 기록 조진다!

Class

  • reference 타입이라 heap 에 살고 있음.
  • argument로 class를 넘기면 pointer가 전달되기 때문에 여러군데에서 해당하는 class를 참조하고 있을 수 있음.
  • 그래서 몇군데서 참조하고 있는지 알 수 있게 자동으로 참조 카운트(automatically ref counted) 를 세고, 얘를 가리키는 애가 더이상 존재하지 않으면 힙에서 사라짐.
  • 객체 지향 프로그래밍 지원
  • 언제나 변경 가능함(mutable). pointer 갖고 있기 때매 해당 heap 에 가서 변경하면 되는 거
class myClass {
var mutableProperty: Int = 0
}
let classInstance = myClass()
classInstance.mutableProperty = 1 // 인스턴스는 let이지만, 안의 property는 변경 가능.
classInstance = myClass() // error : 다만 instance는 자체는 let이기 때문에 변경 불가
  • MVVM 에서 ViewModel 은 언제나 class. 왜냐면 다른 뷰에서도 공유되어야하니까 ㅇㅇ. UIKit도 class 베이스.

struct

  • Value 타입이라 stack 에 살고 있음
  • argument로 넘기면 해당 값이 복사된 복사본이 넘어감. 실제 bitwise copy 가 바로 일어나진 않고 않고 해당 값에 write 하려고 할때 일어나긴 하지만.. 튼 핵심은 공유하지 않는다는거
  • array, dicionary, int, bool 등 대부분은 struct
  • 함수형 프로그래밍 지원
  • 변경 가능성(mutability)을 명시적으로 let이냐 var이냐를 통해 언급해줘야함
struct myStruct {
var mutableProperty: Int = 0
}
let structInstance = myStruct()
structInstance.mutableProperty = 1 // error : 인스턴스가 let이어서 안의 property도 변경 불가. 왜냐면 값 타입이라 property 변경되면 인스턴스 자체도 바뀜
  • 이 강의에서 볼 대부분의 것들은 struct (다만 View 는 protocol)

그림으로 이해하기

섬네일 짤이나 찾으려고 하다가 뜻밖에 좋은 슬라이드를 발견했다. 그럼 ㅅㄱ!

참고

--

--

No responses yet