210412 Mon

Sunny·2021년 4월 28일
0

Today I Learned

목록 보기
32/88

이벤트 기반 프로그래밍 (Event-Driven Programming)

이벤트를 기반으로 프로그래밍이 동작할 것이다.
이 앱은 이벤트를 기반으로 만들어진 앱이다
= 어떤 이벤트가 발생했을 때 그 이벤트에 대해 반응할거다
→ 반응은 뭐냐? 행위, 행동

Q. 이벤트의 종류에는 뭐가 있을까?
단편적인 이벤트 by 사용자
터치
텍스트 입력
드래그
흔들기

배터리의 상태가 변했다
전화가 왔다
문자가 왔다
채광량이 바꼈다 (어두워졌다)

앱이 수신할 수 있는 이벤트는 아주 다양함!

iOS 앱은 어떤 특정한 이벤트에 대해서 이 앱이 반응을 할 것이다 생각하고 설계
(이벤트가 없으면 반응을 안함)

반응 = 작업을 수행한다
스위프트에서 작업의 단위? 함수/ 메서드로 생각해볼 수 있음

ViewDidLoad
→ 뷰가 메모리에 로드됐다는 <이벤트>가 발생했을 때 실행될 코드 블럭 (코드의 묶음)

함수 = 일을 한다는 단위 (일을 처리하는 단위)
함수는 입력과 출력으로 이뤄짐

클로저 (Closure)

클로저란? 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것
클로저에서 이름을 붙이면 함수로 쓰게 되는 거임

함수란? 이름을 가진 클로저!
함수의 기본 뿌리는 클로저임

일을 하는 하나의 블록 단위가 클로저가 되는거임
코드 블록 (작업의 단위)를 만들어 놓긴 했는데
그걸 계속 쓰고 싶어서
이름을 붙인거임

사실 클로저는 이름이 없어도 됨
코드의 블락이 어딘가 (변수나 함수)에 담겨있을 수 있다

블록 자체가 클로저 (값으로 취급돼서) 이걸 상수 or 변수 drink에 담아둘 수 있음

근데 특정 클로저를 반복해서 자주 쓰고 싶으면
거기에 이름을 지어줘서 함수, 메서드로 묶어준 거임 (= 기능의 단위)

함수라는 것에 이름을 없애면 그냥 코드의 블럭이 됨 (→ 클로저)
클로저가 일급 시민이란 것은
→ 어딘가에 값으로 저장될 수 있고
매개변수로 전달할 수 있다라는 의미

→ 코드의 블럭 자체를 매개변수로 넘길 수 있다! ⭐️

동기는 지금 이 순간 실행하는 코드
Print → 지금 바로 실행할 코드
= 동기 메서드, 동기 함수

vs.
Completion handler → (언제 실행할지는 모르겠지만) 미래에 언젠가 실행할건데 그때 이거 해줘
= 비동기 코드

같은 메서드를 비동기로 풀어버리면
각각 언제 실행될지 확신 못함

애니메이션은 대부분 비동기임
Why? 이게 동기면 애니메이션 보여주는 동안 사용자는 다른거 아무것도 못함.

Instance Method dismiss(animated:completion:)

The completion handler is called after the viewDidDisappear(_:) method is called on the presented view controller.

어느 시점에 언제 실행이 될거다
= 이게 동시에 실행되지 않을거다
= 비동기다
라는 의미!

프로토콜 (Protocols)

미리 우리 이렇게 하기로 했지? 협의된 기능
= 규약, 규칙

Q. 프로토콜을 주로 언제 사용하냐?
우리의 목적을 달성하기 위해
유연하게 타입들을 표현할 때
프로토콜 사용

프로토콜에서는 구체적인 타입을 명시해두지 않고
타입은 프로토콜에서의 약속을 따르기만 하면 됨

위임 (delegation)

Q. 딜리게이션 디자인 패턴을 구현하기 위해 필요한 스위프트 언어의 기능은? ⭐️⭐️⭐️

A. 프로토콜

위임(Delegation)은 클래스나 구조체가 자신의 책임이나 임무를 다른 타입의 인스턴스에게 위임하는 디자인 패턴. 책무를 위임하기 위해 정의한 프로토콜을 준수하는 타입은 자신에게 위임될 일정 책무를 할 수 있다는 것을 보장. 그렇기 때문에 다른 인스턴스에게 자신이 해야 할 일을 믿고 맡길 수 있음.

위임 패턴(Delegation Pattern)은 애플의 프레임워크에서 사용하는 주요한 패턴 중 하나. 애플의 프레임워크에 사용하는 위임 패턴을 위해 다양한 프로토콜이 '0000Delegate'라는 식의 이름으로 정의되어 있음. 예를 들어 UITableView 타입의 인스턴스가 해야 하는 일을 위임받아 처리하는 인스턴스는 UITableViewDelegate 프로토콜을 준수하면 됨. 위임받은 인스턴스, 즉 UITableViewDelegate 프로토콜을 준수하는 인스턴스는 UITableView의 인스턴스가 해야 하는 일을 대신 처리해줄 수 있음

Delegation is a design pattern that enables a class or structure to hand off (or delegate) some of its responsibilities to an instance of another type. This design pattern is implemented by defining a protocol that encapsulates the delegated responsibilities, such that a conforming type (known as a delegate) is guaranteed to provide the functionality that has been delegated. Delegation can be used to respond to a particular action, or to retrieve data from an external source without needing to know the underlying type of that source.

출처:

야곰 스위프트 프로그래밍 3판
Swift 공식 문서 Protocols
[디자인패턴] Delegation 디자인 패턴 by yagom 유튜브

일급 객체 (First-class Citizen)

다음 조건을 모두 충족해야 일급 객체가 될 수 있음

  • 전달인자(Argument)로 전달할 수 있음
  • 동적 프로퍼티 할당이 가능
  • 변수나 데이터 구조 안에 담을 수 있음
  • 반환 값으로 사용할 수 있음
  • 할당할 때 사용된 이름과 관계없이 고유한 객체로 구별할 수 있음

위키 백과 일급 객체

profile
iOS Developer

0개의 댓글