07.28(월)
제가 이해하고 공부 한대로 작성한 내용이다 보니 , 정확한 정보가 아닐수도 있습니다
고쳐야 할 부분이 있다면 , 편하게 애기 해주시면 감사 하겠습니다🙏🏻
값 타입(Value Type)으로, 메모리에서 값을 복사해 사용하므로 독립된 인스턴스를 생성.
상속 불가능.
주로 데이터를 저장하거나 간단한 로직을 수행할 때 사용.
struct Product {
var id : String
var name : String
var price: Double
var category: Category
}
참조 타입(Reference Type)으로, 메모리에서 동일한 인스턴스를 여러곳에서 참조.
상속 가능.
객체지향 프로그래밍의 주요 개념으로 사용.
class Product {
var id: String
var name: String
var price: Double
var category: Category
}
특징 | Struct | Class |
---|---|---|
메모리 구조 | Stack 메모리 사용 | Heap 메모리 사용 |
타입 | 값 타입 (Value Type) | 참조 타입 (Reference Type) |
상속 | 불가능 | 가능 |
성능 | 값 복사 방식으로 성능 우수 | 참조 방식으로 성능이 다소 낮을 수 있음 |
복사 방식 | 복사 시 새로운 인스턴스 생성 | 복사 시 같은 인스턴스를 참조 |
스레드 안정성 | 상대적으로 안전 (Immutable 사용 시) | 동시성 관리 필요 |
💡 Swift에서는 Struct를 기본으로 사용하며, 필요할 때만 Class를 사용하는 것이 일반적인 패턴입니다.
프로토콜(Protocol)은 특정 기능을 정의한 청사진입니다.
Struct, Class, Enum에서 프로토콜을 채택(Adopt)하고 구현(Implement)할 수 있습니다.
용도
코드를 재사용 가능하고 유연하게 설계.
프로토콜 기반의 설계 방식(Protocol-Oriented Programming)을 가능하게 합니다.
상속 방향과 프로토콜의 필요성
protocol ShoppingCartProtocol {
var totalPrice: Double { get }
func addItem(_ product: Product) async throws
func removeItem(at index: Int) async throws
}