티스토리 뷰
클래스와 구조체는 함수나 자료형을 선언하고 사용하는 방식이 비슷해보이지만 몇 가지 차이점들이 존재합니다.
공통점
구조체와 클래스는 다른 자료형이나 타입들을 묶어서 하나의 새로운 타입으로 사용할 수 있습니다.
내부에 프로퍼티와 메서드를 정의할 수 있고 서로 문법이 유사합니다.
할당되는 영역
class
인스턴스를 생성할 때 Heap영역에 저장됩니다.
struct
인스턴스를 생성할 때 Stack영역에 저장됩니다.
타입
class
클래스는 파라미터로 데이터 전달 시 객체를 가리키고 있는 주소를 복사하는 참조 타입입니다.
주소를 가져오기 때문에 원본에서의 변화가 복사본에서의 변화로 이어집니다.
물론 한 복사본의 변화도 원본이나 다른 복사본의 변화를 이끌어냅니다.
Multi-threaded 환경에서 한 thread가 데이터를 수정하면 다른 thread가 이용중인 데이터에 영향을 줄 수 있기 때문에 이런 경우에는 참조 타입인 클래스를 사용하는 것은 적합하지 않은 방식입니다.
struct
구조체는 파라미터로 데이터 전달 시 해당 객체가 가지고 있는 값을 복사하는 값 타입입니다.
값을 가져오기 때문에 데이터를 변화시킨다고 해서 다른 데이터에 영향을 주지는 않습니다.
다만, 클래스는 주소 하나만 복사해가지면 되지만 구조체는 복사할 크기만큼의 자원을 메모리 공간에서 소모하기 때문에 스택 오버플로우가 발생할 수 있는 단점이 존재합니다.
상속
상속은 객체 지향 프로그래밍의 대표적인 장점입니다. 상속은 클래스와 구조체를 가르는 특징 중 하나입니다.
Class
하나의 클래스는 하나의 클래스만 단일 상속 가능
Struct
구조체는 enum이라는 타입과 동일하게 객체 지향 프로그래밍의 장점인 상속이 불가능
- 해당 모델을 serialize 해서 전송하거나 파일로 저장할 경우가 발생하면 클래스 사용
- 해당 모델이 Objective-C에서도 사용되어야 한다면 클래스 사용
'Swift' 카테고리의 다른 글
[Swift] 인스턴스 (0) | 2021.01.16 |
---|---|
[Swift] 프로퍼티의 종류 (0) | 2021.01.13 |
[Swift] 메서드 (0) | 2021.01.13 |
[Swift] 옵셔널 (0) | 2021.01.12 |
[Swift] 객체 지향 프로그래밍 (0) | 2021.01.09 |
- Total
- Today
- Yesterday
- WWDC16
- 코딩대회
- 포드 풀커슨 알고리즘
- 네트워크 유량
- rxswift
- 벨만포드 알고리즘
- test coverage
- 최단경로문제
- WWDC19
- observeOn
- 최단경로 문제
- 최단경로 알고리즘
- 강한 순환 참조
- MeTal
- Testable
- CPU와 Memory
- WWDC17
- State Restoration
- 벨만포드 시간복잡도
- CompositionalLayout
- WWDC21
- 네트워크 플로우
- IOS
- 다익스트라 시간복잡도
- 컴퓨터 추상화
- mach-o
- HIG
- 부스트캠프 6기
- 최대 매칭
- 에드몬드 카프 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |