일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 스위프트
- 리펙토링
- Human interface guide
- Refactoring
- collectionview
- HIG
- swift documentation
- 리팩토링
- Observable
- 클린 코드
- swiftUI
- map
- MVVM
- Protocol
- combine
- uitableview
- 리펙터링
- 애니메이션
- ios
- SWIFT
- tableView
- ribs
- rxswift
- clean architecture
- Clean Code
- uiscrollview
- RxCocoa
- UICollectionView
- UITextView
- Xcode
- Today
- Total
목록프로토콜 (7)
김종권의 iOS 앱 개발 알아가기
protocol 준수하는 모델 넘기기 ViewController에서 viewModel로 SomeModelable을 준수하는 모델을 넘겨야 하는 경우? 단, SomeModelable을 준수하는 모델은 여기서밖에 사용하지 않음 protocol SomeModelable { var a: Int { get } var b: String { get } } class ViewController: UIViewController { let viewModel = ViewModel() override func viewDidLoad() { super.viewDidLoad() viewModel.configure(model: /*여기!*/) } } class ViewModel { func configure(model: SomeMo..
프로토콜로 리펙토링하는 아이디어 리펙토링의 핵심: 기존에 있는 코드에 영향을 최소화 하는 것 리펙토링 대상에 해당하는 interface들을 모두 protocol을 만들어서 선언 기존에 있던 리펙토링 대상의 인스턴스에 protocol을 타입을 따르고 기존 구현체를 대입 protocol을 준수하는 새로운 구현체를 구현하여 기존것과 변경 리펙토링 전 코드 예제 ex) LogModel이라는 기능이 있고 이 모델을 2곳 이상에서 사용하고 있을때 LogModel내부 코드를 리펙토링 하고 싶은 경우? LogModel은 UI를 탭한 카운트를 기록하는 모델 struct LogModel { private var countOfTap = 0 private var latestDate: Date? mutating func ad..
Custom View 구현 시 프로토콜을 사용하면 좋은 이유 보통 커스텀 뷰를 구현하면 사용하는쪽에서 가져다 쓰는데, 사용하는곳이 여러곳이면 이 커스텀 뷰를 수정할때 여러곳을 고려해야하여 수정이 어려움이 존재 프로토콜을 사용한다면? 구현체의 의존성을 사용하는쪽에 두지 않는것이 가장 큰 의미, DIP(Dependency Inversion Principle) 사용하는쪽에서는 Interface에만 의존하고 있기 때문에 구현체에 여러가지 변화를 주더라도 유연한 구조 유지가 가능 ex) 커스텀 뷰가 공통 뷰이고 이 뷰가 Swift에서 SwiftUI로 넘어갈 때 역시도 protocol로만 외부에게 노출했으면 유연하게 수정이 가능 protocol로 커스텀 뷰 구현하기 커스텀 버튼을 만든다고 했을 때, UIView로 ..
Protocol 지향 프로그래밍이란? 특정 기능이 필요하여 기능을 구현하려고 할 때, protocol을 먼저 선언해 놓고 그 protocol을 준수하는 구현체를 생성하여 사용 기존 기능을 그대로 사용하면서 새로운 기능을 추가하려고 할 때, 상속보다는 protocol을 사용하여 확장하는 형태로 구현하는 것 Protocol 지향 프로그래밍을 해야하는 이유 DIP (Dependency Inversion Principle): 소스코드 의존성이 구현체에 의존하지 않고 추상(protocol)에 의존하는 것 DIP 구체적인 개념은 이전 포스팅 글 참고 기능제공(=확장성) 확장성이라는 의미는 개발자가 코드를 작성할 때 매우 자연스럽게 사용이 가능 사용하는쪽에서 매우 자연스러움 -> 프로토콜을 준수한다 -> 기능을 준수..
some 키워드와 any 키워드 함수의 파라미터에 some과 any 키워드를 사용하면 자동으로 타입을 추론할 수 있게끔 컴파일러가 동작 아래에서 알아볼 특정 케이스에서 protocol을 사용할때 컴파일에러가 나는 케이스가 존재하는데 이 컴파일에러를 없애고 간편하게 사용할 수 있도록 돕도록 나온것이 some과 any 키워드 컴파일러가 더욱 유연하게 구체적인 타입을 추론할수 있게 만드는 키워드 Protocol 타입 컴파일 에러 매개변수에 Protocol 타입을 직접 참조할 수 없는 케이스가 존재 왜 참조를 할 수 없을까? 프로토콜이 associatedtype을 선언하면 컴파일러가 해당 프로토콜을 참조를 제한하기 때문 만약 associatedtype이 프로토콜 내부에 없다면 바로 참조가 가능 swift5.7 ..
Protocol (프로토콜) protocol이란 특정 작업이나 기능에 맞게 method, property 및 기타 요구 사항의 청사진을 정의 protocol은 해당 요구 사항의 실제 구현을 제공하기 위해 class, struct, enum에 의해 'conform'될 수 있는 것 protocol을 채택하는 것을 swift에서 'conform' 명명 protocol에서 property 정의 let은 불가, var만 가능 { get set }이나 { get } 속성 제공 protocol SomeProtocol { var mustBeSettable: Int { get set } var doesNotNeedToBeSettable: Int { get } } protocol에서 static 정의 protocol An..
1. Delegate Pattern : 프로토콜을 쓰는 대표적인 이유 - 각종 이벤트를 효율적으로 관리하기 위해 대리자를 지정하여 이벤트 처리를 위임하고, 이벤트 발생시 위임된 대리자가 콜백 메소드를 호출하는 설계 패턴 * protocol : 명세 - protocol입장에서 구현 하는 객체가 어떤 객체인지 상관없고, "날 구현하여 특정 일을 시행하라"라는 의미 - 클래스는 단일 상속이기때문에 protocol이 나온 것 2. 프로토콜 생성 1) 프로토콜 프로퍼티 : 연산 프로퍼티만 가능하며 get, set유무만 표현 2) 프로토콜 메소드 : 구현부만 빼고 그대로 작성 1 2 3 4 5 6 7 8 9 10 11 // 프로토콜 프로퍼티 protocol myProtocol { var a: String {get ..