CS 연습문제 (2)
[ 질문 리스트 ]
8. MVVM 패턴의 특징과 장점은 무엇인가요?
9. MVVM 패턴과 StatefulWidget의 차이점을 설명하세요.
10. 위젯이 화면에 그려지기까지의 과정을 설명해보세요.
11. Flutter에서 위젯트리란 무엇인가요?
12. Flutter에서 BuildContext 란 무엇인지 예시를 들어 설명해보세요.
13. 소프트웨어 아키텍처 패턴의 종류중 MVVM 말고도, MVC, MVI 가 있는데, 각각의 특징과 장단점은 무엇인가요?
14. static, const, final의 차이는 무엇인가요?
[ 답변 리스트 ]
8. MVVM 패턴의 특징과 장점은 무엇인가요?
MVVM 패턴의 특징은, 로직을 모델(Model), 뷰(View), 뷰모델(ViewModel)로 나누어 다룬다는 것으로,
모델은 비즈니스 로직을, 뷰는 UI를, 뷰모델은 모델과 뷰의 중재자 역할을 수행하게 함으로써, 각각의 역할 분리를 통해 독립적으로 관리하게끔 하는것이 특징이다.
이로인한 장점은, 각각 독립적이기 때문에, 유지보수에 용이하며, 재사용성이 높고, 테스트 용이성이 좋다는 것이다.
9. MVVM 패턴과 StatefulWidget의 차이점을 설명하세요
MVVM 패턴은 애플리케이션의 아키텍처 패턴중 하나로, UI(View) 와 데이터(Model)을 분리시켜 유지보수성과 테스트 용이성을 높이는 것이 목적인 것이고, StatefulWidget은 Flutter에서 UI를 관리하는 위젯중 하나로써, 특정 위젯의 상태를 관리하는 것이므로 두 개의 차이점은 명확하다.
즉, MVVM 패턴은 아키텍처 패턴이고, StatefulWidget은 UI 상태관리 방식이라고 정의할 수 있다.
10. 위젯이 화면에 그려지기까지의 과정을 설명해보세요.
Flutter에서 위젯이 화면에 렌더링 되는 과정은 크게 3가지로 나눌 수 있는데, 빌드(Build) - 레이아웃(Layout) - 페인트(Paint) 이다.
빌드 단계는 위젯트리를 구성하는 단계로써, 위젯이 변경되었는지 확인하고, 새로운 위젯 트리를 생성하는 단계이며,
레이아웃 단계는 생성된 위젯 트리를 이용해 위젯의 크기과 위치를 결정하는 단계이다.
마지막으로 페인트 단계는 레이아웃이 완료된 후 UI를 화면에 렌더링하는 단계다.
11. Flutter에서 위젯트리란 무엇인가요?
Flutter에서 위젯트리란 UI를 구성하는 핵심 개념중 하나로써, UI의 기본 구조를 정의하는 역할을 수행한다고 생각하면 된다.
즉, 플러터에서 UI를 구성하는 모든 위젯들이 계층구조(Tree) 형태로 연결되어 있는 구조를 위젯트리라고 한다.
12. Flutter에서 BuildContext 란 무엇인지 예시를 들어 설명해보세요.
Flutter에서 BuildContext는 위젯 트리 내에서 특정 위젯의 위치 및 부모-자식 관계를 나타내는 정보를 가진 객체이다.
따라서, BuildContext를 통해 위젯 트리에서의 상위, 하위 위젯에 접근할 수 있으며, 위젯 트리를 탐색하여 상위 위젯의 데이터에 접근 할 수 있게 된다.
BuildContext를 사용해 상위 위젯의 데이터를 접근하는 방식의 가장 대표적인 예시는, Theme.of(context).primaryColor를 통해 테마 색상을 가져오는 메서드를 예로 들 수 있을 것이다.
13. 소프트웨어 아키텍처 패턴의 종류중 MVVM 말고도, MVC, MVI 가 있는데, 각각의 특징과 장단점은 무엇인가요?
MVC(Model-View-Controller)는 가장 전통적인 방식의 아키텍처 패턴으로, UI와 로직을 분리하는 방식의 아키텍처 패턴이다.
Model은 데이터와 비즈니스로직을 담당하고, View는 UI와 사용자 입력을 담당, Controller는 View에서 받은 입력을 처리하고 Model과 View 간의 연결을 담당하는 역할을 수행한다. 구조가 단순하기 때문에 간단하고 이해하기 쉽지만, View의 입력이 반드시 필요한 Controller인 만큼, View의 의존성이 높아 유지보수에는 약간 어려움이 있다는것이 단점이다.
MVI(Model- View-Intent)는 단방향 데이터 흐름을 기반으로 하는 아키텍처 패턴으로, 리액티브 프로그래밍에서 주로 사용되는 패턴이다. Model은 애플리케이션의 상태를 관리하는 역할을 담당하고, View 는 UI, Intent은 사용자 입력을 받아 Model을 변경하는 명령을 전달하는 역할을 수행하게 된다. 때문에 단방향 데이터의 흐름을 유지하여 예측 가능한 상태 관리가 가능하도록 하는 장점이 있다.
14. static, final, const의 차이는 무엇인가요?
Static은 클래스 레벨에서 사용되는 키워드로써, 클래스가 처음 메모리에 로드될때 한번만 할당된다. 이후, 모든 인스턴스가 해당 static 변수를 공유할 수 있다. 또한 값도 변경할 수 있다. 즉, static은 클래스에서 공유되는 변수를 선언할때 사용된다.
final은 객체가 생성될 때(런타임) 한번만 할당되며, 다른 객체로 재 할당은 불가능하지만, List같은 객체일때의 경우엔 내부값은 변경할 수 있는 키워드이다.
const는 컴파일시 한번만 할당되며, 이후 실행중에는 절대 변경할 수 없는 불변값을 가지게 된다. 메모리 최적화 측면에서 가장 좋다.