TIL

모의 면접 준비를 해보자 (숙련)

kimw746 2025. 2. 20. 11:26

1. Flutter 앱 개발에서 ‘상태’란 무엇을 의미하나요?

 

  • Flutter에서 ‘상태(State)’는 앱의 UI에 영향을 주는 데이터를 의미함.
  • 예를 들어, 버튼을 눌렀을 때 숫자가 증가하는 카운터 앱에서 숫자가 0 → 1 → 2로 변하는 것이 상태의 변화임.
  • 상태는 크게 **변하는 상태(Stateful)와 변하지 않는 상태(Stateless)**로 나뉨.
  • StatefulWidget을 사용하면 상태가 변경될 때 setState()를 호출해 UI를 다시 그림.

2. ListView, ListView.builder, SingleChildScrollView + Column 3가지의 차이점은?

 

  • ListView: 모든 아이템을 한 번에 렌더링함 → 많은 아이템을 다룰 때 성능 저하.
  • ListView.builder: 필요한 아이템만 그릴 때마다 렌더링(지연 로딩) → 성능이 훨씬 좋음.
  • SingleChildScrollView + Column: 리스트가 아니라 단순한 스크롤이 필요한 경우 사용하지만, 내부 위젯이 많아지면 성능 문제가 발생할 수 있음(모든 위젯을 한 번에 로드함).

3. Flutter에서 상수 클래스란 무엇이며 왜 사용하나요?

 

  • 변경되지 않는 값을 정의하는 클래스.
  • const 생성자를 사용하면 컴파일 시점에 미리 값을 할당하여 성능을 최적화할 수 있음.
class AppColors {
  static const primaryColor = Color(0xFF00FF00);
}

 

 

 

  • 이점: 코드 가독성 증가, 메모리 절약.

4. Riverpod 상태관리 패턴의 특징은?

 

  • 의존성 주입(DI)이 기본 내장 → ref.watch(), ref.read()로 의존성을 쉽게 관리 가능.
  • 전역 상태 관리 가능 → Provider 객체를 이용해 어디서든 접근 가능.
  • 자동 폐기(Dispose) 지원 → 사용되지 않는 상태는 자동으로 정리됨.
  • Immutable한 상태 관리 → 상태가 변할 때마다 새로운 객체가 생성되어 예측 가능한 코드 작성 가능.

5. Riverpod 상태관리와 Provider 상태관리의 차이?

  • Provider: ChangeNotifier 기반으로 UI가 상태 변경을 감지 → 의존성 주입을 위해 BuildContext 필요.
  • Riverpod: BuildContext 없이 동작하며, 전역적인 상태 관리를 더 쉽게 구현할 수 있음.

6. ViewModel의 역할은?

  • UI 로직과 비즈니스 로직을 분리하는 역할.
  • UI 관련 데이터(상태)를 관리하고, 네트워크 호출 또는 DB 작업 같은 로직을 처리함.
  • MVVM 패턴에서 View와 Model을 연결하는 핵심 역할을 담당함.

7. MVVM 패턴이란?

  • Model-View-ViewModel의 약자.
  • Flutter에서 UI(View)와 비즈니스 로직(Model)을 분리하는 아키텍처 패턴.
  • 구성 요소:
    • Model: 데이터와 비즈니스 로직 관리
    • View: UI를 담당
    • ViewModel: Model과 View를 연결, 상태 관리

8. MVVM 패턴의 특징과 장점은?

  • 특징:
    • UI(View)와 비즈니스 로직(Model)이 분리됨.
    • ViewModel이 상태를 관리하여 UI 변경을 최소화.
  • 장점:
    • 유지보수 쉬움 (UI 변경이 Model에 영향 X).
    • 코드 재사용성 증가.
    • 테스트 용이 (UI가 독립적이므로 단위 테스트 작성 쉬움).

9. MVVM 패턴과 StatefulWidget의 차이점?

  • StatefulWidget은 UI와 상태를 한 곳에서 관리하지만, MVVM은 View와 상태(ViewModel)를 분리하여 관리함.
  • MVVM을 사용하면 비즈니스 로직이 UI에 직접 포함되지 않아 유지보수성이 향상됨.

10. Flutter에서 위젯트리란?

  • Flutter 앱은 위젯들의 계층 구조(트리)로 구성됨.
  • 위젯 트리는 부모-자식 관계를 가지며, 앱 화면을 구성하는 기본 구조를 의미함.
MaterialApp(
  home: Scaffold(
    appBar: AppBar(title: Text('My App')),
    body: Column(
      children: [
        Text('Hello'),
        ElevatedButton(onPressed: () {}, child: Text('Click'))
      ],
    ),
  ),
);

 

  • MaterialApp → Scaffold → Column → Text, Button 처럼 트리 구조를 가짐.

11. 위젯이 화면에 그려지기까지의 과정?

  • 위젯 트리 생성: 위젯을 정의하고 트리를 구성.
  • Element 트리 생성: 위젯을 화면에 그리기 위한 요소(Element) 트리를 생성.
  • RenderObject 트리 생성: 실제 UI를 그릴 때 필요한 렌더링 정보를 포함하는 트리 생성.
  • UI 그리기: Flutter 엔진이 RenderObject 트리를 바탕으로 프레임워크를 화면에 렌더링.
  • 상태 변화 감지 및 업데이트: setState() 호출 시 위젯 트리를 다시 빌드.

12. Flutter에서 BuildContext란?

  • 위젯 트리에서 위젯의 위치를 나타내는 정보를 담고 있음.
  • context를 이용하면 현재 위젯이 어디에 위치하는지 파악 가능.
class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('BuildContext 예제')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('버튼 클릭!'))
            );
          },
          child: Text('Show SnackBar'),
        ),
      ),
    );
  }
}
  • ScaffoldMessenger.of(context)를 사용하여 SnackBar를 띄우는 예제.
  • context를 사용하면 트리에서 위젯을 찾아 필요한 정보를 가져올 수 있음.

 

'TIL' 카테고리의 다른 글

Flutter의 Stream에 대해서..  (1) 2025.01.15
Flutter의 const 키워드  (0) 2025.01.15
Flutter의 Key는 무엇인가요?  (0) 2025.01.15
Dart의 Garbage Collector란?  (0) 2025.01.13
클래스 내에서 static 키워드  (0) 2025.01.10