๐Ÿ”— [Flutter&Dart] ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ(Loop) ์‚ฌ์šฉ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•

Tygerยท2024๋…„ 3์›” 18์ผ
1

Flutter

๋ชฉ๋ก ๋ณด๊ธฐ
56/57

๐Ÿ”— ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์ด์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ(Loop) ์‚ฌ์šฉ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•

์ด๋ฒˆ ๊ธ€์€ ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ์‹œ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์•„๋งˆ๋„ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ ํ•˜๋ฉด์„œ ๋ฆฌ์ŠคํŠธ(List) ๋˜๋Š” ์–ด๋ ˆ์ด(Array) ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•ด ๋ด์„œ ๋ฌด์Šจ ํ˜•ํƒœ์˜ ํƒ€์ž… ์ธ์ง€๋Š” ๋‹ค๋“ค ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋ฆฌ์ŠคํŠธ(List)๋Š” ์–ด๋–ค ํ˜•ํƒœ์˜ ํƒ€์ž…์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ธ๋ฐ, ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค ์ค‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ์‹œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ์ข‹์„์ง€์— ๋Œ€ํ•ด์„œ ๊ฒฝํ—˜์ด๋‚˜ ์•Œ๊ณ  ์žˆ๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ์ž‘์„ฑํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

"์ž˜ ๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๋Œ“๊ธ€ ๋‚จ๊ฒจ ์ฃผ์‹œ๋ฉด ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

Case

๋จผ์ €, ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ์— ๋ฌด์Šจ ๋ฌธ์ œ๊ฐ€ ์žˆ์„๊นŒ?

์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ณด์‹  ๋ถ„๋“ค๋„ ์žˆ์„ ๊ฒƒ์ด๊ณ , ์•„์ง ๊ฒฝํ—˜ํ•˜์ง€ ๋ชปํ•œ ๋ถ„๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฐ ์ผ€์ด์Šค๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉ์‹œ ๋ฆฌ์ŠคํŠธ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ๋‹น์—ฐํžˆ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ ?

๋ฆฌ์ŠคํŠธ(List)์˜ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ์— ๋ฆฌ์ŠคํŠธ์˜ ์‚ญ์ œ ๋˜๋Š” ์ถ”๊ฐ€๋กœ ์ธํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ™•์ธํ•ด ๋ณด์ž.

0-9๊นŒ์ง€ 10๊ฐœ์˜ ์ •์ˆ˜ํ˜•(int) ํƒ€์ž…์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ, ๋ฐ์ดํ„ฐ๋ฅผ 2๋กœ ๋‚˜๋ˆˆ ๋ชซ์ด 0์ด๋ฉด ์ œ๊ฑฐํ•˜๋„๋ก ํ•ด๋ณด์ž.

์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ด ์ž˜ ์‹คํ–‰์ด ๋œ๋‹ค.

void main() {
  List<int> _numbers = List.generate(10, (i) => i);
  print(_numbers);
  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  
  for (int i = 0; i < _numbers.length; i++) {
    if (_numbers[i] % 2 == 0) {
      _numbers.removeAt(i);
    }
  }
  print(_numbers);
  // [1, 3, 5, 7, 9]
}

์ด์ œ ์กฐ๊ฑด์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด์„œ 2๋กœ ๋‚˜๋ˆˆ ๋ชซ์ด 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” 2๋ฅผ ๊ณฑํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•ด๋ณด์ž.

2๋ฅผ ๊ณฑํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ์ง€๋งŒ, ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ณด๋ฉด 2๋กœ ๊ณฑํ•ด์ฃผ์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค.

for (int i = 0; i < _numbers.length; i++) {
	if (_numbers[i] % 2 == 0) {
    	_numbers.removeAt(i);
    } else {
    	_numbers[i] = _numbers[i] * 2;
    }
}
print(_numbers);
// [1, 3, 5, 7, 9]

์™œ ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์„๊นŒ ? ๋ฐ”๋กœ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ ๋ฆฌ์ŠคํŠธ(List)์˜ ๊ธธ์ด๋ฅผ ๋ณ€๊ฒฝ ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“ค๋ฉด์„œ ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์ง€๋งŒ, ์ธ๋ฑ์Šค ์›์†Œ์— ํ•ด๋‹นํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ ๋˜์–ด์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋ฌผ๋ก , ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜๋„ ์žˆ๊ณ , ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ์‹์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

