작성
·
256
0
안녕하세요 재남님 강의 너무 유익합니다~^_^ 두고두고 봐도 좋은 강의네요 b
콜백에 대한 질문이 있는데요 이 질문을 이 챕터에서 해도되나... 마땅한곳이 생각나지 않아서 이곳에서 질문 올립니다.
프론트엔드개발영역에서 어떤 개발자들은 꼭 사용해야할 곳을 제외하고는 콜백사용을 지양한다는 글을 봤었습니다.
그렇다면 콜백이 async & await으로 대체 가능하기 때문인가요? 문법의 간결함과 동기적으로 데이터를 받아와서 처리해야할때 async await이 아주 유용할것 같습니다.
그리고 꼭 사용할곳이라면 자바스크립트 내장 API에서 제공하는 콜백들 예를들어 Array의 map(callback)사용시, setTimout(callback)사용시 API사용 문법상 콜백을 사용할수 밖에 없는경우는 사용을 하는것이 맞고, 그외 다른 비동기 처리는 콜백으로 구현하게 되면 단점이 흔히 말하는 콜백지옥, 콜백지옥으로 부터 생기는 디버깅의 어려움등 때문에 기피하는건가... 제가 바로 이해한게 맞는지 궁금합니다^^
아직 초보라 프론트앤드영역에서 실무로 여러 프로젝트를 한 사람들의 의견에 그 이유에 대한 궁금증이 생겨서 질문 남깁니다.
답변 1
3
콜백 사용을 지양해야 한다는 의견에는 다양한 이유가 있을 수 있겠죠.
제가 그 이유를 다 알지는 못합니다만, 살면서 접했던 이유 몇가지를 소개해드리면 다음과 같습니다.
1. 남용하면 콜백지옥에 빠지게 된다.
-> 이는 '남용'하지만 않으면 됩니다. 패스
2. 잘못 사용하면 클로저로 인한 메모리 누수가 발생한다.
-> 클로저의 작동원리를 정확히 이해하고 사용하면 문제 없습니다. 역시 패스
3. 비동기처리 등의 경우에 가독성이 떨어진다.
-> 이 부분은 콜백을 이용하는 한 어쩔 수 없으며, Promise나 async await 등이 이를 해결해줄 적절한 대안이 될 수 있습니다.
콜백을 쓰는 용도는 비단 비동기 제어에만 있는 것은 아닙니다.
말씀하신대로 내장 API에서 요구하는 경우도 있고,
함수를 인자로 전달받아 처리하는 고차함수에서는 콜백함수가 매우 유용하게 쓰이는 케이스가 얼마든지 있습니다.
하여 말씀하신 '지양을 권장'하는 분들이라 하더라도 '꼭 사용해야 하는 곳이 어디인지'는 단정적으로 정의내리지 못할 거라 생각합니다.
앞서 소개한 콜백의 '위험성' 내지는 '불편함'은 그 내용을 충분히 이해하고 적절하게 활용하며, 동시에 더 나은 대안을 모색하면 될 일이라고 생각합니다. 위험성은 어디에나 도사리고 있게 마련이고, 불편함은 결국 개선하기 위해 노력할 수밖에 없는 것 아닐까요? :)