계발자 블로그
[Swift] Class와 Struct 본문
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 |