[Flutter] 람다 방식 (Get.to)

개발 기록·2025년 2월 5일

Flutter

목록 보기
18/18

왜 알아봤는가?

수정 전

onTap: () async {
                          int id = selectedDayExercises[index]['id'];
                          await c.getDetail(id);
                          Get.to(ExerciseDetail(
                              id, selectedDayExercises[index]['category']));
                        },

메인 화면에서 리스트 항목을 선택했을 때 해당 리스트의 디테일 화면으로 이동하는 코드를 Get.to(ExerciseDetail(생략)로 작성해서 실행했는데, 아래 사진과 같은 경고 메세지가 떴다.


내가 작성한 코드 Get.to(페이지())는 메모리를 잡아먹기 때문에 Get.to(() => 페이지()) 방식을 쓰라는 것인데, 언틋보기엔 비슷해 보이는데 어떤 차이가 있는건지 궁금해서 알아 봤다.

람다 방식 이란?

  • 람다 방식은 익명 함수로, ()=> 함수() 형태로 사용됨
  • 함수를 호출하지 않고, 함수 자체를 전달하면 실행되지 않고 대기함
  • 즉, 실행될 시검을 다른 함수가 결정하기 때문에 필요할 때만 함수를 생성하여 불필요한 실행을 방지할 수 있음

람다 방식 vs 일반 함수

구분람다방식일반함수
실행시점나중에 필요할 때 실행 됨즉시 실행됨
사용 방식()=>함수() 형태함수() 형태
동작 원리함수 자체를 전달(참조)됨함수가 실행되고 결과를 반환
메모리 관리필요할 때만 생성 (=>불필요한 실행 방지)즉시 실행되기 때문에 불필요한 인스턴스 생성 가능
예제Get.to(() => Page());Get.to(Page());
특징실행을 미룰 수 있음(지연실행)즉시 실행되므로 조작 풀가

현재 내 코드에서는 사용자가 선택 했을 때만 디테일 페이지로 이동을 해야하기 때문에 람다 방식이 무조건 효율적인 방식이다.

수정 후

onTap: () async {
                          int id = selectedDayExercises[index]['id'];
                          await c.getDetail(id);
                          Get.to(() => ExerciseDetail(
                              id, selectedDayExercises[index]['category']));
                        },

이로써 불필요한 위젯 생성을 방지하고, 메모리 낭비를 최소화 할 수 있게 됐다!

                          

0개의 댓글