Swift) 타입으로서의 Protocol 이를 이용한 Singleton 의존성 개선

2023. 7. 4. 04:13·앱/Swift

프로토콜은 타입으로 사용이 가능하다.

이것은 해당 프로토콜을 채택한 어떠한 클래스의 인스턴스도 들어갈 수 있다는 것을 의미한다.

" You can set it to an instance of any type that adopts the protocol ."

예를 들어

protocol Human {
    func getAge() -> Int
}


class Male: Human {
    var age: Int
    init(_ age: Int) {
        self.age = age
    }
    func getAge() -> Int {
        return age
    }
}

class Female: Human {
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
    func getAge() -> Int {
        return age
    }
}

var someOne: Human
let jinyong = Male(28)
let jung = Female(age: 32, name: "female")
someOne = jinyong
someOne.getAge()
someOne = jung
someOne.getAge()

연산프로퍼티를 포함하고 있는 프로토콜

연산프로퍼티를 통해서 채택하고 있는

  • 클래스 내부의 값을 정할수 있고 {get}
  • 혹은 클래스 내부의 값을 변경할수 있다 { set }
protocol Human {
    func getAge() -> Int
    var Name: String { get }
}


class Male: Human {
    var Name: String {
        return self.name
    }
    
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
    func getAge() -> Int {
        return age
    }
}


var someOne: Human
let jinyong = Male(age: 28, name: "jinyong")
someOne = jinyong
someOne.Name

이거는 언제 쓰나요???

이러한 방법을 통해서 프로토콜 그 자체를 타입으로 사용하여, 싱글톤 객체에 대한 디팬던시를 줄일수 있다.

즉, 프로토콜을 채택한 클래스만, 싱글톤 객체에 접근할수 있도록 해주며, 또한 해당 객체가 싱글톤 객체라는것을 해당 클래스에게 알려주지 않는것을 통해 싱글톤의 문제점인 여러 클래스에서 인스턴스에 접근하게 되는 문제점을 해결할수 있는 좋은 방법인 것이다.

프로토콜 채택 여부 확인( is, as, as?, as!)

프로토콜을 채용하고 있는지 확인하는데에는 타입캐스팅 연산자를 사용한다. ( is, as, as?, as! )

  • is : 프로토콜 채택여부를 bool값으로 반환
  • as: 프로토콜 타입으로 캐스팅 시도
  • as? : as에서 → 성공시 옵셔널<프로토콜> 타입, 실패시 nil
  • as!: as에서 옵셔널<프로토콜>타입을 <프로토콜 >타입으로 강제 언래핑


참고자료

[Swift] 타입으로서의 프로토콜 ( Protocol as Type )
참고 자료: Protocols - swift.org 프로토콜은 First Class Citizen 이기 때문에, 하나의 독립적인 타입 ( a fully fledged types ) 으로 사용할 수 있습니다. 따라서 아래 3가지가 가능합니다. 1. function, method, initializer 의 parameter 와 return type으로 사용 가능 2. constant, variable, property 의 type 으로 사용 가능 3. array, dictionary 와 같은 컨테이너의 item의 type으로 사용 가능 그리고 타입이기 때문에 Upper Camel Case 를 사용합니다. (e.g. RandomNumberGenerator, FullyNamed ...) class Dice { ..
https://woozzang.tistory.com/54


Uploaded by N2T

반응형

'앱 > Swift' 카테고리의 다른 글

UIKit) Pull Down Button 과 Pop Up Button  (1) 2023.07.04
Singleton에서 Protocol을 이용한 의존성 개선 방법  (0) 2023.07.04
Swift개발 ) Thread 1 : Fatal error 처리  (0) 2023.07.04
타입으로서의 Protocol 그리고 싱글톤 의존성 개선  (0) 2023.04.09
Swift) Static Dispatch, Dynamic Dispatch이란?  (0) 2023.04.09
'앱/Swift' 카테고리의 다른 글
  • UIKit) Pull Down Button 과 Pop Up Button
  • Singleton에서 Protocol을 이용한 의존성 개선 방법
  • Swift개발 ) Thread 1 : Fatal error 처리
  • 타입으로서의 Protocol 그리고 싱글톤 의존성 개선
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    uikit
    스위프트
    dispatchqueue
    웹
    widgetkit
    ReactorKit
    멋쟁이사자처럼
    리액트
    운영체제
    swift concurrency
    영남대
    widget
    c++
    대외활동
    후기
    SwiftUI
    문법
    cs
    백준
    네트워크
    알고리즘
    스유
    spritekit
    composable architecture
    위젯킷
    Swift
    컴퓨터그래픽스
    멋사
    TCA
    Protocol
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
Swift) 타입으로서의 Protocol 이를 이용한 Singleton 의존성 개선
상단으로

티스토리툴바