# delegate

[TIL] Unity - delegate 사용! - day 49
🐧 들어가기 앞서 개인 과제를 시작했다. 플레이어 정보까지는 정말 수월했는데, 역시나 인벤토리 및 상점에서 막혀버렸다. 인벤토리를 구현하고 싶은데, 생각보다 어렵다. 쉽게 생각하면 쉽겠지만 처음 써보는 기능들을 다 추가하려니 많이 돌아가고 있는 듯 하다,,, 🐧 오늘 배운 것 델리게이트 사용! 🐧 기억할 것 & 진행 개인 과제에서 델리게이트를 사용했다. 플레이어 데이터 정보를 저장했고, 인벤토리 및 아이템 구현은 아직 진행중이다. 🐧 게임에 구현한다면? 먼저 델리게이트를 Action으로 선언했다. ManagementUI.cs 그리고 실제로 버튼을 눌렀을 때, 처리되는 함수를 제작했다. ManagermentUI > 즉 버튼을 누르면, ManagementUIHandler.cs의 메서드가 먼저 실행되고, ManagementUI.cs에서 행동을 처리한다. 🐧 내일 할 일 인벤

[TIL] Unity - Action - day 45
🐧 들어가기 앞서 오늘은 Unity Eduacation을 여러 개 듣고, 이전에 만들던 TopDownShooting 게임 강의를 새로 듣게 됐다. 또한 Event, Action에 대해 배울 수 있었다! 🐧 오늘 배운 것 Observer Event Action Scriptable Object Obeject Pool 🐧 기억할 것 & 진행 Observer 옵저버 -> 관측자 무슨일이 벌어지고 있는지 지속적으로 체크하는 역할. 즉, 하나의 감시자를 통해 행동을 감시해서 처리하는 것을 옵저버 패턴이라고 한다. 옵저버에 미리 연락을 취함 -> 구독 구독을 한 함수에게만 행동을 알려준다. Event 델리게이트의 한 종류다. 옵저버 패턴과 유사하게 활용할 수 있다. 기본 구조 event 구조 event는 구독 기반의 로직에 주로 이용된다. 간단하게, 이벤트를 등

[TIL] Unity - Delegate - day 44
🐧 들어가기 앞서 오늘은 팀 과제를 발표했다. 생각보다 기능이 잘 구현됐다. 굉장히 기쁨! 아래에서 플레이를 확인하세요~ https://www.youtube.com/watch?v=ktlQCnRH0FA&t=31s 🐧 오늘 배운 것 Delegate 🐧 기억할 것 & 진행 👏 Delegate 우선 델리게이트에 대해 알기 전 변수에 대해 생각해보자. 변수 x는 어떤 값이 들어 있던지 그에 맞춰서 동작한다. 같은 로직이 있더라도, 변수에 의해 매번 다른 값을 가져온다. 개요 그렇다면 델리게이트에 대해 알아보자. 만약 게임을 시작해서 데이터를 불러오고, 플레이어와 몬스터를 불러오는 기능이 있다고 가정하면 그렇다면 던전에 플레이어가 있다면, 어디에 생성할까? SpawnPlayer_ARoom() SpawnPlayer_BRoom() SpawnPlayer_RandomPlace() 정답은

[PL] Ch09. Subprograms
9.2 Fundamentals of Subprograms 9.4 Local Referencing Environments 9.5 Parameter-Passing Methods 9.6 Parameters That Are Subprograms 
delegate으로 데이터 전달
예시 실행순서 popupDelegate를 정의해줄 파일을 하나 생성해준다 → 프로토콜이라는 리모컨을 만든 것 이 delegate를 통해서 리모컨 역할을 한다 프로토콜은 여러 함수를 가질 수 있다 → 즉, 리모콘이 여러 번호를 가지고 있듯이 프로토콜도 여러 함수를 가지고 있는 것이다 → 그리고 이 프로토콜을 준수하는 클래스는 프로토콜의 함수들을 가지고 있어야 한다 프로토콜을
Swift | Delegate (Tableview)
* Delegate * > 대리자, 위임자라는 의미로 A 인스턴스가 하나의 일에만 충실하고 싶을 때, 그 밖의 일들을 B 인스턴스가 대신해서 처리해준다는 것이다. 구체적으로는 한 객체가 다른 객체의 동작을 컨트롤하거나 사용자 정의할 수 있도록 해주는 디자인 패턴으로, 특정 이벤트나 동작을 처리하기 위해 구현할 수 있는 메서드의 집합을 정의하는 프로토콜이다. 예시 코드 아래 코드에서 A인스턴스는 TodoListPage의 class이며, B인스턴스는 해당 class의 extension이다. A인스턴스 - UIViewController를 구성하고, TableVeiw에 대한 동작은 B인스턴스(extension)에 할당하고 있습니다. B인스턴스 - extension에서는 이 작업을 위임 받음으로 TableView에 대한 동작을 제어하고 데이터를 표기하고 있습니다. Tab