void main() {
  List<int> _numbers = List.generate(10, (i) => i);
  List<int> _newNumbers = [];
  for (int i = 0; i < _numbers.length; i++) {
    if (_numbers[i] % 2 != 0) {
      _newNumbers.add(_numbers[i] * 2);
    }
  }
  print(_newNumbers);
  // [2, 6, 10, 14, 18]
}

Immutable ? Mutable ?

์œ„์—์„œ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์€ ์™œ ์ข‹์ง€ ๋ชปํ•œ ๊ฑธ๊นŒ ?

์ด๊ฑธ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ immutable, mutable์— ๋Œ€ํ•ด์„œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

์ •ํ™•ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ ๊ธ€์„ ์ž‘์„ฑํ•  ์˜ˆ์ •์ด๊ณ , ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ์•Œ๊ณ  ๊ฐ€๋„๋ก ํ•˜์ž.

์ด ๋ถ€๋ถ„์€ Dart ์–ธ์–ด ์™ธ์˜ ๋Œ€๋ถ€๋ถ„์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ํ•ด๋‹น๋˜๋Š” ๋‚ด์šฉ์ด๊ธฐ๋„ ํ•œ๋‹ค.

immutable์€ ๋ถˆ๋ณ€ํ•œ ์„ฑ์งˆ์„ ๋‚˜ํƒ€๋‚ด๊ณ  mutable์€ ๊ทธ ๋ฐ˜๋Œ€์ธ ๋ณ€ํ• ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ์„ ๋œปํ•œ๋‹ค.

Flutter์— ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ํƒ€์ž… ์ค‘ ๋Œ€ํ‘œ์ ์ธ immutable ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” String ํƒ€์ž…์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

๋ฌธ์ž์—ด์— ์ฒ˜์Œ์— "NewYork"์ด๋ผ๊ณ  ๊ฐ’์„ ํ• ๋‹น ํ•˜์˜€๋‹ค. ๊ทธ ํ›„์— "Seoul"๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝ์„ ํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋‹ค.

๊ทผ๋ฐ ์™œ String์€ immutable ์„ฑ์งˆ์ธ ๋ถˆ๋ณ€ํ•œ ํƒ€์ž…์ธ ๊ฑธ๊นŒ ? ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ..

void main() {
  String city = "NewYork";
  city = "Seoul";
  print(city);
  // seoul
}

๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด String์€ immutable ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•œ ๊ฒƒ์ด ์•„๋‹Œ ์ƒˆ๋กœ์ด ๊ฐ’์„ ์„ ์–ธํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์ฆ‰ ์ฒ˜์Œ์— city์™€ ๋ณ€๊ฒฝ๋œ city๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๊ณ , ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด city๋ฅผ ์„ ์–ธํ•  ๋•Œ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์ด "00000000" ์ด๋ผ๊ณ  ํ•˜์ž.
city์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ์ธ "00000000" ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  "00000001" ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  city๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— immutable์ด์–ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•œ๋งˆ๋””๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฃผ์†Œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐ€์žฅ ์‰ฝ๊ฒŒ Flutter์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ hashCode๋ฅผ ์ถœ๋ ฅํ•ด ํ™•์ธํ•ด ๋ณด๋ฉด ๋œ๋‹ค. hashCode๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์˜๋ฏธ๋‹ค.

"HashCode๋Š” ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์‹๋ณ„ ๊ฐ€๋Šฅํ•œ ์ •์ˆ˜ํ˜•์˜ ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์‹œ ๋งˆ๋‹ค ๊ฐ’์€ ๋ณ€๊ฒฝ๋จ"

void main() {
  String city = "NewYork";
  print(city.hashCode);
  // 929241207
  
  city = "Seoul";
  print(city.hashCode);
  // 518004294
}

๊ทธ๋ ‡๋‹ค๋ฉด mutable ํƒ€์ž…์€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ๊ฒƒ์ผ๊นŒ ?

