Struct와 Class / 프로토콜

Ios_Roy·2025년 7월 28일
0

TIL

목록 보기
12/25

07.28(월)

제가 이해하고 공부 한대로 작성한 내용이다 보니 , 정확한 정보가 아닐수도 있습니다
고쳐야 할 부분이 있다면 , 편하게 애기 해주시면 감사 하겠습니다🙏🏻

Struct(구조체):

  • 값 타입(Value Type)으로, 메모리에서 값을 복사해 사용하므로 독립된 인스턴스를 생성.

  • 상속 불가능.

  • 주로 데이터를 저장하거나 간단한 로직을 수행할 때 사용.

    
    struct Product {
     var id : String
     var name : String
     var price: Double
     var category: Category
    }
    

    Class(클래스):

  • 참조 타입(Reference Type)으로, 메모리에서 동일한 인스턴스를 여러곳에서 참조.

  • 상속 가능.

  • 객체지향 프로그래밍의 주요 개념으로 사용.

    class Product {
      var id: String
      var name: String
      var price: Double
      var category: Category
    }
    

주요 차이점

✅ Struct vs Class 주요 차이점

특징StructClass
메모리 구조Stack 메모리 사용Heap 메모리 사용
타입값 타입 (Value Type)참조 타입 (Reference Type)
상속불가능가능
성능값 복사 방식으로 성능 우수참조 방식으로 성능이 다소 낮을 수 있음
복사 방식복사 시 새로운 인스턴스 생성복사 시 같은 인스턴스를 참조
스레드 안정성상대적으로 안전 (Immutable 사용 시)동시성 관리 필요

💡 Swift에서는 Struct를 기본으로 사용하며, 필요할 때만 Class를 사용하는 것이 일반적인 패턴입니다.

2. 프로토콜

  • 프로토콜(Protocol)은 특정 기능을 정의한 청사진입니다.

  • Struct, Class, Enum에서 프로토콜을 채택(Adopt)하고 구현(Implement)할 수 있습니다.

  • 용도

    • 코드를 재사용 가능하고 유연하게 설계.

    • 프로토콜 기반의 설계 방식(Protocol-Oriented Programming)을 가능하게 합니다.

      프로토콜(Protocols)

상속 방향과 프로토콜의 필요성

프로토콜의 요구사항의 종류

  • 최소한의 요구사항 나열
  • 여러개의 프로토콜 구현 가능
  • 프로토콜을 채택하려는 클래스, 구조체, 열거형에 최소한 이런 내용을 구현해야한다고 선언하는 부분
    • 속성 요구사항
    • 메서드 요구사항 (메서드/생성자/서브스크립트)

속성의 요구사항 정의하는 방법

  • 속성의 뜻에서 var로 선언 (let으로 선언할 수 없음)
  • get, set 키워드를 통해서 읽기/쓰기 여부를 설정 (최소한의 요구사항일뿐)
  • 저장 속성/계산 속성으로 모두 구현 가능

예시 코드

 protocol ShoppingCartProtocol {
    var totalPrice: Double { get }
    func addItem(_ product: Product) async throws 
    func removeItem(at index: Int) async throws
}
 
profile
iOS 개발자 공부하는 Roy

0개의 댓글