CH02 Bloc Overview

๋‹ค์ˆ˜์˜ Bloc ์„ ๊ตฌ๋…ํ•˜์—ฌ ์ด ๊ฒฐ๊ณผ๋“ค์„ ๋ณตํ•ฉ์ ์œผ๋กœ ์ฐธ์กฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด MultiBlocListener๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์€ BlocBuilder, BlocConsumer, BlocListener ์˜ ์ฐจ์ด์— ๊ด€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

Flutter์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Bloc ํŒจํ„ด์—์„œ, UI์™€ ์ƒํƒœ๊ด€๋ฆฌ ๋ธ”๋ก(Bloc) ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋•๋Š” ์œ„์ ฏ๋“ค์—๋Š” BlocBuilder, BlocConsumer, BlocListener๊ฐ€ ์žˆ๋‹ค. ์ด๋“ค์˜ ์ฐจ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. BlocBuilder

BlocBuilder๋Š” UI๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์œ„์ ฏ ์ค‘ ํ•˜๋‚˜๋กœ, BlocProvider๋กœ๋ถ€ํ„ฐ Bloc์„ ๊ฐ€์ ธ์™€์„œ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ Builder ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. Builder ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ UI๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด UI๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ๊ทธ๋ ค์ง„๋‹ค. ๋”ฐ๋ผ์„œ BlocBuilder๋Š” Bloc์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค UI๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  1. BlocConsumer

BlocConsumer๋Š” BlocBuilder์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, UI๋ฅผ ๊ทธ๋ฆฌ๋Š” Builder ํ•จ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•  ์ด๋ฒคํŠธ๋„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, BlocBuilder์™€ ๋‹ฌ๋ฆฌ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. BlocListener

BlocListener๋Š” Bloc์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์œ„์ ฏ์œผ๋กœ, BlocBuilder๋‚˜ BlocConsumer์™€ ๋‹ฌ๋ฆฌ UI๋ฅผ ๊ทธ๋ฆฌ์ง€๋Š” ์•Š๋Š”๋‹ค. ๋Œ€์‹ , Bloc์—์„œ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•  ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. BlocListener๋Š” Bloc์ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์— Toast ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, BlocBuilder๋Š” ์ƒํƒœ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ , BlocConsumer๋Š” ์ƒํƒœ๋ฅผ ๋ฐ”๋ผ๋ณด๋ฉด์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , BlocListener๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋“ค์€ ๊ฐ๊ฐ์˜ ์ƒํ™ฉ์—์„œ ํ•„์š”์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์œ„์ ฏ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Bloc ์—์„œ ์–ธ์ œ state ๊ฐ€ ๋ฐ”๋€Œ๋‚˜

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด emit ๊ณผ์ •์—์„œ state ๋ฅผ ๊ฐˆ์•„์น˜์šด๋‹ค. (๊ธฐ์กด state์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ฌ๋ผ์ง„ state ๊ฐ€ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ์—๋งŒ) Bloc<Event, State>๊ฐ€ BlocBase<State>๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ๊ณ  BlocBase<State>๊ฐ€ state๋ฅผ ํ•„๋“œ๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

์ฝ”๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด Bloc<Event, State>์˜ emit ์€ ๊ฒฐ๊ตญ super.emit(state)๋กœ ๊ฒฐ๊ตญ BlocBase<State>์˜ emit ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ์—ฌ๊ธฐ์„œ ํ•„๋“œ๋กœ ๊ด€๋ฆฌ์ค‘์ธ ๊ธฐ์กด state ์™€ ๋น„๊ต ํ›„ ๋‹ค๋ฅด๋ฉด ์ƒˆ๋กœ์šด state ์„ ํ• ๋‹นํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

Bloc ์—์„œ ์–ธ์ œ ๊ตฌ๋… ์œ„์ ฏ์ด state ๋ณ€ํ™”๋ฅผ ์•Œ๊ฒŒ ๋˜๋Š”๊ฐ€

state ๋ณ€ํ™”์— ๋Œ€ํ•ด์„œ ์ด๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” ์œ„์ ฏ์— ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์€ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก ๋ถ€๋ถ„์—์„œ ๋ฐœ์ƒํ•œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

Last updated