[Swift] 클래스와 구조체

E_H·2021년 9월 8일
0

Swift

목록 보기
9/11

특징

클래스

  • Reference Type (참조타입)
  • 인스턴스 데이터를 힙 영역에 저장, 해당 힙을 가르키는 변수는 스택에 저장
  • 메모리 주소값은 힙을 가르킴
  • 지정된 주소값을 전달하며, ARC에 의해 메모리관리

구조체

  • Value Type (값타입)
  • 인스턴스 데이터를 모두 스택영역에 저장
  • 값을 전달할때 마다 복사본을 생성

메모리 동작방식

class Person {
  var name = "사람"
  var age = 0
}

struct Animal {
  var name = "동물"
  var age = 0 
}

func example() {
  var animalStruct = Animal()
  let personClass = Person()
  
  personClass.name = "사람이름"
  animalStruct.name = "동물이름"
}

전역이므로 데이터영역에 할당된 Person클래스와 Animal구조체이며
personClass로 클래스 인스턴스 생성시 해당 인스턴스는 힙영역에 할당되어 perconClass는 Person의 주소값을 가집니다.

그래서 personClass.name으로 Person의 변수값을 바꾸려할때
주소값을 이용해 Person클래스에 접근하여 새로운 변수값을 저장합니다.

구조체의 경우
데이터영역에 있는 animal은 그대로 있고
animalStruct 인스턴스로 생성하면 이 인스턴스는 스택영역에 할당됩니다.

구조체는 원본을 복사하는 Value 타입이기 때문에 constant로 생성할 경우
구조체 내부 변수에 값을 저장할 수 없습니다.
그래서 variable 키워드를 사용하여 생성한 후에 접근해야합니다.

예시

클래스, 구조체 사용시기

애플문서 에서 나열한 사용시기는 다음과 같습니다.

  • 기본적으로 구조체 사용.
  • Objective - C 와 상호운용이 필요할때 클래스 사용
  • 모델링한 데이터의 identity를 제어해야하는 경우 클래스 사용
  • 구현을 공유하며 프로토콜을 채택하는 경우 구조체 사용

0개의 댓글