JPA - Proxy 와 delegate
JPA 스터디를 진행하며 Proxy에 대한 강의를 보며 내용을 정리하고 있다보니 옛날 생각이 많이 났다. 이런 얘기를 하면 또또 틀딱거릴거 같은데 눈물없이 들을 수 없는 얘기일 것이다.아마도 이부분은 중요하지 않으니 Proxy에 대해서 먼저 설명해보자. Proxy > 하이버네이트가 내부적으로 실제 클래스를 상속 받아 만드는 가짜 클래스 변수나 메서드 이름 등이 똑같지만 값은 가지고 있지 않은 껍데기만 있는 객체 실제 클래스가 생성되었을 때 매핑되기 위해 참조값을 가지고 있다. 사용하는 입장에서는 똑같이 생겨서 이 객체가 프록시인지 아닌지 알 수 없음 -> 진짜 객체랑 프록시랑 구분안해서 문제 생기는거 아닐까? 이론상으로는 문제가 없다고 함 -> 이 부분을 나중에 얘기해보자. 프록시 동작 원리 getReference() 프록시를 사용하려면 기존에 객체를 find 메서드로 찾았다면 getReference 메서드로 찾으면 된다. > em.fi

[C#] Event (이벤트)
💡 delegate의 단점 delegate 객체에 접근할 수 있다면 호출하는 부분도 누구나 호출할 수 있게 된다. OnClicked라는 델리게이트는 ButtonPressed 함수가 호출될때 사용하기 위해 clickedFunction을 만들었는데 clicked();처럼 객체를 접근해 누구나 등록된 함수를 호출 할 수 있다는 문제가 생긴다. >clickedFunction이 중요하고 신중하게 호출되어야 하는 부분이였다면 문제가 된다. 💡 Event 이벤트 >클래스 안에서 일어난 일을 미리 구독해둔 곳에 알린다. 📌 델리게이트와의 차이점 선언된 클래스 내에서만 호출할 수 있고 외부에서는 함수의 등록만 가능하다. 📌 선언 방법 [접근 한정자] event [이벤트 핸들러] [이벤트 이름] ex) public event OnInputKey InputKey; 📝 I

