본문 바로가기

Swift

[Swift] Struct And Class

안녕하세요, Wody입니다.

 

최근 코로나 백신주사를 맞아 정신이 없었습니다.

 

오늘은 정말 많이 사용하며, 익숙하면서도 놓치기 쉬운 녀석 클래스와 구조체에 대해 알아보겠습니다.


참고문서 : Struct And Class

 

구조체와 클래스의 비교

공통점

차이점 (구조체에는 없는 클래스의 기능)

  • 상속
  • 타입 캐스팅을 사용하면 런타임에 클래스 인스턴스의 유형을 확인하고 해석할 수 있습니다.
  • Deinitalizers를 통해 클래스 인스턴스가 할당된 리소스를 해제할 수 있습니다.
  • 클래스 인스턴스에 대한 둘 이상의 참조를 허용합니다.

구조체와 열거형은 값 타입

값 유형의 타입은 함수에 전달될 때나 상수에 할당될 때 값이 복사되는 방식입니다.

메모

배열, 딕셔너리, 문자열과 같은 표준 라이브러리에 의해 정의된 컬렉션은 복사의 성능 비용을 줄이기 위해 최적화를 사용합니다. 즉시 복사본을 만드는 대신 이러한 컬렉션은 원본 인스턴스와 복사본 간에 요소가 저장되는 메모리를 공유합니다. → 실제로 복사된 값이 수정되기 전까진 동일한 메모리의 값을 공유하고 있다가 복사본 중 하나가 수정되면 수정 직전에 값이 복사되는 것입니다.

열거형의 case 하나하나가 전부 유의미한 값을 가집니다.

클래스는 참조 타입

참조 유형은 값 유형과 달리 변수나 상수에 할당되거나 함수에 전달될 때 복사되지 않습니다. 복사본 대신 동일한 기존 인스턴스에 대한 참조가 사용됩니다.

그럼 참조와 값은 무엇?

  • 참조(Reference) : 참조는 C언어에서 사용되는 포인터(Pointer) 개념과 거의 같다고 보면 됩니다. 변수에 데이터를 갖고 있는 메모리 주소값을 통해 값을 다루는 방식을 참조 타입이라고 합니다.
  • 값(Value) : 값 타입은 데이터를 전달할 때 변수에 값 자체를 복사해서 전달합니다. 그래서 복사되는 원래의 데이터와 별개의 생명주기를 갖게 되어 원본 데이터가 변화해도 복사된 값을 가진 변수의 데이터는 변하지 않습니다.