ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • iOS [Swift] - Promises
    iOS Develop 2022. 12. 2. 15:36
    반응형

    Promises란?

    - 비동기 작업을 처리하기 위해 promise 객체로 묶어서 반환할 수 있도록 하는 Framework이다.

     

    전반적으로 우리는 비동기 동작들을 completion handler Block 형태로 가져와서 사용하곤 한다. 

    그런데 completion handler는 하나 이상의 비동기 처리를 하기 위해서 첫 번째 항목의 block안에 두 번째 항목을 중첩해야한다.

    (에러 처리를 잘 하기 위해서라도..)

    끔찍하지만, 우리는 코드를 수정해야할 일들이 반드시 있기 마련이다. 이럴 때 중첩된 completion handler를 효율적으로 수정하는건 은근 성가신 일이다. 

     

    나도 completion handler를 주로 사용하곤 했는데, 사용할 수록 중첩되는 block들이 너무 많아져서 의미 없는 line들이 많아진다고 생각했다. 그러면서 좀 더 간결하고 쉽게 비동기 작업을 처리할 수 있는 방법이 없나 고민하게 되었다.

    그러다 보니 오늘의 Promises를 정리하게 되었당. : )

     

    Promises는 일반적으로 비동기 작업 처리를 하고 상태 값이 결정되면 다음 동작을 진행할 수 있다. 

    이어서 Promises는 비동기 처리할 때에 가독성과 효율성을 높여줄 수 있다.

     

    Promises에는 상태가 총 3가지로 나뉜다.

      - pending : 상태가 결정되지 않은 상태

      - fulfill : 작업이 완료된 상태

      - reject: 작업 도중 오류가 발생한 상태

     

    이 때, promise는 한 번 상태 값이 fulfill되거나 reject되면 변경될 수 없다. 대신 작업 도중에 발생한 에러는 마지막 단계에서 전달 받을 수 있고, recover로 복구할 기회가 있다.

    Promise를 통해 비동기 작업이 시작되면 작업이 끝나기를 기다리는 observer들이 있어서 작업이 끝나면 얘네들한테 value 또는 error를 전달해준다.

    Promise는 then, always 등과 같은 연산자들로 함수들을 연속적으로 chaining할 수 있어서 서로 다른 Thread에서 비동기적으로 반환되는 값들을 엮어서 사용할 수 있다. (비동기 작업 체이닝)

    정리하자면, 서로 의존성이 높은 비동기 작업들을 한데 모아 엮어서 실행할 수 있다는 것이다. 

     

    기존에 사용하던 completion handler는 연달아 함수를 호출하게 되었을 때, 중첩되는 block이 너무 많이 생겨서 코드 길이가 길어지고 가독성이 떨어진다고 생각했었는데 Promises를 공부하고 나니 불필요한 block들이 깔끔하게 정리돼서 너무 좋았다..!!

    Promises가 눈에 익게되고 리팩토링에 고민을 하다보면 지금보다 가독성이 더 좋은 코드를 짤 수 있겠지..?!!!

    그리고 Promises를 공부하고 적용하려 했을 때, 기존 프로젝트에 크게 영향을 주지 않고 적용해볼 수 있는 점도 좋았다. 큰 틀을 건들지 않고 수정할 수 있기 때문!! 

     

    아무튼 최종 한 줄 요약!!

    Promises는 completion handler에서 더 쉽게 비동기 작업들을 Chaining할 수 있도록 만든 형태의 Framework이다!

Designed by Tistory.