본문 바로가기

Swift/Foundation

class, struct

공통점

  • 프로퍼티, 메소드를 갖는 컨테이너를 말한다.
  • subscript 구문을 사용하여 값을 접근할 수 있는 subscript를 정의한다.
  • 초기 값을 설정하는 초기화를 정의한다.
  • extension을 사용할 수 있다.
  • protocol을 채택할 수 있다.

 

 

Class

  • 상속을 할수 있다.

  • deinit을 정의할 수 있다.

    arc가 다루며, 해지할 때 필요한 작업을 수행한다.

    deinit은 자동으로 호출되며 수동으로 호출할 수 없다.

    서브 클래스에 deinit이 제공되지 않더라도 슈퍼 클래스의 deinit가 항상 호출 된다.

  • 타입 캐스팅이 가능하다. (상위 또는 하위 클래스로 형변환)

  • reference type이다.

 


 

Value type

값 복사를 할 경우에 인스턴스를 복사하면 각 인스턴스는 유니크한 데이터를 갖는다.

하나의 인스턴스를 변경하면 다른 인스턴스는 변경되지 않는다.

 

Reference type

참조 복사를 할 경우에 두 인스턴스는 데이터를 공유한다. 즉 데이터를 복사한 게 아니라 참조를 복사한다.

class 내부에서 구조체를 사용하면 별다른 문제가 없지만, struct 내부에 공유 클래스 인스턴스를 사용한다면 조심해야한다.

 

stack (Value Type)

정적 메모리이며, 인스턴스의 생명주기를 직접 관리하고, 변수를 메모리에 직접 저장하기 때문에 접근 속도가 빠르다. 함수가 다른 함수를 호출할 경우 그 다음 함수를 순서대로 호출하며, 마지막 함수가 값을 반환할 때까지 모든 함수의 실행이 일시 정지된다. 스택은 LIFO(Last In First Out)으로 마지막으로 들어온 블럭(함수, 클로저)이 해제될 다음 블럭이다.

(값 타입은 보통 스택에 저장되지만, 만약 class안 struct가 존재한다면 heap에 저장된다.) 

 

Heap (Reference Type)

동적 메모리이며, 스택과 달리 인스턴스의 생명주기를 직접 관리하지 않으며 ARC(Automatic Reference Counting)을 사용하여 처리한다. (RC가 0이면 그 객체를 해제한다.) 생명주기를 직접 관리하는 스택과 달리 ARC를 사용해서 처리하기 때문에 스택에 비해 처리 속도가 느리다.

'Swift > Foundation' 카테고리의 다른 글

Properties  (0) 2020.08.06
Dispatch Queue  (0) 2020.08.04
Bridging  (0) 2020.07.06
Out of Bounds  (0) 2020.06.28
MVC Design Pattern  (0) 2020.06.28