๋‹น์—ฐํžˆ ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•˜๋”๋ผ๋„ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ๋™์ผ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋ณ€๊ฒฝ์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฆฌ์ŠคํŠธ(List)๋Š” ๋Œ€ํ‘œ์ ์ธ mutable์„ฑ์งˆ์˜ ํƒ€์ž…์ด๋‹ค.

HashCode๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

void main() {
  List<String> platform = ["iOS", "Android", "Web", "Linux"];
  print(platform.hashCode);
  // 170602879
  
  platform[3] = "Windows";
  print(platform.hashCode);
  // 170602879
}

์ง€๊ธˆ๊นŒ์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๋‹ค ๋ง๊ณ  ์™œ immutable, mutable ์„ฑ์งˆ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ๊ฑด์ง€๋Š” ๋ฐ”๋กœ ์œ„์—์„œ ๋‹ค๋ฃฌ ์ผ€์ด์Šค ๋•Œ๋ฌธ์ด๋‹ค.

๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์•„ ์ •ํ™•ํ•œ ์›์†Œ๋ฅผ ๋‹ค๋ฃจ์ง€ ๋ชปํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ๋•Œ์—, ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜ˆ์‹œ๋กœ ๋‹ค๋ค˜์—ˆ๋‹ค.
๊ทธ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ๊ทธ๋ฆฌ ์ข‹์ง€ ๋ชปํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•œ ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ํƒ€์ž…์˜ ์„ฑ์งˆ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฆฌ์ŠคํŠธ(List)๋Š” mutable(๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š”) ํƒ€์ž…์ด์–ด์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ตณ์ด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์•„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ ?

๋ฌผ๋ก , ๋ช‡ ๋ฒˆ ๊ทธ๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ€์ง€๊ณ  ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฆญ์ด ์ฆ‰์‹œ ๋ฐœ์ƒํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋Š˜์–ด๋‚˜๋ฉด ์ƒ๋‹นํ•œ ๋ถ€๋‹ด์ด ์˜ค๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค์ด๊ธฐ ๋–„๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋  ๋งŒํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐ›๊ฒŒ ๋˜๊ณ , ๊ธฐ์กด์— ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด GC(Garbage Collector)์— ์˜ํ•ด ๋ฐ˜๋‚ฉ๋˜์–ด ๊ฐ€์šฉ ์ƒํƒœ์˜ ์˜์—ญ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ GC๋Š” ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ ๋˜์–ด์ง€๊ณ , ์‹œ์ ์ด ์ผ์ •ํ•˜์ง€ ์•Š์•„ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

์งง๊ฒŒ ๋‹ค๋ฃจ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์ด ๋ถ€๋ถ„์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋๋‚˜์ง€ ์•Š์•„ ๋‚ด์šฉ์ด ๊ธธ์–ด์กŒ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณ„๋„๋กœ ๋‹ค๋ค„๋ณด๊ธฐ๋กœ ํ•˜๊ณ , ์ด์ œ ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€์— ๋Œ€ํ•ด์„œ ๊ณ„์†ํ•ด์„œ ์•Œ์•„๋ณด์ž.

List

Case๋ฅผ ์‚ดํŽด๋ณธ ๋‚ด์šฉ ์ค‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๋•Œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋ฉด ์ข‹์„๊นŒ ?

๋ฐฉ๋ฒ•์€ ์‚ฌ์‹ค ๊ฐ„๋‹จํ•˜๋‹ค.
๋ฐ˜๋ณต๋ฌธ์˜ ์ธ๋ฑ์Šค๋ฅผ 0์œผ๋กœ ์‹œ์ž‘ํ•ด ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋กœ ์‹œ์ž‘ํ•ด ๊ฐ์†Œ์‹œ์ผœ ๋‚˜๊ฐ€๋ฉด์„œ ์—ญ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ด ๊ฐ€๋ฉด ์ „์ฒด ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ฆฌ์ŠคํŠธ์•ˆ์— 0~9๊นŒ์ง€ ์ˆซ์ž 10๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์ž.

๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ์ž‘์ด i=0์ด ์•„๋‹Œ i = length - 1 ๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

