ved_Rony
article thumbnail

델리게이트란?

함수 대행자이다. 어떤 함수들을 델리게이트에 추가 해놓는다면, 그함수들을 실행시켜준다.

델리게이트 선언 -> 델리게이트 추가+=들어갈 함수 -> 델리게이트 실행

이런한 델리게이트로 클래스간의 커플링을 방지 할수 있다

 

이벤트 사용하지 않는 경우

A라는 함수를 실행시키면 B 함수를 실행 시킬려고 한다. 그렇다면, A를 가지고 있는 클래스는 B에 대해 알고 있어야한다.

즉, A의 클래스에 public X x;으로 선언후,

x.B(필요한 매개변수)식으로 사용해야한다. 이벤트를 사용하면 이런 경우를 피할수 있다.

 

이벤트를 사용

선언

public delegate void [델리게이트 이름](메소드에 들어갈 매개변수)

public event [델리게이트][이벤트 이름]

메소드 추가

[이벤트이름](publisher) += [추가하려는 메소드](subscriber)

이때 메소드에서는 타입과 매개변수를 일치시켜야한다.

사용

델리게이트(넣고 싶은 매개변수)

이를 예제로 알아보자.

publisher: 여기서 델리게이트 함수를 실행
subscriber: 기능만 publiser에 올려놓는다
it works!

싱글턴으로 바꿔서 사용해보자

잘되는 것을 확인 할수있다

event 키워드 사용이유: 델리게이트 실행함수는 publisher에 있어야한다. 외부에서 사용되는 경우를 막기위해 event를 사용한다고 한다.(event키워드가 있든 없든 상단의 예제는 에러없이 잘돌아간다.)

그리고 선언하거나 할때, 꼭 초기화하도록 하자.-> 메모리낭비를 줄이기 위해

profile

ved_Rony

@Rony_chan

검색 태그