Dart 에서 콜백이란
개념
- 말 그대로 call(부르고,) back(어떤 처리된 값을 가지고 함수로 다시 돌아오는 개념)
- 작업단위별로 class가 나누어진 상태에서 부모위젯이 자식 위젯콜하여 처리한 데이터를 상위 위젯으로 데이터를 다시 넘겨줘야할때 사용.
- 자식위젯 클래스를 부를때 인자값으로 필요한 데이터와 Function타입을 보내준다.
콜백을 사용해야 하는 이유.
- 하위 위젯의 인자값을 부모 위젯에서 사용해야 할때(Lifting State Up) : 부모 위젯이 statefull 위젯인 상태에서 상태값이 바뀌는지 확인하여 실시간 데이터를 적용해야 할때 사용하는데, 자식위젯이 stateless위젯인 경우 setState를 할수 없어, 함수자체를 보내 하위젯에서 필요한 값을 받아 오고 setState를 부모쪽에서 사용하게 한다.
- 유지보수의 편의성 고려 : 그냥 전체 화면을 statefull위젯으로 하나의 클래스로 관리해서 필요한 값을 전역변수로 선언 해서 setState함수로 값을 업데이트 하여 화면에 적용할 수도 있다. 이 방법을 사용하면 콜백을 전혀 생각 할 필요가 없다. 하지만, 서비스가 방대해질 경우 작업단위 별로 쪼개 놓지않고 작업하였다면 유지보수가 겁나게 힘들게 될것이다.
- 재빌드에 대한 비용 절약 : statefull 위젯에서 setState를 한다는 것은 상태값을 바뀔 떄만다 해당 위젯클래스 전체가 재빌드 된다는 것을 알고 있는가?
이는 실제 메모리가 필요하기 떄문에 훨씬 더 복잡하다.
이 비용을 줄이기 위해 고정적인 부분을 stateless 자식위젯으로 분리하여 콜백을 사용하여 상태값을 관리 하면 재빌드 하는데 있어서 비용을 크게 줄일수 있을 것이다.
나의 생각
- 그냥 다 하나에 때려 박아서 해도 되는데 왜? 궂이 콜백을 사용하려 하는 걸까?
잘난척 하기위해 하려는 건가…? 오만가지 생각이 다들어서 너무 답답했다.
하지만 분명 다른 이유가 있을 것이라고 생각하고 그 이유를 찾기위해 콜백을 쓰는 이유에 대해 미친듯이 찾아 해맷다…
하지만 인터넷에서 나오는 대부분의 내용들…
A, B, function(A+B) 같은 이런 사용법만 알려주고 그냥 앞에꺼 데이터를 먼저 받은 다음 함수 콜백으로 사용한다는 개념만…
장난하나… 저걸 보면서 느낀 내 느낌은 그냥
함수 A, B값을 인자로 받는 함수 내에서 그냥 A+B를 인자값으로 넘겨주는 함수를 그냥 호출하지 궂이 왜 콜백이냐고!!!!!
누가 콜백에 대해서 모르냐… 정말 답답했다…
그래서 혼자 계속 생각하고 또 생각하고 해서 겨우 나만의 정의를 내렸다.. 물론 틀릴 수 도 있다.. 답답했다능…
댓글남기기