-1์€ ์™œ ํ•ด์ค˜์•ผ ํ• ๊นŒ ? ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค๋Š” 1์ด ์•„๋‹Œ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— -1์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด์ œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 10-1์ธ 9๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒ ๋˜๋Š” ์‹œ์ ๋„ 0๊นŒ์ง€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก -1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋˜๋„๋ก ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ i++๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์†Œ๋ฅผ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— i--๋กœ ๊ฐ์†Œ๋ฅผ ์‹œ์ผœ์ฃผ์ž.

void main() {
  List<int> numbers = List.generate(10, (i) => i);
  for (int i = numbers.length - 1; -1 < i; i--) {
    print(i);
  }
}

์ด์ œ ๋™์ผํ•œ ์กฐ๊ฑด์„ ์—ญ์ˆœ์œผ๋กœ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•œ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ๋„ฃ์–ด์„œ ์‹คํ–‰ํ•ด๋ณด์ž.

์ •์ƒ์ ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋‹ค.

void main() {
  List<int> numbers = List.generate(10, (i) => i);
  for (int i = numbers.length - 1; -1 < i; i--) {
    if (numbers[i] % 2 == 0) {
      numbers.removeAt(i);
    } else {
      numbers[i] = numbers[i] * 2;
    }
  }
  print(numbers);
  // [2, 6, 10, 14, 18]
}

๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต๋ฌธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•  ๋•Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฒˆ์—๋Š” ๋ฆฌ์ŠคํŠธ(List)์˜ ๊ธธ์ด๊ฐ€ ๊ฐ์†Œ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์ฆ๊ฐ€ ํ•  ๊ฒฝ์šฐ ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฐ˜๋ณต๋ฌธ์˜ ์‹คํ–‰ ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๊ตฌ์„ฑํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋กœ์ง ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๋ฐ˜๋ณต๋ฌธ์€ ์‹คํ–‰์‹œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ๊ณ„์† ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜๋„ ์žˆ์–ด์„œ ์ด ์ ์€ ๋ฐ˜๋“œ์‹œ ์ฃผ์˜ํ•˜์…”์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ์ • ๊ธธ์ด ์กฐ๊ฑด์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

void main() {
  List<int> numbers = List.generate(10, (i) => i);
  for (int i = 0; i < 10; i++) {
    if (numbers[i] % 2 == 0) {
      numbers.add(numbers[i] * 10);
    }
  }
  print(numbers);
  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 20, 40, 60, 80]
}

์‚ฌ์‹ค ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋ณต๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ, ๋ฐ˜๋ณต๋ฌธ ํŠน์„ฑ์ƒ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด์— ์˜์กด๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋กœ์ง ์ž์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

Unmodifiable

๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ์—๋„ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ๋‹ค.

๋ฐ”๋กœ ์œ„์—์„œ ์‚ดํŽด๋ณธ immutable ์„ฑ์งˆ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ(List)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์ด๋‹ค.

Flutter์—์„œ Code Generator๋ฅผ ์‚ฌ์šฉํ•œ ํŠน์ • ํŒจํ‚ค์ง€์—์„œ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋ฆฌ์ŠคํŠธ(List)์˜ ์„ฑ์งˆ์ด immutable(๋ถˆ๋ณ€)๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

๋ฆฌ์ŠคํŠธ(List)๋ฅผ immutable(๋ถˆ๋ณ€) ์„ฑ์งˆ์˜ ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑํ•ด ๋ณด๋„๋ก ํ•˜์ž.

์ด์ œ numbers ๋ฆฌ์ŠคํŠธ๋Š” ๋ณ€ํ•  ์ˆ˜ ์—†๋Š” ์„ฑ์งˆ์ด ๋˜์—ˆ๋‹ค.

void main() {
  List<int> numbers = UnmodifiableListView(<int>[0, 1, 2, 3, 4, 5]);
}

์ง„์งœ ๋ณ€ํ•  ์ˆ˜ ์—†๋Š”์ง€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด ๋ณด๋„๋ก ํ•˜์ž.