[C#] Delegate (델리게이트)
📖 델리게이트 (대리자) 💡 delegate란? 메서드 자체를 인자로 넘겨주는 ‘형식’이다. 즉 델리게이트를 통해 메서드를 매개 변수로 전달할 수 있다. >함수가 아니라 '형식'이라는 것에 유의하자. 📌 delegate를 사용하는 이유 우리가 게임을 하는데 버튼을 누르면 플레이어가 공격을 한다고 생각해보자. 우리가 버튼을 눌렀을 때 일어날 일들을 ButtonPressed 내부에 순차적으로 코딩한다면 UI에 관련된 로직과 게임 로직 사이에 간섭 및 복잡성이 발생하는 문제가 일어날 수 있다. 그러므로 최대한 분리를 시켜서 관리해야 장기적인 차원에서 유리하다. 애당초 우리가 수정할 수 없는 메서드를 사용할 경우가 있다. ButtonPressed같이 유니티에 버튼을 클릭시 사용하는 이벤트 메서드가 있는데 이것은 유니티에서 제공되는 메서드이기 때
Lamda식 과 대리자 추가내용
Lamda식 우리가 코드를 만들다 보면 일일이 확인하는 함수를 만든다거나 찾는 함수를 만들 때가 있는데 이러한 함수들은 찾는것에 종류등에 따라 여러개 만들어야할 수 있는 상황이 생긴다. 그래서 종류에따라 함수들을 만들면 너무 비효율적인데 이러한 상황에서 사용할 수 있는 문법이 Lamda식이다. 간단히 Lamda식을 설명해보자면 일회용 함수를 만드는데 사용하는 문법 ==> 함수를 일일이 만들지않고 빠르게 만드는 방법 코드로 예를 들자면, 1.Item 클래스 존재 1-1. 종류:Weapon,Armor,Amulet,Ring 1-2. 희귀도: Normal,Uncommon,Rare 2.메인함수 2-1.Item의 리스트 2-2.Item의 delegate 2-3.FindItem 함수 2-4.메인함수 익명함수,람다식 또한,일회용 함수도 재사용이 가능하다. 위에 방법처럼 대리자를 이용하여 사용할 인자를 넘겨줄 함수의
DELEGATE
Delegate (델리게이트)로 C++ 오브젝트 상의 멤버 함수 호출을 일반적이고 유형적으로 안전한 방식으로 할 수 있습니다. 델리게이트를 사용하여 임의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있습니다. 호출하는 곳에서 오브젝트의 유형을 몰라도 말이지요. -> https://docs.unrealengine.com/5.1/ko/delegates-and-lamba-functions-in-unreal-engine/ > DELEGATE와 DYNAMIC_DELEGATE의 차이 DELEGATE와 DYNAMIC_DELEGATE의 차이는 다음과 같습니다. > DELEGATE: 컴파일 타임에 미리 정의된 대리자입니다. 대리자에 연결된 함수나 멤버 함수 포인터는 런타임에 변경될 수 없습니다. DYNAMIC_DELEGATE: 런타임에 대리자에 함수나 멤버 함수 포인터를 추가하거나 삭제할 수 있습니다. 언리얼 엔진에서 DE
Kotlin Delegate - 3
5. 대리자로서 Map 제공하기 문제 : 여러 값이 들어있는 Map을 제공해 객체를 초기화 하고 싶다 해법 > 코틀린의 Map에는 대리자가 되는데 필요한 getValue, setValue함수 구현이 있다 객체 초기화에 필요한 값이 맵 안에 있다면, 해당 클래스 속성을 자동으로 맵에 위임할 수 있다. 예를들면 아래와같은 Project클래스가 있다고 하자. 객체의 변수이름과 같은 키가 매핑이 되어 위임된다.(거의 Decodable수준이다). 이 코드가 동작하는 이유는 MutableMap에 ReadWriteProperty 대리자가 되는 데 필요한 올바른 시그니처의 setValue, getValue확장함수가 있기 때문이다. 이게 필요한 이유를 예를 들어보면, 필요한 속성이 JSON 문자열에 있고, 이를 Gson을 이용해 파싱하여 그결과로 얻은 맵을 바로 Project로 생성할 수 있기 때문이다. 즉
Kotlin Delegate - 2
3.값이 null이 될 수 없게 만들기 문제 : 처음 접근이 일어나기 전에 값이 초기화되지 않았다면 예외를 던지고 싶다. 해답 > notNull함수를 이용해 값이 설정되지 않았다면 예외를 던지는 대리자를 제공한다 다음 코드는 구체적인 초기화 방법을 명시하지 않고 접근전에 초기화가 필요하게 만드는 코드이다. 위에 선언된 shouldNotBeNull은 속성에 값이 제공되기 전에 접근을 시도하면 코틀린이 IllegalStateException을 던지게 된다. Delegates는 object를 통한 싱글톤 클래스로 구현이되어있으며, ReadWriteProperty인터페이스를 구현하는 NotNullVar 클래스 인스턴스를 리턴한다. NotNullVar의 getValue에서 값이 null일경우, 예외를 던지도록 구현되어있다. 4. observable과 vetoable 대리자 사용하기 문제 :
Kotlin Delegate - 1
1. 대리자를 통해 합성 구현하기 문제 : 다른 클래스의 인스턴스가 포함된 클래스를 만들고, 그 클래스에 연산을 위임하고 싶다 해법 > 연산을 위임할 메소드가 포함된 인터페이스를 만들고, 클래스에서 해당 인터페이스를 구현한 다음, by카워드를 사용해 바깥쪽에 래퍼 클래스를 만든다 최신 객체지향 디자인은 기능 추가시 상속보다는 합성을 선호한다.(Swift의 Delegate패턴등). 코틀린에서 by키워드는 포함된 객체에 있는 모든 public 함수를 이 객페를 담고있는 컨테이너를 통해 노출할 수 있다. 폰 클래스와 카메라 클래스는 각각의 인터페이스를 구현하고 있다. 이때 스마트폰 클래스를 상속이 아니라 by를 통한 각 인스턴스에 위임할 수 있도록 구현할 수 있다. 포함된 객체 (phone, camera인스턴스)는 SmartPhone을 통해 노출된 것이 아니라, 오직 포함된 객체의 선언된

[iOS] 간단한 알람 앱 만들기
간단한 알람 앱이지만, 만들면서 어려웠던 부분이 있어 추후에 다시 보고자 기록합니다! 기능 설명: 홈 화면에서 + 버튼 누르면 알람 추가 뷰로 이동. 알람 추가 뷰에서 원하는 시간을 고르고 저장을 누르면 홈 화면으로 데이터 전달. 전달받은 데이터를 홈 화면에서 테이블뷰로 표시. 현재 시각과 저장한 알람 시간이 동일하면 Alert 창 띄우기. 어려웠던 부분: Delegate을 이용한 화면 간 데이터 전달, 그리고 tableView.reload.. 저는 이 기능을 구현하면서 Del
C# - delegate & event) 복습을 위해 작성하는 글 2023-04-20
📒 갈무리 - delegate 📌 delegate란? - 메소드의 참조를 포함하는 영역 - 메소드 참조를 위해서는 선언한 delegate와 참조할 메소드의 반환형, 매개 변수의 개수, 타입이 같아야 한다. - 클래스간 통신에 자주 활용한다. - 함수의 파라미터로 사용하면 결합도를 낮출 수 있어, 자주 사용한다. 📌 delegate 선언 📌 delegate 사용 📌 delegate chain   📌 event란? - 하는 일은 delegate와 유사하다. delegate와 차이점 - 할당 연산자(=) 사용 불가 - 클래스 외부 호출 불가 - 클래스 멤버 필드에서 사용 - delegate를 event 변수로 사용한다. 📌 event 사용   💡 TIP 클래스 내에서 처리할 때는 event를 활용 콜백을 처리할 때는 메소드의 파
javascript event
DOM Level 3 Events : https://www.w3.org/TR/DOM-Level-3-Events/#event-flow JavaScript Event 순서 : https://www.quirksmode.org/js/events_order.html#link4 addEventListener https://developer.mozilla.org/ko/docs/Web/API/EventTarget/addEventListener options 이벤트 리스너의 특징을 지정할 수 있는 객체 capture (기본값 false) 이벤트 캡쳐링 적용 여부 true : DOM 트리 하위에 위치한 자손 EventTarget으로 이벤트가 전달되기 전에, 이 이벤트 리스너가 먼저 발동해야 함 once (기본값 false) 이벤트 한번만 호출하고 해제되는 옵션 true : 이벤트 리스너가 한 번만 동작해야 함 : 이벤트 리스너

[C#] Lambda, delegate, 그리고 anonymous functions
 위 코드의 실행 결과를 예측할 수 있겠는가? 얼핏 보면 Invoke 가 네 번 호출될 것 같지만 실제론 그렇지 않다:  어떻게 이런 일이 벌어질 수 있는 것일까? 이러한 출력 결과가 나타난 이유를 자세히 파헤쳐보려 한다. 1. delegate 는 reference type? value type?  Invoke 가 한 번만 출력된 (isLambda 가 false 인) 상황에 대해 먼저 살펴보려 한다. 실행 결과를 이해하기 위해선 앞서 소개한 Action 자체를 Delegate 로 변환할 수 있어야 한다: (참조: https://sharplab.io/) (.NET Framework (x64))  
[Flutter] Lifecycle(앱 상태) 이벤트 5편
Lifecycle(앱 상태) 이벤트 5편 Lifecycle(앱 상태) 이벤트 1편 Lifecycle(앱 상태) 이벤트 2편 Lifecycle(앱 상태) 이벤트 3편 Lifecycle(앱 상태) 이벤트 4편 JSONPlaceholder provider | Flutter Package [share
[Flutter] Lifecycle(앱 상태) 이벤트 4편
Lifecycle(앱 상태) 이벤트 4편 Lifecycle(앱 상태) 이벤트 1편 Lifecycle(앱 상태) 이벤트 2편 Lifecycle(앱 상태) 이벤트 3편 Lifecycle(앱 상태) 이벤트 5편 JSONPlaceholder provider | Flutter Package [shared_preferen