[ 질문 리스트 ]
1. Flutter 앱 개발에서 '상태' 란 무엇을 의미하나요?
2. ListView, ListView.builder, SingleChildScrollView + Column 3가지의 차이점은 무엇인가요?
3. Flutter에서 상수 클래스란 무엇이며 왜 사용하나요?
4. Riverpod 상태관리 패턴의 특징은 무엇인가요?
5. Riverpod 상태관리와 provider 상태관리의 차이는 무엇인가요?
6. ViewModel의 역할은 무엇인가요?
7. MVVM 패턴이란 무엇인가요?
[ 답변 리스트 ]
1. Flutter 앱 개발에서 '상태' 란 무엇을 의미하나요?
Flutter 에서의 '상태' 란 앱이 특정 시점에서 가지고 있는 데이터나 UI 가 그려진 모습을 의미한다.
즉, 사용자의 상호작용이나 데이터 변경에 따라 앱의 UI가 달라지는 요소들을 '상태'라고 지칭한다.
또한, '상태관리' 라는 것은 앱이 상호작용하면서 변경되는 데이터나 UI를 관리한다는 것을 말한다.
2. ListView, ListView.builder, SingleChildScrollView + Column 3가지의 차이점은 무엇인가요?
셋다 스크롤 가능한 화면을 만들때 사용하지만, 각각의 목적과 최적화 방식이 다르다.
ListView는 정적인 위젯으로써 위젯들을 한번에 생성하여 고정된 개수의 아이템을 보여줄때 사용한다.
즉, 단순한 리스트 형태를 만들때는 좋지만, 다량의 리스트를 만들때에는 성능문제가 발생할 수 있다.
ListView.builder 는 동적인 위젯으로, 스크롤시 필요한 아이템만 렌더링하는 방식을 사용하는 위젯이다.
Itembuilder를 사용하여, 지연 생성(lazy loading) 방식을 사용하기 때문에, 다량의 리스트를 사용하는 경우 적합하다.
SingleChildScrollView + Column 는, 하위 위젯 (여기서는 Column)을 스크롤 가능하게 만드는 것으로써,
ListView와 마찬가지로, 하위 위젯들을 한번에 생성하는 정적인 방식을 사용한다.
다만, ListView의 단순 리스트 형태보다는 다양한 UI요소가 들어간 하위 위젯을 스크롤 가능하게 만드는 경우 사용하게 된다.
3. Flutter에서 상수 클래스란 무엇이며 왜 사용하나요?
상수 클래스란, 변경되지 않는 값(상수)를 저장하는 용도로 사용되는 클래스로써,
주로, 앱 전반에서 재사용 되는 값을 관리하기 위해 사용된다.
static const 로 선언된 변수들은, 컴파일 타임에 미리 계산되므로, 성능 최적화에도 도움이 되고, 값이 재사용된다는 특징으로인해, 코드 중복 방지나 유지보수등에 용이하다.
4. Riverpod 상태관리 패턴의 특징은 무엇인가요?
Riverpod은 Flutter에서 사용되는 상태관리 라이브러리로, 기존 Provider 패턴의 단점을 개선한 것이 특징이다.
우선 context 없이 상태를 관리할 수 있어, 위젯 트리와 독립적으로 동작하기 때문에 Provider를 전역적으로 정의하고 접근할 수 있다. 또한 ref.watch() 를 통해 다른 Provider를 쉽게 주입하고 조합할 수 있어, 상태간 의존성을 효과적으로 관리 할 수 있다.
지연 생성 매커니즘을 통해 필요할 때만 Provider를 생성하여 불필요한 리소스 낭비를 방지할 수 있고, 상태를 UI로부터 분리하여 재사용성이 높은 상태를 사용함 으로써, 모듈화와 테스트 용이성에도 강점을 가지고 있다고 할 수 있다.
즉, 전역적인 상태관리 / 의존성 주입(DI) 기능 제공 / 지연 생성으로 인한 성능 최적화 / 모듈화와 테스트 용이성 이 Riverpod의 상태관리 패턴의 특징이라고 할 수 있다.
5. Riverpod 상태관리와 provider 상태관리의 차이는 무엇인가요?
(4번 질문과 비슷 >> 4번 질문의 답변이 provider의 단점을 개선한 것들이기 때문)
가장 큰 차이점이라면, 상태를 관리함에 있어 context 의 필요 유무를 예로 들 수 있을 것이다.
Provider의 경우, 상태를 접근하기 위해서 context.read(), context.watch() 를 통해 위젯 트리 내의 상태를 접근할 수 있는 반면, Riverpod의 경우에는 ref.read(), ref.watch()를 통해 전역에서 상태를 접근 할 수 있다는 차이점이 있다.
그 외에도, 지연 생성 방식의 지원 유무라던가, 상태관리 방식에 대한 차이로 인한 의존성 관리 방식 이라던가, 테스트 용이성에서도 Riverpod이 더 뛰어나, 결론적으로 Riverpod이 Provider보다 더 강력한 상태 관리 라이브러리라고 할 수 있다.
6. ViewModel의 역할은 무엇인가요?
ViewModel은 UI(View)와 비즈니스 로직(Model) 사이의 중간 역할을 하는 계층으로, UI 와 비즈니스 로직을 분리하여 더 안정적이고 확장 가능한 아키텍처를 구현하는 역할을 수행한다.
7. MVVM 패턴이란 무엇인가요?
UI(View)는 오로지 화면을 표시하는 역할(데이터를 표시하는 역할)만을 수행하게 하고,
데이터의 변경(상태 변경)은 ViewModel에서 처리하도록 하며,
실직적 데이터 로직 및 데이터 관리는 비즈니스 로직(Model)에서 담당하게 끔 한다.
이러한 방식의 아키텍처를 MVVM (Model-View-ViewModel) 이라고 한다.
'CS' 카테고리의 다른 글
CS 연습문제 (2) (0) | 2025.02.20 |
---|---|
CS 연습문제 (0) (0) | 2025.02.17 |