Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

<6주차> Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오. #30

Closed
namsoo5 opened this issue Dec 15, 2020 · 7 comments

Comments

@namsoo5
Copy link
Collaborator

namsoo5 commented Dec 15, 2020

No description provided.

@namsoo5
Copy link
Collaborator Author

namsoo5 commented Dec 17, 2020

Delegate패턴

어떠한 객체가 해야할 일을 대신해서 처리해주는 것

대표적으로 TableViewDelegate가 있다
뷰컨트롤러에 딜리게이트 함수를 정의하고
테이블뷰의 동작이 일어나면 해당 딜리게이트 함수를 호출하고
뷰컨트롤러가 대신 처리해줌

@namsoo5 namsoo5 added the 남수 label Dec 17, 2020
@khyunjiee
Copy link
Member

Delegate Pattern

객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 해야할일 중 일부를 다른 객체에게 넘기는 것(위임하는 것)

예시
UITextField에 어떤 값을 입력하고, 리턴키를 누르면 UILabel의 값이 바뀌도록 구현한다고 할 때,
ViewController에서 UITextFieldDelegate를 채택해서 텍스트 필드의 일부를 뷰 컨트롤러에 위임한다.
그 후에 textFieldShouldReturn(_:)에 텍스트 필드의 text를 라벨의 text로 업데이트해준다.

@iJoom
Copy link
Collaborator

iJoom commented Dec 18, 2020

Delegate 패턴: 객체의 할일을 다른 객체에게 위임하는 것

테이블뷰 - 셀 , 컬렉션뷰 - 셀 의 관계에서 많이 사용하게됩니다.
테이블뷰 셀에 있는 버튼을 눌렀을때 셀이 추가되거나 삭제되게 하는 경우 -> 셀에 프로토콜과 delegate를 선언하여, TableView가 있는 ViewController에 Delegate Protocol을 상속받아서 해당 셀에 맞는 indexPath를 구하여서 셀을 추가 하거나 삭제
(선택된 셀의 이벤트 및 indexPath 셀정보를 TableView를 가진 ViewController에게 위임해줌)

@iJoom iJoom added the 인준 label Dec 18, 2020
@choidam
Copy link
Member

choidam commented Dec 18, 2020

Delegate Pattern

어떤 객체에서 일어나는 이벤트나 데이터에 관한 코드를 다른 객체가 대신 작성하도록 위임하는 것을 의미합니다.

예시
ScrollViewDelegate 을 채택할 경우 스크롤뷰에 대한 권한을 뷰컨에 위임합니다.
스크롤이 시작하거나 끝났을 때 scrollViewWillBeginDragging, scrollViewDidEndDragging 을 호출합니다.

@choidam choidam added the label Dec 18, 2020
@5anniversary
Copy link
Collaborator

Delegate 패턴🛂

delegate 단어의 사전적인 의미처럼 delegate 코드를 상속받아 다른 객체가 대신 작성하도록 위임하는 것을 의미!!

Cocoa Touch 프레임 워크에서 기본적으로 제공하는 UITableViewDelegate, UICollectionViewDelegate이외에도 정의해놓은 델리게이트 패턴을 사용하거나, 다른 ViewController에서 데이터를 전달받거나 메소드를 실행시키기 위해 사용하기도 합니다!

@elesahich
Copy link
Collaborator

elesahich commented Dec 18, 2020

  1. 보통 무슨무슨 객체들의 콜백류들을 묶어서 ~~~Delegate로 묶어놓는 딜리게이트가 있고
  2. 객체간의 이벤트 전달, 데이터 전달을 담당하게 하는 커스텀 딜리게이트 패턴이 있습니다. (2는 1의 슈퍼셋)

팀마다 객체간 데이터 전달을 어떻게 하는가?를 결정해서 사용하곤 하는데,
딜리게이트는 다음과 같은 상황에 사용하기로 했습니다.

  1. A객체와 B객체가 주고받는 콜백함수가 2개 이상일때 (프로토콜로 2개 이상 묶을수 있을때)
  2. 1개더라도 주고받는 파라미터가 2개 이상일때

그런데 우리 앱에서는 없어서 딜리게이트로 콜백을 주고받지 않습니다... 주로 클로저로 처리하고 말아버리는듯 하옵니다

주의할점과 개인적인 생각을 말해보면...

  1. delegate를 weak var로 선언해야 하며. (메모리 캡처링)
  2. A <-> B 관계가 아닌 A <-> B <-> C 객체간 소통인 경우에는 잘 사용하지 않을 것 같습니다

@elesahich elesahich added the 승호 승호 label Dec 18, 2020
@dongminyoon
Copy link
Collaborator

어떤 객체들이 처리해야하는 이벤트를 넘겨서 사용할 때하는데,
보통 재사용성이 좋게하기 위해 protocol로 delegate를 만들고 해당 버튼을 눌렀을 때, 각 화면 별로 다르게 대응하고 싶을 때 사용한다.

  • 주의사항 : Delegate를 선언할 때, weak로 선언해야 순환참조 문제가 해결 가능

예를 들어, TableView에서 각 셀을 클릭했을 때 각 뷰별로 다른 동작을 하고 싶을 때 사용한다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants