계발자 블로그

[Swift] Class와 Struct 본문

Swift

[Swift] Class와 Struct

더구더구 2024. 5. 24. 11:01

Class(클래스)와  Struct(구조체)

클래스와 구조체는 코드를 추상화 하기 위해 사용됩니다.

클래스와 구조체는 프로퍼티와 메서드를 사용하여 구조화된 데이터와 기능을 가질 수 있습니다.

새로운 사용자 정의 데이터 타입을 만드는 것입니다.

- 인스턴스(instance) : 클래스/구조체에서 생성된 객체 (= 구조체와 구조체라는 틀(frame)안에서 찍어낸 내용물)
- 프로퍼티(property) : 클래스/구조체 객체(= 인스턴스)에 들어있는 정보, 값
- 메서드(method) : 클래스/구조체 객체(= 인스턴스)에 들어있는 함수

 

선언하기

클래스는 class 키워드를, 구조체는 struct 키워드를 이름 앞에 적어 선언합니다.

class SomeClass {
// 프로퍼티와 메소드를 정의합니다.
}
struct SomeStructure {
// 프로퍼티와 메소드를 정의합니다.
}

let someClass = SomeClass() // 클래스 인스턴스 생성
let someStructure = SomeStructure() // 구조체 인스턴스

 

클래스와 구조체의 공통점

  • 프로퍼티와 멤서드를 사용하여 구조화된 데이터와 기능을 가집니다.
  • 새로운 사용자 정의 타입을 만들어 줍니다.
  • 초기화(init)을 정의하여 초기 상태를 설정할 수 있습니다.
  • 확장(extension)할 수 있습니다.
  • 프로토콜(protocol) 사용이 가능합니다.
  • 특정 값에 접근할 수 있는 서브스크립트(subscript) 문법이 사용 가능합니다.
  • 프로퍼티 값에 접근할 때 점(dot) 문법을 사용합니다.

 

클래스와 구조체의 차이점

  • 클래스
    • 참조 타입(Reference Type)입니다. 참조 타입이란, 변수나 상수에 값을 할당하거나 함수에 인자로 전달될 때 그 값이 복사되지 않고 참조된다는 의미입니다.
    • Call by reference 할당 또는 파라미터 전달 시에 객체를 가리키고 있는 메모리의 주소 값이 복사 됩니다.
    • Heap Memory 영역에 할당됩니다. 따라서 속도가 느립니다.
    • 상속이 가능합니다.
    • 런타임에 타입 캐스팅을 통해 클래스 인스턴스에 따라 여러 동작이 가능합니다.
    • deinitializer가 존재합니다.
  • 구조체
    • 값 타입(Value Type)입니다. 값 타입이란, 함수에서 상수나 변수로 전달될 때 그 값이 복사되서 전달된다는 의미입니다.
    • Call by value 할당 또는 파라미터 전달 시 value copy가 됩니다.
    • 값 타입이기 때문에 멀티 스레트 환경에서 공유 변수로 인한 문제가 일어날 확률이 적습니다.
    • Stack Memory 영역에 할당되므로 속도가 빠릅니다.
    • Scope based lifetime 컴파일 타임에 컴파일러가 언제 메모리를 할당/해제할지 알고있습니다.
    • 상속이 불가능합니다.
    • AnyObject로 타입 캐스팅이 불가능합니다.

 

'Swift' 카테고리의 다른 글

[Swift] Tuple(튜플)  (0) 2024.05.21
[Swift] Collection  (0) 2024.05.20