Protocol Oriented Programming

Groot·2022년 8월 24일
0

TIL

목록 보기
33/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 Protocol Oriented Programming

📍 Protocol in Swift

  • Protocol + Extension = Protocol extension
  • 특정 타입이 할 일을 지점하고 구현이 가능하다!

📍 Advantage

  • 범용적인 사용
    • 클래스, 구조체, 열거형 등등
    • 제네릭과 결합하면 더욱 파급적인 효과
  • 상속의 한계 극복
    • 특정 상속 체계에 종속되지 않음
    • 프레임워크에 종속적이지 않게 재활용 가능
  • 적은 시스템 비용
    • Reference tyoe cost > Value tyoe cost
  • 용이한 테스트
    • GUI 코드 없이도 수월한 테스트

📍 Summary

  • Value Type을 사용하여 성능상의 이득을 취하자
  • Protocol + Extension + Generic은 환상의 조합이다

📌 Escaping Closure

  • 함수의 매개변수로 받은 클로저를 함수 밖에서도 호출이 가능하도록 사용하는 방법
  • 주로 비동기 호출에서 사용한다.
  • 기본적으로 함수의 매개변수로 들어오는 클로저는 함수 안에서만 사용할 수 있다.
  • 비동기로 클로저를 실행할 때 큐는 클로저를 메모리에 보관하고 나중에 사용
import Foundation

var escapingClosure: (String) -> Void = {_ in }

func excute(text: String, escapingClosuer: @escaping (String) -> Void, nonEscapingClosure: (String) -> Void) {
    DispatchQueue.global().async {
        escapingClosure(text)
//        nonEscapingClosure(text)
// 주석을 제거하면 "Escaping closure captures non-escaping parameter 'nonEscapingClosuer'" 라는 에러가 나타난다.
    }
}

excute(text: "출력") { String in
    print(String)
} nonEscapingClosuer: { String in
    print(String)
}
sleep(10)
  • Escaping Closure를 사용하는 이유
    • 함수내부에서 비동기처리를 하면 호출되는 시점이 언제인지 모르기 때문에(함수의 호출이 끝나고 클로저가 호출이 될 수 있기 때문에) 탈출 클로저를 사용해서 함수의 호출이 끝나도 클로저의 호출이 가능하도록 하기 위해서 사용하는거 같다.

📌 NameSpace

  • enum을 사용하는 NameSpace 에서 중복값과 여러가지 타입의 값을 case와 중첩타입으로 처리하는 방법
  • static let과 case의 단점을 모두 커버하는 방법으로 유지보수에 좋을것 같다.
enum NameSpace {
    case magicLiteral1
    case magicLiteral2

    var duplicatevalues: String {
        switch self {
        case .magicLiteral1:
            return "1"
        case .magicLiteral2:
            return "1"
        }
    }
    
    var number: Int {
        switch self {
        case .magicLiteral1:
            return 1
        case .magicLiteral2:
            return 1
        }
    }
}
profile
I Am Groot

0개의 댓글