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 == 위임
대리자, 위임자의 의미를 가지고 있으며 특정한 기능을 위임하는데 사용된다
프로토콜은 대리자 -> 수신자로 내용이 전달될 때 지켜져야 하는 규칙을 말한다면, 대리자는 수신자를 대신해서 특정한 기능을 수행하며 수신자는 그 기능이 수행된 후의 내용을 전달받을 대상이다!
정리가 잘 된 글이네요. 도움이 됐습니다.