기본 콘텐츠로 건너뛰기

Flutter BLoC 패턴 완벽 이해하기

Flutter BLoC 패턴 완벽 이해하기 🚀

Flutter 앱을 개발하다 보면, “상태관리(State Management)”가 중요한 화두로 등장합니다. 그중에서도 BLoC (Business Logic Component) 패턴은 가장 널리 사용되는 구조로, UI와 비즈니스 로직을 명확히 분리할 수 있게 해주는 강력한 방법입니다.


🔹 BLoC 패턴이란?

BLoC 패턴은 Business Logic Component의 약자로, 사용자의 입력(Event)을 받아서 내부 로직을 처리하고, 그 결과를 State로 UI에 전달하는 아키텍처입니다. 즉, UI는 데이터의 변화를 감시만 하고, 비즈니스 로직은 Bloc이 담당하는 구조입니다.

BLoC 패턴 구조 다이어그램

🧩 BLoC 패턴의 핵심 구성 요소

1. Event

사용자가 발생시키는 액션입니다. 예를 들어 버튼 클릭, 스크롤, 입력 등이 이벤트로 전달됩니다.


abstract class CounterEvent {}
class Increment extends CounterEvent {}

2. State

현재 앱의 상태를 나타냅니다. State는 Bloc이 변경하며, UI는 이를 감시합니다.


class CounterState {
  final int count;
  CounterState(this.count);
}

3. Bloc

Event를 받아서 State를 변경하는 중간 관리자입니다. Bloc은 모든 로직을 관리하고, 새로운 상태를 emit()으로 내보냅니다.


class CounterBloc extends Bloc<CounterEvent, CounterState> {
  CounterBloc() : super(CounterState(0)) {
    on<Increment>((event, emit) {
      emit(CounterState(state.count + 1));
    });
  }
}

4. UI (Widget)

UI는 Bloc을 구독하고, 상태 변화에 따라 화면을 갱신합니다. BlocBuilder를 사용하여 쉽게 구현할 수 있습니다.


BlocBuilder<CounterBloc, CounterState>(
  builder: (context, state) {
    return Column(
      children: [
        Text('${state.count}', style: TextStyle(fontSize: 32)),
        ElevatedButton(
          onPressed: () => context.read<CounterBloc>().add(Increment()),
          child: Text('Increment'),
        ),
      ],
    );
  },
)

⚙️ flutter_bloc 패키지 설치

BLoC 패턴을 간단히 구현하려면 flutter_bloc 패키지를 사용하세요.


dependencies:
  flutter_bloc: ^8.1.3

이후 BlocProvider로 Bloc을 위젯 트리에 주입하면 됩니다.


BlocProvider(
  create: (context) => CounterBloc(),
  child: CounterScreen(),
);

💡 Cubit vs Bloc 차이점

Cubit은 Bloc의 간소화된 버전입니다. Event를 따로 정의하지 않고, 바로 메서드를 호출해서 상태를 변경할 수 있습니다.


// Cubit 예시
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);
  void increment() => emit(state + 1);
}

작은 프로젝트나 단순한 상태관리에는 Cubit이, 복잡한 앱 구조에서는 Bloc이 적합합니다.


📱 정리

  • ✅ UI와 비즈니스 로직을 완전히 분리할 수 있다.
  • ✅ 테스트하기 쉽고, 유지보수가 편하다.
  • ✅ 확장성이 뛰어나며 대규모 앱에 적합하다.

Flutter의 BLoC 패턴은 초반에 다소 복잡하게 느껴질 수 있지만, 익숙해지면 가장 깔끔하고 안정적인 구조를 제공합니다.


🏁 마무리

Flutter에서 BLoC 패턴은 단순한 상태관리를 넘어 앱 구조 전체를 체계적으로 관리하게 도와줍니다. 만약 Flutter 프로젝트를 장기적으로 유지보수할 계획이라면, BLoC 패턴을 꼭 익혀두세요.

#Flutter #BLoC #flutter_bloc #Cubit #StateManagement #모바일앱개발

댓글

이 블로그의 인기 게시물

감정일기와 멘탈관리

감정일기와 멘탈관리: 감정일기 앱으로 마음을 관리하는 법 키워드: 감정일기, 감정일기 앱, 멘탈관리, 감정 기록, 정서관리, 감정 통계, 감정 패턴 분석 한줄 요약: 감정을 기록하면 스트레스 원인을 파악하고 꾸준한 멘탈관리를 할 수 있습니다. 감정일기 앱 Emotion Log 로 하루 1분 마음 관리를 시작해보세요. 감정일기란 무엇인가요? 감정일기는 하루 동안 느낀 감정을 기록하며 자기 인식과 정서 관리 를 돕는 일기입니다. 단순히 "오늘 기분 좋았음"이 아니라, 왜 그런 감정을 느꼈는지 를 짧게 남기는 것만으로도 스트레스 해소와 멘탈 회복에 큰 도움이 됩니다. 감정일기가 멘탈관리로 이어지는 이유 감정 인식 능력 향상: 반복되는 감정 패턴을 확인해 스트레스 요인을 파악할 수 있습니다. 부정적 감정 해소: 글로 감정을 표현하면 감정이 객관화되어 마음이 정리됩니다. 정서적 회복력 향상: 감정을 이해하고 조절하는 힘이 생깁니다. 감정일기 쓰는 법 처음부터 긴 글을 쓸 필요는 없습니다. 아래 3단계로 시작해보세요 👇 1분 기록하기: 오늘의 감정 이모지를 선택하고 한 줄 이유를 작성. 패턴 보기: 주간 감정 통계를 통해 내 마음의 리듬을 확인. 긍정 순간 저장: 나를 행복하게 하는 순간을 따로 기록. Emotion Log 앱으로 감정일기 더 쉽게 쓰기 Emotion Log는 감정을 손쉽게 기록하고 시각화해주는 감정일기 앱 입니다. 20가지 감정 이모지 중 선택 가능 시간대별, 요일별 감정 패턴 자동 분석 위치 기반 감정 기록 감정 리포트로 나만의 정서 흐름 파악 💡 Emotion Log 앱 은 단순한 감정일기가 아니라, 나의 마음을 데이터로 이해하는 도구입니다. 하루 1분, 감정을 기록하는 습관이 멘탈관리의 핵심 루틴 이 됩니다. 👉 Emotion Log 앱 다운로드 마음 관리 루틴 만들기 ...

