경로 기반 라우팅과 명령형(Imperative), 선언형(Declarative)과의 관계
223
작성한 질문수 3
중급 강의까지 모두 수강한 후 초급 강의 복습 중입니다.
좋은 강좌 제공해 주셔서 감사합니다!
본 강의에서는 MaterialApp 차원에서 라우트 경로(path)를 지정하는 경로 기반 라우팅이기 때문에 이를 "선언적(declarative) 라우팅"이라고 표현하신 것 같지만(강의 시간 1:05), 실제로는 여전히 명령형 라우팅(Imperative Routing)이 맞는 것 같아 질문드립니다.
저의 생각으로는:
main.dart파일에서의routes는 단순히 경로와 화면을 매핑하는 역할을 할 뿐,실제 화면 전환은 개발자가 명령(
pushNamed)해야 이루어지므로경로를 정의하는 부분은 선언적처럼 보일 수 있지만,
화면 전환 자체는 명령형 방식이다.
제 생각이 맞는지 확인 부탁드립니다. 감사합니다!
답변 3
0
안녕하세요!
그렇다면 Declarative Routing은 어떻게 돼야한다고 생각하시나요?
감사합니다!
0
안녕하세요 코팩님.
GoRouter에서의 context.go가 declarative routing이 아닐까요?
context.go('/profile')와 같은 함수 호출은 "명령형"인 것처럼 보이긴 하지만 내부적으로 "경로 상태 변경"이라는 명확한 선언적 작업이기 때문에 Declarative Routing이라고 생각합니다.
제가 이에 대한 지식이 한없이 부족해서 어제 LLM과 대화 나누면서 생각을 정리해본건데, 혹여나 오류가 있으면 말씀 좀 부탁드리겠습니다.
남은 주말 잘 보내세요!
0
제가 잘 이해를 못하고 있는 것 같은데
imperative route ->
declarative route ->
둘이 어떻다고 생각하시는지 코드로 예제를 보여주시면 좀 더 대화가 가능 할 것 같습니다.
제가 지금 글을 읽었을때는 같은 코드를 imperative 면서 declarative라고 말씀하시는 것 같아서요!
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. zhemgksl님.
질문해주신 내용은 라우팅 방식에 대한 흥미로운 점을 다루고 있습니다. Flutter의 MaterialApp에서 사용하는 라우팅은 경로를 사전에 정의하는 방식이기 때문에 선언적(declarative)이라고 볼 수 있습니다. 하지만 질문에 적어주신 대로 실제 화면 전환을 Navigator 사용하여 명령형(Imperative)으로 수행하기 때문에, 실질적인 전환은 명령형이라는 표현이 맞습니다.
즉, main.dart의 routes 설정은 경로와 위젯을 매핑하는 선언적 요소를 가지고 있지만, 특정 화면을 푸시하거나 팝하는 것은 개발자의 명령에 의해 수행됩니다. 이는 Flutter의 전반적인 스타일, 즉 패턴을 선언적으로 정의하고 세부 실행은 명령형으로 하는 방식과 유사합니다.
질문하신 내용과 관련된 더 구체적인 설명은 다음의 링크를 통해 확인하실 수 있습니다:
- “navigation 이론 강의에서 push 메서드 관련 질문 드립니다!” - 여기서는 네비게이션 스택과 push 메서드의 사용 방식에 대한 자세한 설명을 제공합니다.
질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
198강 (){onTap(e);}의 이해 돕기
0
19
1
video_call 플러그인 설치후 에러 발생
0
45
1
SDK 안드로이드 설치 질문!
0
59
1
코드팩토리 디스코드 링크 다시 부탁드려요~
0
92
1
Webview를 이용해서 URL 상의 페이지 출력 불가
0
69
1
홈스크린 함수를 함축해서 main.dart에 옮기는 문제
0
55
1
플레이스토어
0
59
1
아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?
0
55
1
가이드라인 질문
0
57
0
emulator 에러 환경설정 뭐가 문제 일까요??
0
76
1
emulator 실행 오류
0
93
3
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
0
71
1
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
0
43
1
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
0
53
1
video_call 플러그인 설치시 에러문제
0
63
1
children 안의 if 문에서 { } 못쓰는 이유?
0
48
1
이렇게 오류가 떠요
0
63
1
AppBar 사용했는데
0
61
2
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
0
56
1
StatefulWidget 실습 에러가 발생합니다.[해결완료]
0
63
1
Video Player 프로젝트에 대한 추가 질문
0
53
0
Row위젯이나 column위젯의 위치는 누가 정하나요??
0
42
1
geolocator 오류때문에 개발진행이 불가능입니다
0
62
1
API 관련 이슈
0
86
2





