본문 바로가기
공부/[iOS&Swift]

[Swift] 구조체(struct)와 클래스(class)

by 인생은아름다워 2022. 1. 12.

✏️  구조체와 클래스

Swift에서 구조체와 클래스를 공부하면서 잘 알아야 할 것은 구조체와 클래스 모두 하나의 타입에 속한다는 것이다. 둘 다 똑같이 커스텀 타입인데 뭐가 다른지를 잘 알고 필요에 맞게 사용하면 될 것 같다.

✏️  구조체와 클래스의 차이

우선 아래의 내용을 잘 아는게 중요할 것 같다.

  1. 구조체는 값 타입(Value type), 클래스는 참조 타입(Reference type)이다.
  2. 클래스는 상속이 가능하고, 구조체는 상속이 불가능하다
  3. 클래스는 default initializer를 생성해주지 않는다. 반면 구조체는 Swift가 memberwise initializer도 지원해준다.

✏️  값 타입 vs 참조 타입

  • 값 타입(Value type)
  1. 변수를 할당하면 스택 영역에 값이 저장된다.
  2. 변수를 복사한 후 복사본을 변경한다 하더라도, 원본의 데이터에 영향을 주지 않는다.( 복사할 때 새로운 인스턴스를 만든다는 것이겠지?)
  3. 레퍼런스 카운팅이 필요하지 않다.(이 말은 나중에 다시 공부하자, ARC..?)
  • 참조 타입(Reference type)
  1. 스택 영역에는 변수의 레퍼런스(주소)만 할당되고, 실제 데이터는 힙 영역에 할당된다.
  2. 변수를 복사한다 해도 원본과 복사된 변수 모두 같은 힙 영역의 데이터를 가리키고있다. 그렇기 때문에 복사본을 바꾸면 원본도 변한다.

→ 이 부분이 가장 와닿는다. 공통되게 이용해야할 때 클래스와 구조체 중 클래스를 사용하면 될 것 같다.

  1. 변수를 복사할 때 레퍼런스 카운트만 +1된다. 실제로 값이 복사되진 않는다. (이 내용 또한 ARC...?)

댓글