목록분류 전체보기 (30)
sanichdaniel의 iOS 개발 블로그
실용주의 프로그래머 책을 읽다가 AOP라는 단어가 나와서 공부해보았다. OOP, POP, FP는 들어봤어도 AOP AOP를 번역하면 관점 지향 프로그래밍이다. 로직을 핵심적인 관점, 부가적인 관점으로 분리하고 그 관점을 기준으로 모듈화를 하겠다는 의미이다. 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위한 부가적인 코드로 다른말로는 흩어진 관심사라고 한다. 이 부가적인 코드들은 여러 곳에 횡적으로 흩어져 반복적으로 사용되고 있다. iOS에서는 로깅, 데이터 저장, 캐싱 관련 코드가 있겠다. 위처럼 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비지니스 로직에서 분리하여 재사용하는것이 AOP이다. AOP의 개념들 Joinpoint:..
요약 Opaque 타입은 변수, 메서드의 리턴타입을 프로토콜 타입으로 숨긴다. 이는 모듈과 모듈을 호출하는 코드 사이에서, 구체 타입을 숨길때 유용하다. 프로토콜을 리턴하는것과의 차이점은 Opaque 타입은 항상 하나의 구체타입을 가르키기에 type의 identity를 간직한다. 물론 caller에게는 프로토콜로만 보인다. 구체 타입은 변수, 메서드의 구현이 결정한다. 이는 caller가 타입을 결정하는 제너릭과 반대이다. 따라서 프로토콜을 리턴하는 상황에서 Self, associatedType 제약이 걸려있는 경우에도, Opaque 타입은 type identity가 간직되기에 프로토콜을 리턴 할 수 있다. (프로토콜을 리턴하는 경우에는 type-erasure wrapper클래스를 구현안해도될수도) Op..
Use Case를 작성하면서 enum과 protocol중 어떤걸 사용할지 고민되는 경우가 많았다. 결론부터 말하면 프로토콜을 지향해야하는데 왜 enum보단 프로토콜을 지향해야하는지 알아보자 UseCase로서 Enum을 사용하는 경우가 많다. Enum은 하나의 namespace로서 작동하고, case를 작성하기 쉽기 때문이다. (namespace: 여러타입, symbol을 하나의 이름으로 묶어준다) 하지만 usecase로서 Enum은 여러가지 문제점이 있다. api 정의를 위해 Enum이 사용된 경우를 생각해보자 enum API { case apiA case apiB case apiC } API는 HTTPMethod, url, parameter들이 정의 되어야 한다. extension API { var h..
요약 프로토콜을 제너릭하게 쓰고 싶으면 associatedtype을 사용하면 된다. associatedtype은 프로토콜이 채택한 순간에 구체 타입으로 교체된다. 하지만 프로토콜을 채택하지 않고 그냥 함수의 인자, 리턴타입, 변수의 타입, 콜렉션의 타입으로 쓰는 경우 컴파일타임에 associatedtype의 구체 타입이 결정이 안되어 컴파일 에러가 난다. 이런경우에는 type-erasure wrapper-class를 만들어서 해결할수 있다. 애플 디벨로퍼 문서를 읽다가 Type-Erasing Wrappers를 발견했다. 무엇인지 알아보기 위해 공부해보았다. Protocols & Associated Types type-erasure에 앞서 protocol과 associated type에 대해 알아야한다. ..