일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Node
- 안드로이드
- 팝업메뉴 꾸미기
- Android
- bottomNav
- 옵션메뉴꾸미기
- nodejs
- Menu
- custom
- react
- 자바스크립트
- framework
- Dialog
- 메뉴클릭
- ContextAPI
- Redux
- Hooks
- redux/toolkit
- 코틀린
- 리액트
- itemBackground
- 팝업메뉴
- readAsDataURL
- JavaScript
- state_checked
- hoos
- JS
- javaSrcript
- 커스텀옵션메뉴
- toolkit
- Today
- Total
대기업을 향한 디벨롭 블로그
옵저버패턴 , 객체지향의 다형성 본문
옵저버패턴이란 디자인패턴의 '행위 패턴'의 속하는패턴이다. 정보처리를 공부했을때 잠깐 알던것 인데 , 코드로 알아보자.
일단 옵저버패턴은 스타크래프트의 옵저버 처럼 감시하고있다가 이벤트가 발생하면 즉각처리할 수 있도록 만들 수 있는 패턴이다. 다음예제해서는 반복문 1에서 100까지 도는데 5의 배수면은 이벤트가 발생한다. 예제를 봐보자.
첫번재 interface EventListener부터 보면 인터페이스이므로 fun Event추상메소드를 가지고 있다. 이 메소드는 이벤트발생시 사용할 메소드이다.
두번재 counter클래스이다. 생성자인 파라미터로 자료형이 EventListener인 변수를 받으며 fun count()메소드는 이벤트를 발생시키는 코드를 가지고있다. 1부터 100까지 반복하며 5의배수가되면 이벤트발동이다. 이벤트가 발동되면 파라미터로 왔던 Listener의 on.Event를 실행시키며 인자로 i값(5의배수)을 넘겨준다.
세번째 EventPrinter클래스이다. EventListener인터페이스를 상속받고있으며 추상함수를 override하여 구성한다. 코드는 onEvent에서 인자로온 count(int)를 출력한다. -> (위의 counter클래스의 fun count()메소드에서 이벤트 발생시 호출된다.) 그리고 fun start()는 counte라는 변수에 counter(this)인스턴스해준다. 그리고 count()메소드를 호출한다.
메인함수로 돌아와 실행을 해보면
1. EvenPrinter().start()를 호출한다 counter(this)를 인스턴스하여 EvenPrinter클래스를 counter클래스의 생성자 인수로 넘겨준다. 그리고 counte.count()실행
2. 반복문을 돌며 5의배수가 될 시 Listenr.onEvent(i)를 실행 Listenr는 EventPrinter가 EventListener를 상속받았기 때문에 var Listenter : EventListener로 받아서 this로 넘어온 EventPrinter를 참조하여 사용한다. EventPrinter안에 override된 함수(onEvent)를 호출한다.
3. 5의 배수가 될때 마다 이벤트발생
이런식으로 이벤트를 넘겨주는 행위를 콜백이라고 한다. 코틀린에서는 listener라고 부른다.
EventPrinter코드를 수정하였다. EventListener를 상속받지않고 익명객체로 넘겨주는거다. counter()클래스의 인자로 object 를 써서 넘겨준다. 그리고 EventListener의 추상함수를 구성하여 넘긴다. 이렇게된다면 맨위에 있는 상속받아서 사용한 코드와 같은 용도이다.
내가아는 내용을 이렇게 글로 풀어내려는게 어려운거같다. 정말 솔직히 다른사람이 보면 이해가 안될거같긴하다.... ㅋㅋ나만 알면되지 ㅋㅋ
'나는안드로이드개발자' 카테고리의 다른 글
Activity 전환 , 뒤로가기버튼만들기 Activity finish (0) | 2022.06.08 |
---|---|
안드로이드 애니메이션 LottieAnimation (0) | 2022.06.08 |
companion Object (동반자 오브젝트) (0) | 2022.05.24 |
Scope 함수 ( apply , run , with , also , let ) (0) | 2022.05.19 |
람다란.. (0) | 2022.05.18 |