일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 이벤트버블링
- 코딩테스트
- HTML
- 수강료0원챌린지
- 패캠인강후기
- 실패율
- eventbubbling
- stopPropagation
- Components
- 직장인인강
- 연결리스트생성
- 연결리스트삭제
- 자료구조
- 스위프트
- 오공완
- ios
- 패스트캠퍼스
- 이벤트캡처링
- hig
- 직장인자기계발
- MVMM
- eventcapturing
- 패캠챌린지
- swift
- 프로그래머스
- 연결리스트삽입
- 환급챌린지
- JavaScript
- 사이드프로젝트10개기술스택으로구현하는풀스택서버리스프로젝트withReact
- 패스트캠퍼스후기
- Today
- Total
날쌘 개발자
Delegate 본문
delegate
delegate(델리게이트)는 거의 안보이는곳이 없을정도로 IOS를 공부하다보면 자주 보이는..
그만큼 중요한 개념이다.
직역하면 '대리자' 혹은 '위임자' 라고들 부르고
정의를 검색해보면 '소프트웨어 엔지니어링에서 Delegate 패턴은 객체 지향 디자인 패턴중 하나로써 상속과 비슷하게 재사용을 가능하게 해주는 패턴' 이라고 나오는데,
이놈이 하는일은 대리자 라는 말 그대로 일을 대신해준다고 보면 되겠다.
조금 풀어 설명하자면 - 객체 지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는것이 아닌, 처리 해야 할일 중 일부를 다른 객체에 넘겨 대신 해주는 게 델리게이트 패턴 이라고 한다.
이 델리게이트라는놈을 알기 위해서는 먼저 저번에 공부했던 프로토콜에 대해 잘 알아야한다.
프로토콜은 "특정 역할을 수행하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진", "약속, 규약"
이라고 공부했었는데, 이 프로토콜을 이용해 델리게이트가 구현된다고 한다.
일단 델리게이트를 살펴보기 위해
흔히 접할 수 있는 텍스트필드에 델리게이트를 채택하면서 알아보도록 하겠다.
먼저 준비과정으로 스토리보드로 드래그앤드랍 해서 텍스트필드를 대충 생성해주고,
뷰컨트롤러에 연결해준다.
끝났다면, 첫번째 과정으로 delegate를 채택해주어야 한다.
텍스트필드를 준비하였으니, UITextFieldDelegate 프로토콜을 채택해주었다.
여기서 UITextFieldDelegate 프로토콜은, 이름에서 예상할 수 있듯이
키보드 입력 등의 전반적인 텍스트 필드 편집과 관련된 일을 수행하는 프로토콜 이다.
두번째로, 위임자를 설정해준다.
이런식으로 viewDidLoad함수에 위임자가 누구인지 알려주는 코드를 작성해주면
이제 텍스트필드의 일을 도맡아하는 delegate의 위임자가 설정된것이라고 보면 되겠다.
이제 delegate도 채택해주었고, 위임자도 설정해주었으니 대신 할 만한 일들을 (함수들) 시킬수 있는데,
텍스트필드로 내가 사용해본 delegate들은 이런놈들이다.
위의 함수들은 내가 직접 만들어낸(?) 함수가 아닌, UITextFieldDelegate 안에 정의되어 있는 함수들로,
각자가 텍스트필드의 일을 맡아서 한다.
함수 안에 우리가 원하는 기능을 구현하면, 함수가 해당하는 동작이 이루어졌을 때 기능이 동작한다는 것이다.. 설명이 어렵다..
예를들면 textFieldDidEndEditing 메서드는 텍스트필드에 입력이 끝나면 동작하는 함수로,
우리가 이 메서드 안에 키보드를 내려주는 기능을 구현하게 되면!
델리게이트가 (우리를 대신해서) - 텍스트필드에 입력이 끝나면 키보드를 내려주는 것이다.
'ios > 기본문법' 카테고리의 다른 글
guard 문 (0) | 2022.06.14 |
---|---|
Design Pattern - MVMM (0) | 2022.05.15 |
Property - (1) (0) | 2022.04.17 |
Protocols - (1) (0) | 2022.04.07 |
MVC 에 대해 (0) | 2022.04.01 |