공통점
- 값을 저장할 프로퍼티 선언할 수 있음
- 함수적 기능을 하는 메서드를 선언할 수 있음
- extension을 사용하여 기능 확장할 수 있음
- Protocol을 채택하여 기능을 설정할 수 있음
- .을 이용해 내부값에 접근
- 생성자를 사용해 초기 상태 설정
차이점
Struct
Class
클래스 | 구조체 |
참조타입 | 값타입 |
같은 클래스 인스턴스에 여러개의 변수를 할당하게 되면 하나의 인스턴스를 가리키는 메모리 주소만 복사되어서 같은 클래스의 인스턴스를 여러개 할당한 뒤 값을 변경시키면 모든변수에 영향을 줌 | 같은 구조체를 여러개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않음(값 자체를 복사) |
상속이 가능 | 상속 불가능 |
타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인 할 수 있음 | 변수를 할당하면 스택영역에 값이 저장되기 때문에 ARC로 메모리 관리가 안됨 |
deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있음 | 구조체 변수를 새로운 변수에 할당할 때 마다 새로운 구조체가 할당됨 |
-메모리 스택영역에 포인터 즉 인스턴스의 메모리주소만 할당됨 -실제 데이터는 힙영역에 할당됨 때문에 ARC로 메모리를 관리 -참조가 어디서 어떻게 될지 모르기에힙 영역에 할당됨 |
언제 생기고, 사라질지 컴파일 단계에서 알 수 있기 때문에 메모리의 stack공간에 할당됨 |
-Heap영역에는 컴파일 단계에서 생성과 해제를 알 수 없는 참조 타입 의객체가 할당됨 -메모리의 할당과 해제가 하나의 명령어로 처리되지 않음 -스레드가 공유하는 메모리 공간임 |
-stack LIFO(Last In First Out)형태의 자료구조 가장 마지막에 들어가 객체가 가장 먼저 나오는 구조 -자료구조 특성상 하나의 명령어로 메모리를 할당, 해제(pop,push)할 수 있음 |
같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 모든 변수에 영향을 줌 | -단순한 데이터 값을 보유할때 구조체가 좋음 -메모리의 스택은 크지 않기 떄문에 작은 값을 갖는 데이터를 처리할때 구조체 사용 |
Objective-C와 상호 운용성을 원할떄 클래스 사용 | 값타입 1. Copy - on - assignment 값타입을 다른 변수에 할당하면 새로운 메모리 공간에 같은 값을 복사 2.Copy - on - write 일단 메모리를 할당하지 않고 같은 곳을 바라봄 메모리 최적화를 위해 해당값을 변경할떄 실제로 메모리에 값을 복사하고 값을 변경함 Int,Double,String,Array,Set,Dictionary에서만 사용 |
'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글
[Swift] assert(_:):file:line:) (0) | 2022.09.21 |
---|---|
[Swift] 타입캐스팅 (is, as, as?, as!) (1) | 2022.09.20 |
[Swift] 프로퍼티(Properties) (1) | 2022.09.19 |
(Swift) Class (클래스) 간단히 정리 (0) | 2022.09.18 |
[Swift] 구조체 (간단히 정리) (0) | 2022.09.17 |