Community

iOS 프로그래밍🍎: exetension은 가독성에 좋을까?

iOS 개발을 하며 private extension을 사용하여 private method를 그룹화 아이디어에 대해 어떻게 생각하십니까? 에를 들어, ``` final public LocalFeedLoader { public func save() { cache() } public func load () { isValidCacheTimestamp() } } private exetension LocalFeedLoader { func cache() { ... } func isValidCacheTimestamp() { ... } } ``` 이러한 규칙을 세울 수 있고 분명 가독성 측면에서 도움을 줄 수 있지만, 마냥 도움을 준다고 할 수 없는 아리송한 부분이 있어, 과연 이 아이디어를 어떻게 받아 들어야 하는지에 대해 저의 의견을 나눠보고자 합니다. 💡 결론부터 말씀드리면 저는 개인적으로 extension으로 분리된 코드를 오히려 더 따라가기가 어렵기 때문에(extension 기능이 많을수록 더…) 이 방법이 좋은 아이디어라고 생각하지는 않습니다. 하지만 제가 그렇다고 해서 이 아이디어가 좋지 못하다고 하는 것은 말이 안 되니 코드 정리에 도움이 되고 컴포넌트를 더 쉽게 읽고 작업할 수 있다면 충분히 사용해도 좋을 것 같습니다. 하지만 좀 더 다른 측면에서 과연 이 아이디어가 좋은 아이디어인지 검증해보도록 하겠습니다. 🤔 약간 억지스러운 면이 있지만 두 개의 Protocol 채택에 관련한 예를 들어보겠습니다. URLSessionHTTPClient에서 HTTPClient Protocol과 APIRequest Protocol 두 개를 채택할 때, 어떤 케이스가 더 가독성이 높을까 고민됩니다. ``` 1️⃣ Class URLSesstionHTTPClient: HTTPClient, APIRequest { func get(…) { … } func request(…) { … } } ``` 🆚 ``` 2️⃣ Class URLSesstionHTTPClient { … } //MARK: - HTTPClinet exetension URLSesstionHTTPClient: HTTPClinet { func get(…) { … } } //MARK: - HTTPClinet exetension URLSesstionHTTPClient: APIRequest { func request(…) { … } } ``` LocalFeedLoader 는 하나의 Protocol만 준수하는 클래스이기에 exetension으로 분리하는 것의 이점이 없어 보이지만(개인 취향), 클래스가 둘 이상의 프로토콜을 채택하는 경우 exetension으로 분리하기도 합니다. 하지만 둘 이상의 프로토콜을 채택하려고 하는 경우를 최대한 피해야 합니다. 한 가지 일만 하는 객체를 만들도록 노력해야 하기 때문입니다. 이렇게 하면 개발, 유지 관리, 확장 및 테스트가 쉬운 작은 클래스를 만들 수 있습니다. 이것이 단일 책임 원칙의 핵심입니다. 객체를 exetension으로 세분화할 필요성을 느낄 때, 우리는 그 대신 새로운 객체를 만들어야 한다는 신호로 간주합니다. ✅

알림

알림이 없습니다