일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- WeatherKit
- CS
- 네트워크
- 협업
- 토이프로젝트
- async
- uikit
- mvc
- 구름톤 유니브
- 앱개발
- swift
- 스트럭트
- RxSwift
- 딕셔너리
- 대표
- SwiftUI
- collectionview
- 세종대학교
- 학과별커뮤니티
- struct
- MVVM
- forEach
- ios
- 기초문법
- AppStore
- 프로토콜
- 디자인 패턴
- 실습
- 반응형
- 이론
- Today
- Total
스윞한 개발자
Swift 기초 문법 - 클래스 vs 스트럭트(구조체) 본문
클래스와 구조체 비교를 해보겠습니다!
클래스와 구조체는 Swift에서 사용되는 두 가지 데이터 타입입니다. 둘 다 멤버 변수와 멤버 함수를 포함하는 자체적인 타입을 정의할 수 있습니다.
< 구조체 - 하나의 동작을 하는 객체 만들기 >
구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체 프로퍼티 이름으로 자동 지정됩니다.
인스턴스가 생성되고 초기화된 후 프로퍼티 값에 접근하고 싶다면 마침표(.)를 사용하면 됩니다.
let 선언 시 인스턴스 내부 프로퍼티 값 변경 X
var 선언 시 인스턴스 내부 프로퍼티 값 변경 O
struct 구조체 이름 {
프로퍼티, 메소드 }
var 이름 = 구조체이름()
< 클래스 >
스위프트의 클래스는 부모클래스가 없더라도 상속 없이 단독으로 정의가 가능합니다.
class 클래스 이름 {
프로퍼티, 메소드 }
class 클래스 이름 : 부모클래스 이름 {
프로퍼티, 메소드 }
구조체와 다르게 참조 타입이므로 let으로 선언을 해도 내부 프로퍼티 값을 변경할 수 있습니다.
< 차이점 >
1. 상속성 : 클래스는 다른 클래스로부터 상속을 받을 수 있지만, 구조체는 상속을 지원하지 않습니다. 클래스는 기존 클래스의 특성을 상속받아 새로운 특성을 추가하거나 수정할 수 있상속 계층 구조를 형성할 수 있습니다.
2. 참조 타입 vs 값 타임 : 클래스는 참조 타입이며, 구조체는 값 타입입니다.
클래스 인스턴스는 힙(heap)에 저장되고, 인스턴스를 참조하는 변수나 상수는 해당 인스턴스의 메모리 주소를 가리킵니다.
구조체 인스턴스는 스택에 직접 저장되고, 인스턴스를 할당하는 변수나 상수에는 값 자체가 저장됩니다.
클래스는 참조에 의해 전달되고 복사되지 않지만, 구조체는 갑이 복사되어 전달됩니다.
3. 클래스의 생명 주기 관리 : 클래스는 참조 카운팅을 통해 메모리를 관리합니다. 여러 개의 참조가 동일한 인스턴스를 가리킬 수 있으며, 참조 카운트가 0이 되면 자동으로 메모리에서 해제됩니다.
구조체는 값 타입이므로 참조 카운팅이 필요하지 않습니다. 구조체 인스턴스는 스코프를 벗어나면 자동으로 해제됩니다.
4. 멤버 초기화 : 클래스는 지정 이니셜라이저와 편의 이니셜라이저를 사용하여 멤버 변수를 초기화할 수 있습니다. 구조체는 자동으로 멤버 변수를 초기화하는 멤버와 이니셜라이저를 제공합니다.
일반적으로 클래스는 상속이 필요하거나 참조 타입의 특성이 필요한 경우에 사용됩니다. 구조체는 간단한 데이터 구조를 표현하거나 값 복사가 필요한 경우에 사용됩니다. 또한, 구조체는 값 타입이므로 스레드 안정성이나 코드 예측 가능성을 높이는 데 도움이 될 수 있습니다.
'Swift 이론' 카테고리의 다른 글
Swift 기초문법 - 클로저 (0) | 2024.01.23 |
---|---|
Swift 기초 문법 - 제네릭 (2) | 2024.01.23 |
Swift 기초문법 - Unwrap 옵셔널 변수 (2) | 2024.01.23 |
Swift 기초문법 - For 반복문 (0) | 2024.01.23 |
Swift 기초 문법 - enum 케이스 나누기 (0) | 2024.01.23 |