[TIL] Swift closure, protocol

남보경·2023년 7월 24일
0

TIL

목록 보기
4/10
post-thumbnail

Closure 이해하기

클로저는 이름 없는 함수, 코드 블록이다.
상수나 변수의 참조를 캡쳐(capture)해서 저장할 수 있다는 특징이 있어서 기능을 저장하는데 사용한다.

이 말을 들었을 때 가장 먼저 든 생각은 '기능은 method로도 구현하고 충분히 저장할 수 있는데 왜 굳이 closure라는게 있고 이것을 사용할까?'였다.

  • closure는 기능을 구현해 두고 그것을 선언하면서 사용하고 이름 없이 중괄호 안에 코드 블록 형식으로 작성하는 특징이 있다.
  • 상수나 변수의 참조를 캡쳐하면 이 캡쳐와 관련된 모든 메모리는 swift가 알아서 처리한다.
  • 경량화 된 문법으로 표현 할 수 있으며 관련된 문맥(context)으로부터 값을 캡쳐할 수 있다.
  • parameter type과 return type의 추론 단일 표현 클로저에서 암시적 반환을 통해 코드가 깔끔해진다.
    +) 그리고 놀라웠던 것은 애초에 method에서 사용하는 {} -> 이 안에 들어가는 것이 사실은 클로저였던 것...
  • 비동기 처리가 필요할 때 사용할 수 있는 코드 블럭이다.

비동기 처리라고 하니 동기의 반댓말인 것 같긴한데 잘 와닿지 않아서 찾아봤다!!

  • 동기(sync): 다른 쓰레드로 작업을 보내고 그 작업이 끝날 때 까지 기다림. 그 작업이 끝나야만 다른 작업을 시작할 수 있다.
  • 비동기(Async): 다른 쓰레드로 작업을 보내고 그 작업이 끝나기를 기다릴 필요가 없이 다른 작업을 시작할 수 있다. 설계는 복잡할지라도 자원을 효율적으로 사용할 수 있음

Plotocol 이해하기

특정 역할을 하기 위해서 method, property 등 기타 요구사항 등을 정의한 청사진이다.
프로토콜을 따르는 것은 채택했다고 표현하며 모든 요구사항을 충족할 때 준수했다고 표현한다.
프로토콜은 조건만 정의하고 제시할 뿐 스스로 기능을 구현하지는 않는다.

  • 이름, type, gettable, settable을 명시한다.
  • property를 선언할 시에는 항상 var를 이용해서 선언해야 한다.
  • method를 정의 할 때 이름과 return값을 지정하고 구현 코드는 적지 않는다.

Delegation == 위임
대리자, 위임자의 의미를 가지고 있으며 특정한 기능을 위임하는데 사용된다
프로토콜은 대리자 -> 수신자로 내용이 전달될 때 지켜져야 하는 규칙을 말한다면, 대리자는 수신자를 대신해서 특정한 기능을 수행하며 수신자는 그 기능이 수행된 후의 내용을 전달받을 대상이다!

profile
꿈꾸자 그리고 그것을 이뤄내자

2개의 댓글

comment-user-thumbnail
2023년 7월 24일

정리가 잘 된 글이네요. 도움이 됐습니다.

1개의 답글