인프런 커뮤니티 질문&답변

rokwon님의 프로필 이미지
rokwon

작성한 질문수

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

Operation의 순서기능 중 질문드립니다!

작성

·

233

1

강의 한 편 한 편 볼때마다 지식이 업그레이드 되는 기분입니다. 좋은 강의 항상 감사드립니다~!
 
다름이 아니라 Operation의 순서기능 중 Operation에서 이전 작업의 결과물을 받기 위해선 프로토콜을 채택 혹은 작업물을 넘기는 Operation을 만들어야 한다고 말씀해주셨는데 그냥 outputImage를 직접 가져오는 것으로 해도되지 않을까요?
아래의 방법입니다!
class TiltShiftOperation: Operation {
    var inputImage: UIImage?
    var outputImage: UIImage?
    
    override func main() {
        if inputImage == .none,    // 인풋이미지가 없으면,
            let dependencyImageProvider = dependencies
                .filter({ $0 is ImageLoadOperation})
                .first as? ImageLoadOperation {   // 프로토콜이 아닌 직접적으로 Operation꺼내기
            inputImage = dependencyImageProvider.outputImage
        }
        
        // 실제 작업
        outputImage = tiltShift(image: inputImage)
    }
}
 
이 방법의 문제는 뭐가 있을까요?
재사용성의 의미에서는 확실히 Protocol을 이용한 타입 캐스팅이 좋지만 그것 말고 프로토콜 채택으로 가져가는 또다른 장점이 있을까요?

답변 1

1

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

안녕하세요! 록원 님.

모듈화의 장점을 위해서 프로토콜을 채택해서, 프로토콜을 통해 전달하도록 만든 것이지요. ^^

해당 프로토콜을, 채택한 모든 타입에서는 이미지 전달이 가능해지니까요!


만약에, 모듈화로 굳이 만들 필요가 없다면.. 작업 자체도 여러개로 나눌 필요 없이

하나로 설계했을 테니까요 :)



어쨌든. 프로토콜로 만든다면 ImageLoadOperation 클래스가 아닌 다른 타입이 존재한다고 하더라도

이미지 전달이 가능해지니..장점이 훨씬 커질 것으로 보입니다...^^


감사합니다. :)

rokwon님의 프로필 이미지
rokwon
질문자

키워드를 잘못 잡고있었네요. 애초에 작업을 나누는 것도 모듈화를 위한 것이었는데!
답변 감사드립니다!

앨런(Allen)님의 프로필 이미지
앨런(Allen)
지식공유자

네네 강의 시청해주셔서.. 고맙습니다. :)

rokwon님의 프로필 이미지
rokwon

작성한 질문수

질문하기