목록분류 전체보기 (30)
sanichdaniel의 iOS 개발 블로그
Property Wrapper을 이용하여 DI를 작업하다가, Property Wrapper을 이용한 DI는 DI가 아니라 Service Locator 패턴이라는 글을 읽어서 Service Locator 패턴이 무엇인지 궁금해졌다. DI와 Service Locator 모두 IoC 구현 방법중 하나이다. Inversion of Control 원리는 말 그대로 제어 흐름을 반대로 한다는 뜻이다. Dependency Injection 타겟 객체는 외부에서 의존성을 주입받는다. 장점 1. 유닛 테스트 하기 수월하다. 외부에서 mock으로 갈아끼워서 넣어주면 된다 2. 생성자만 보고 어떤 의존성이 있는지 알 수 있다. Service Locator Service Locator는 앱에서 사용되는 모든 의존성에 대해 알..
Property Wrapper 내부에서 enclosing self 를 접근하는 방법으로 KeyPath를 이용하는 해결방안이 있었는데 KeyPath가 뭐지.. 알아보자! 정의 KeyPath는 타입의 프로퍼티 값을 읽거나, 수정하지 않고 참조하는 방법을 말합니다. Swift 4 전까지는 KeyPath를 사용하려면 클로져로 래핑하거나, #keyPath() 문법을 써야했으나, 4부터는 사용하기 편리하도록 바뀌었다. struct Person { let name: String func greet() { print("Hello \(name)!") } } let p = Person(name: "Samus") let greeter = p.greet // stores the method without evaluating ..
장점 1. 의존성이 한군데서 관리된다 (관심사의 분리) 2. 한군데서 관리되기에 인스턴스의 생명주기도 관리하기 편하다 3. 한번 의존성을 등록하면, 다시 꺼내서 사용하기가 편리하다 4. configuration 스위치를 만들기 편리하다. 배포용과 테스트용 컨테이너를 만들고 상황에따라 바꿀수 있다 단점 1. DI Container 자체에 대해 공부를 해야한다. 2.사용하기 편리한만큼 코드가 우리에게 추상화가 되어있어 이해하기 어렵다. 3. DI 컨테이너를 모든곳에서 접근할수 있다면, Service Locator 안티패턴으로 이어질 가능성이 크다. 따라서 Composition Root 같이 특정한곳에서 최소한으로 노출이 되어야한다. 출처 StackOverflow DI 컨테이너 도입 토론의 장
Generic where문을 사용하며 문법이 헷갈리는 경우가 많아 정리해보았다 제너릭 where문으로 type paramter과 associated type에 추가적으로 더 요구사항을 줄 수 있다 where 요구사항 요구사항은 type paramter가 특정 클래스를 상속받거나, 프로토콜을 채택함으로 나타낸다. -> where T: Comparable 요렇게 문법적 슈가로 쓸수도 있지만 where S.Iterator.Element: Equatable 로 사용하여, S 가 Sequence protocol 채택하고, associated type S.Iterator.Element가 Equatable protocol을 채택함을 나타낸다. where S1.Iterator.Element == S2.Iterator...