2025-11-18 핫이슈 분석

핫 이슈 분석 🔥 2025년 11월 18일 오늘 하루 뉴스 데이터를 기반으로 한 핫이슈, 수치 및 트렌드 분석 핵심 하이라이트: 3대 수치 오늘 가장 주목받은 구체적인 수치와 경제적 전망입니다. 3,953.94 코스피 시장 마감 지수 ('AI 거품론' 확산에 4000선 붕괴) 1,465.3원 원/달러 환율 종가 (7.3원 상승) (9개월만 최고치 기록) 1,968조원 3분기 가계신용 규모 (역대 최대, 둔화세 보였으나 규모 유지) 오늘의 긴급 이슈 상세 'AI 거품론' 확산 속 코스피 4000선 붕괴 큰손들의 엔비디아 매각 소식과 美 연준발 악재가 겹치며 시장의 AI 거품 논란이 확산, 코스피가 3% 넘게 급락하며 4000선이 깨졌습니다. 대통령실, 北 '대결적 기도' 논평에 '적대의사 없음' 강조 북한의 대남 비난 논평에 대해 대통령실이 '적대 의사 없음'을 강조하며 남북 간 신뢰 회복을 위한 노력을 지속하겠다는 입장을 표명했습니다. 삼성 HBM 美공급 확대에 특허괴물 또 발목 삼성전자의 HBM 미국 공급 확대에 맞춰 특허괴물(NPE)이 또다시 특허 침해 소송을 제기하며 첨단 산업 분야의 리스크가 부각되고 있습니다. 1. 오늘 하루 뉴스 테마별 비중 분석 오늘 하루 발행된 뉴스 기사 제목에서 주요 핫이슈 테마에 해당하는 키워드를 기준으로 집계한 결과입니다. (100건을 기준으로 분석 비율 조정) 시사점: '기업/투자/MOU' (27.0%)와 'AI/반도체/첨단기술' (21.6%) 관련 뉴스가 전체 절반에 가까운 비중을 차지하며 미래 기술과 경제 동향에 대한 높은 시장 관심도를 반영했습니다. 2. 오늘 가장 주목받은 핵심 이벤트 Top 5 단순 빈도를 넘어, 오늘 하루 사회적 파급력과 특이성이 가장 높았던 이슈들을 선별합니다. (정성적 분석 기반) #1 코스피 4000선 붕괴, AI 거품론에 시장 공포 확산 엔비디아 매각 등 'AI 거품론...

Puppeteer로 배민 셀프 주문 데이터를 자동으로 수집하기

Puppeteer로 배민 셀프 주문내역 자동 수집하기 | 개발 자동화 프로젝트 🚀 Puppeteer로 배민 셀프 주문 데이터를 자동으로 수집하기 최근 들어 배달의민족 셀프 시스템 을 사용하는 점주들이 늘어나면서, 주문 데이터를 효율적으로 관리하고 분석하려는 수요가 커지고 있습니다. 하지만 수동으로 주문 내역을 다운로드하거나 복사하는 과정은 여전히 불편하죠. 이 문제를 해결하기 위해, 저는 Puppeteer 를 이용해 배민 셀프 시스템의 주문 내역 페이지 (https://self.baemin.com/orders/history) 에서 데이터를 자동으로 수집하고, 이를 Excel(xlsx) 파일로 저장하는 자동화 프로그램을 개발했습니다. 💡 사용 기술 Puppeteer — Headless Chrome 기반 브라우저 자동화 Node.js — 비동기 처리 및 파일 입출력 관리 xlsx — 주문 데이터를 Excel 파일로 변환 ⚙️ 주요 기능 자동 로그인 (배민 셀프 계정 정보 입력) 주문 내역 페이지 접속 및 날짜 필터 설정 모든 페이지의 주문 데이터 수집 Excel 파일 자동 저장 특히 날짜 필터를 수동으로 지정하지 않고, 오늘 날짜를 자동으로 인식 하도록 구현하여 매일 실행만 하면 자동으로 최신 주문 내역을 수집할 수 있습니다. 🧩 코드 구조 예시 const puppeteer = require('puppeteer'); const XLSX = require('xlsx'); (async () => { const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); // 배민 셀프 로그인 await page.goto('https://self.baemin.com/login'); await...