void main() {
  List<int> numbers = UnmodifiableListView(<int>[0, 1, 2, 3, 4, 5]);
  numbers[2] = 20;
  print(numbers);
}

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ํ•ด๋ณด๋ฉด ์•„๋ž˜ ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ์ด ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

"Unhandled exception:
Unsupported operation: Cannot modify an unmodifiable list"

๊ทธ๋ ‡๋‹ค๋ฉด immutable(๋ถˆ๋ณ€) ์„ฑ์งˆ์˜ ๋ฆฌ์ŠคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ• ๊นŒ ?

List.from์„ ์‚ฌ์šฉํ•ด numbers์— ์ƒˆ๋กœ์šด ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋„๋ก ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

void main() {
  List<int> numbers = UnmodifiableListView(<int>[0, 1, 2, 3, 4, 5]);
  numbers = List.from(numbers)
     ..removeAt(2)
     ..insert(2, 20);
  print(numbers);
  // [0, 1, 20, 3, 4, 5]
}

HashCode๋ฅผ ์ถœ๋ ฅํ•ด ๋ณด๋ฉด ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜์žˆ๋‹ค. ์ฆ‰ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น ๋ฐ›์•„ numbers์˜ ์ฃผ์†Œ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ฒ˜์Œ ํ• ๋‹น๋œ 431824049 ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ GC์˜ ๋Œ€์ƒ์ด ๋˜๊ณ  ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ๊ฐ€์šฉ ๋Œ€์ƒ์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด 652108807 ๊ณต๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ์€ 2๊ฐœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

void main() {
  List<int> numbers = UnmodifiableListView(<int>[0, 1, 2, 3, 4, 5]);
  print(numbers.hashCode);
  // 431824049

  numbers = List.from(numbers)
    ..removeAt(2)
    ..insert(2, 20);
  print(numbers.hashCode);
  // 652108807
}

์–ด์ฉ” ์ˆ˜ ์—†์ด immutable(๋ถˆ๋ณ€) ์„ฑ์งˆ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ตณ์ด ๋ถˆํŽธํ•˜๊ฒŒ immutable(๋ถˆ๋ณ€) ์„ฑ์งˆ์„ ์‚ฌ์šฉํ• ๊นŒ ? ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋ณธ์ธ์ด ๊ฐœ๋ฐœ ํ•˜๋ฉด์„œ ์ƒ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ ํƒ€์ž…์ด immutable์ธ์ง€, mutable์ธ์ง€๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด์„œ ๋‹ค๋ค„๋ณด๋ฉด ์ข‹์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋งˆ๋ฌด๋ฆฌ

๊ธ€์˜ ์ฃผ๋œ ๋‚ด์šฉ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ˜๋ณต๋ฌธ ์‹คํ–‰์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธ€์„ ์ž‘์„ฑํ•ด ๋ณด๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ์—ฐ๊ฒฐ๋œ ๋‚ด์šฉ์ด ๋‹ค์†Œ ์žˆ๊ธฐ๋„ ํ•˜๊ณ  ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ํ•  ๋•Œ์—๋Š” ๋‚˜์˜ค์ง€ ์•Š์„ ์ผ€์ด์Šค์ธ ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ๋‹ค๋ณด๋‹ˆ, immutable, mutable ๋“ฑ์˜ ์„ฑ์งˆ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ ๋‚ด์šฉ์ด ๋” ๋งŽ์•„์ง„ ๊ฒƒ ๊ฐ™๋‹ค.

๋‹ค์Œ ๋ฒˆ์—๋Š” immutable, mutable์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€๋กœ ์ž์„ธํžˆ ๋‹ค๋ค„ ๋ณผ ์˜ˆ์ •์ด๋‹ค. ์‚ฌ์‹ค ์ด ๊ธ€์—์„œ ๋‹ค๋ฃฌ ๋‚ด์šฉ์€ 10%๋„ ์•ˆ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€๋กœ ๋ฆฌ์ŠคํŠธ(List)์— ๋Œ€ํ•ด์„œ๋„ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๊ถ๊ธˆํ•˜์‹  ๋ถ€๋ถ„ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” !

profile
Flutter Developer

0๊ฐœ์˜ ๋Œ“๊ธ€