• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

Dependency Protocol 관련

23.05.05 21:11 작성 조회수 228

1

// (2) 이미지 변형하는 오퍼레이션 (동기 함수)
class TiltShiftOperation: Operation {
    var inputImage: UIImage?
    var outputImage: UIImage?
    
    override func main() {
        // 🔸🔸🔸 2) 프로토콜 채택한 앞의 오퍼레이션에서, 인풋값을 얻어내기
        if inputImage == .none,    // 인풋이미지가 없으면,
           let dependencyImageProvider = dependencies
            .filter({ $0 is ImageLoadOperation })
            .first as? ImageLoadOperation {   // (의존하고 있는) 오퍼레이션의 배열에서 오퍼레이션 꺼내기
            inputImage = dependencyImageProvider.outputImage
        }
        
        // 실제 작업
        outputImage = tiltShift(image: inputImage)
    }
}

안녕하세요. 좋은 강의 잘 듣고있습니다. 감사합니다. 강의 중 궁금증이 생겼는데, 위 코드 처럼 protocol을 사용하지 않고 직접 class을 확인하는 방법은 어떤문제 점을 야기하길래 protocol을 사용하는 것일까요?
아니면 위와 같은 방법은 크게 문제가 되지 않는다면 위와 같은 방법을 활용해도 될까요??

답변 1

답변을 작성해보세요.

0

안녕하세요 성훈 님.

델리게이트 패턴은 왜 프로토콜을 사용할까요?
weak var delegate: SomeViewController? 와 같은 방식이 아니라
weak var delegate: UITableViewDelegate? 로 내부가 구현되어 있을까요?

델리게이트 패턴에서도 마찬가지로
프로토콜 사용의 핵심은 확장성과 모듈화 입니다.


당연히 성훈님이 구현하신 것처럼 해도 코드가 동작은 하지만, 해당 클래스를 "지정"해버리면..
사실 오퍼레이션을 4개로 쪼개서 순서를 지정할 필요도 없습니다. (그냥 한개의 클래스 작업으로 만들면 되겠죠.)

오퍼레이션을 4개로 쪼개고 그것을 순서로 지정할 수도 있고,
이미지를 프로토콜을 사용해서 전달하면..
각 작업별로 모듈화가 가능해지고 확장성이 생깁니다.

단순히 4개의 클래스가 아니라.. 다른 여러가지 작업이 또 추가적으로 있다면
코드를 유지보수 측면에서 다루는 것이 편해질 것입니다. ^^

감사합니다. :)