Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 리스트뷰
- observable
- Self
- 클로저
- RxSwift
- 프래그먼트
- concurrency
- 연산자
- async
- 해시
- 옵셔널
- 안드로이드
- Subject
- 스위프트
- rx
- 구조체
- 차이
- ios
- 풀이
- 생명주기
- 서브스크립트
- 프로그래머스
- 알고리즘
- weak
- View
- 백준
- 이스케이핑
- Swift
- 자바
- 테스크
Archives
- Today
- Total
study record
[Swift] 스위프트 프로그래밍 - 구조체와 클래스의 차이와 선택 본문
비슷한 점
- 값을 저장하기 위해 프로퍼티를 정의한다.
- 기능 실행을 위해 메서드를 정의한다.
- 초기화될 때의 상태를 지정하기 위해 이니셜라이저를 정의할 수 있다.
다른 점
- 구조체는 상속할 수 없다.
- 타입캐스팅은 클래스의 인스턴스만 가능하다.
- 디이니셜라이저는 클래스의 인스턴스에만 활용할 수 있다. (디이니셜라이저란 클래스의 인스턴스가 참조할 필요가 없을 때 메모리에서 해제되기 전 호출되는 것이다. (deinit 메소드))
- 참조 횟수 계산은 클래스의 인스턴스에만 적용된다.
가장 큰 차이점은 클래스는 참조타입, 구조체는 값 타입이라는 점이다.
값 타입과 참조 타입
두 타입의 큰 차이는 '무엇이 전달되느냐'이다.
함수의 전달인자가 값 타입일 때에는 전달될 값이 복사되어 전달된다.
전달인자가 참조타입일 때에는 복사하지 않고 참조(주소)가 전달된다. (C의 포인터와 유사개념)
클래스의 인스턴스끼치 참조가 같은지 확인할 때는 식별연산자를 사용한다. 두 참조가 같은 인스턴스를 가리키고 있는지 비교한다. (===)
구조체와 클래스 중 선택하기
구조체와 클래스는 새로운 데이터 타입을 정의하고 기능을 추가하는 점에서 같다.
다른 것은 구조체 인스턴스는 항상 값 타입이고, 클래스 인스턴스는 참조 타입이라는 것이다.
프로젝트의 성격에 따라, 데이터의 활용도에 따라 선택하여 사용해야 한다.
애플은 다음 조건 중 하나 이상에 해당한다면 구조체를 사용하는 것을 권장한다.
- 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 때
- 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할 때
- 구조체에 저장된 프로퍼티가 값 타입이며 참조하는 것보다 복사하는 것이 합당할 때
- 다른 타입으로부터 상속받거나 자신을 상속할 필요가 없을 때
'Swift > 스위프트 프로그래밍' 카테고리의 다른 글
[Swift] 스위프트 프로그래밍 - 인스턴스 생성과 프로퍼티 (0) | 2021.11.07 |
---|---|
[Swift] 스위프트 프로그래밍 - 프로퍼티 (0) | 2021.09.29 |
[Swift] 스위프트 프로그래밍 - 구조체 (0) | 2021.09.28 |
[Swift] 스위프트 프로그래밍 - 구조체와 클래스 (0) | 2021.09.28 |
[Swift] 스위프트 프로그래밍 - 옵셔널 (0) | 2021.09.17 |