๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Flutter

Flutter์—์„œ var์™€ final์˜ ๋ชจ๋“  ๊ฒƒ: ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๐Ÿš€

by alaxhenry 2025. 3. 25.
๋ฐ˜์‘ํ˜•
SMALL

์†Œ๊ฐœ ๐Ÿ‘‹

์•ˆ๋…•ํ•˜์„ธ์š”, Flutter ๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„! Flutter์—์„œ var์™€ final์˜ ์ง„์ •ํ•œ ์ฐจ์ด์ ์ด ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”? ์˜ค๋Š˜์€ ์ด ๊ธฐ๋ณธ์ ์ด์ง€๋งŒ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…๋“ค์„ ์‰ฝ๊ณ  ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋ถ€ํ„ฐ ๊ฒฝํ—˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊นŒ์ง€ ๋ชจ๋‘๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๋ช…ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ๐ŸŒฑ

var๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

var๋Š” ๋งˆ์น˜ ์ง€์šฐ๊ฐœ๋กœ ์ง€์› ๋‹ค ๋‹ค์‹œ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ™”์ดํŠธ๋ณด๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ’์„ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ฃ .

void main() {
  var ๋‚˜์ด = 25;
  print(๋‚˜์ด); // ์ถœ๋ ฅ: 25
  
  ๋‚˜์ด = 26;   // ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ!
  print(๋‚˜์ด); // ์ถœ๋ ฅ: 26
  
  var ์ด๋ฆ„ = "์ฒ ์ˆ˜";
  ์ด๋ฆ„ = "์˜ํฌ"; // ์ด๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!
}

final์€ ๋ฌด์—‡์ผ๊นŒ์š”?

final์€ ๋งˆ์น˜ ๋Œ์— ์ƒˆ๊ธฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ์˜์›ํžˆ ๊ทธ ๊ฐ’์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

void main() {
  final ๋‚˜์ด = 25;
  // ๋‚˜์ด = 26;  // ๐Ÿšซ ์—๋Ÿฌ! final ๋ณ€์ˆ˜๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
  
  final String ์ด๋ฆ„ = "์ฒ ์ˆ˜";
  // ์ด๋ฆ„ = "์˜ํฌ";  // ๐Ÿšซ ์—๋Ÿฌ! ์ด๊ฒƒ๋„ ์•ˆ๋ฉ๋‹ˆ๋‹ค
}

๋ฐ˜์ „: ์ปฌ๋ ‰์…˜์—์„œ์˜ final ๋™์ž‘ ๐Ÿ”„

์—ฌ๊ธฐ์„œ ์žฌ๋ฏธ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋‚˜์˜ต๋‹ˆ๋‹ค! final๋กœ ์„ ์–ธ๋œ ์ปฌ๋ ‰์…˜(List๋‚˜ Map)์€ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

List์™€ final

void main() {
  // final๋กœ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  final List<String> ์นœ๊ตฌ๋“ค = ['๋ฏผ์ˆ˜', '์˜ํฌ'];
  
  // โœ… ๋†€๋ž๊ฒŒ๋„ ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!
  ์นœ๊ตฌ๋“ค.add('์ฒ ์ˆ˜');          // ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  ์นœ๊ตฌ๋“ค[0] = '์ค€ํ˜ธ';         // ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  ์นœ๊ตฌ๋“ค.remove('์˜ํฌ');      // ์‚ญ์ œ ๊ฐ€๋Šฅ
  
  // โŒ ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์•ˆ๋ฉ๋‹ˆ๋‹ค
  // ์นœ๊ตฌ๋“ค = ['์ƒˆ๋กœ์šด', '๋ฆฌ์ŠคํŠธ']; // ์—๋Ÿฌ! ๋ฆฌ์ŠคํŠธ ์ž์ฒด๋ฅผ ์ƒˆ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
}

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด๋ณด์„ธ์š” ๐Ÿค”

final์„ ์ฃผ์ฐจ ๊ณต๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค:

  • ์ฃผ์ฐจ ๊ณต๊ฐ„(๋ณ€์ˆ˜)์˜ ์œ„์น˜๋Š” ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
  • ํ•˜์ง€๋งŒ ๊ทธ ์•ˆ์˜ ์ฐจ(๋‚ด์šฉ๋ฌผ)๋Š” ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • ์ฐจ๋ฅผ ์ˆ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒ‰์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฃผ์ฐจ ๊ณต๊ฐ„ ์ž์ฒด๋Š” ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์ง„์ •ํ•œ ๋ถˆ๋ณ€์„ฑ ๋งŒ๋“ค๊ธฐ ๐Ÿ”’

๋ฐฉ๋ฒ• 1: const ์‚ฌ์šฉํ•˜๊ธฐ

void main() {
  // ์ด ๋ฆฌ์ŠคํŠธ๋Š” ์ง„์งœ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
  final List<String> ๋ถˆ๋ณ€์นœ๊ตฌ๋“ค = const ['๋ฏผ์ˆ˜', '์˜ํฌ'];
  
  // โŒ ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ๋ชจ๋‘ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:
  // ๋ถˆ๋ณ€์นœ๊ตฌ๋“ค.add('์ฒ ์ˆ˜');    // ์—๋Ÿฌ!
  // ๋ถˆ๋ณ€์นœ๊ตฌ๋“ค[0] = '์ค€ํ˜ธ';    // ์—๋Ÿฌ!
  // ๋ถˆ๋ณ€์นœ๊ตฌ๋“ค.remove('์˜ํฌ'); // ์—๋Ÿฌ!
}

 

๋ฐฉ๋ฒ• 2: UnmodifiableListView ์‚ฌ์šฉํ•˜๊ธฐ

import 'dart:collection';

void main() {
  final ๊ธฐ๋ณธ๋ฆฌ์ŠคํŠธ = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜'];
  final ์ˆ˜์ •๋ถˆ๊ฐ€๋ฆฌ์ŠคํŠธ = UnmodifiableListView(๊ธฐ๋ณธ๋ฆฌ์ŠคํŠธ);
  
  // โŒ ์ด๊ฒƒ์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
  // ์ˆ˜์ •๋ถˆ๊ฐ€๋ฆฌ์ŠคํŠธ.add('์˜ค๋ Œ์ง€');  // ์—๋Ÿฌ!
}

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ ๐ŸŒ

์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์˜ˆ์‹œ

class ์‚ฌ์šฉ์žํ”„๋กœํ•„ {
  // ์ƒ์„ฑ ํ›„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค
  final String ์‚ฌ์šฉ์žID;
  final String ์ด๋ฉ”์ผ;
  
  // ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค
  var ๋งˆ์ง€๋ง‰๋กœ๊ทธ์ธ๋‚ ์งœ;
  var ํ”„๋กœํ•„์‚ฌ์ง„;
  
  // ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ
  final List<String> ์ทจ๋ฏธ๋“ค = [];
  
  // ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ
  final List<String> ๊ถŒํ•œ = const ['์‚ฌ์šฉ์ž'];
  
  ์‚ฌ์šฉ์žํ”„๋กœํ•„({
    required this.์‚ฌ์šฉ์žID,
    required this.์ด๋ฉ”์ผ,
  });
}

์‹ค๋ฌด ํ™œ์šฉ ๊ฐ€์ด๋“œ: ์–ธ์ œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ• ๊นŒ์š”? ๐ŸŽฏ

var๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

  • ๊ฐ’์„ ๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ
  • ํ•จ์ˆ˜ ๋‚ด ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•  ๋•Œ
  • ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ
void ์˜ˆ์‹œ() {
  var ์นด์šดํ„ฐ = 0;
  var ์ž„์‹œ๋ฐ์ดํ„ฐ = ๋ฐ์ดํ„ฐ๊ฐ€์ ธ์˜ค๊ธฐ();
  var ์‚ฌ์šฉ์ž์ž…๋ ฅ = ์‚ฌ์šฉ์ž์ž…๋ ฅ๋ฐ›๊ธฐ();
}

final์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

  • ์žฌํ• ๋‹น์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ํด๋ž˜์Šค ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ
  • ์„ค์ •๊ฐ’์„ ๋‹ค๋ฃฐ ๋•Œ
class ์„ค์ • {
  final String APIํ‚ค;
  final String ์„œ๋ฒ„์ฃผ์†Œ;
  final List<String> ํ—ˆ์šฉ๋œ์‚ฌ์šฉ์ž = [];  // ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ
}

const๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

  • ์ง„์ •ํ•œ ๋ถˆ๋ณ€์„ฑ์ด ํ•„์š”ํ• ๋•Œ
  • ์ƒ์ˆ˜๊ฐ’์„ ๋‹ค๋ฃฐ ๋•Œ
  • ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ปฌ๋ ‰์…˜์ด ํ•„์š”ํ•  ๋•Œ
class ์ƒ์ˆ˜ {
  static const List<String> ์ง€์›์–ธ์–ด = const ['ko', 'en', 'ja'];
  static const double ๋ถ€๊ฐ€์„ธ์œจ = 0.1;
}

ํ”„๋กœ ํŒ ๐Ÿ’ก

  1. ๊ธฐ๋ณธ์ ์œผ๋กœ final ์‚ฌ์šฉํ•˜๊ธฐ
  • ๋ชจ๋“  ๊ฒƒ์„ final๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”
  • ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ var๋กœ ๋ฐ”๊พธ์„ธ์š”
  1. ์ปฌ๋ ‰์…˜ ์•ˆ์ „์„ฑ
  • ์ง„์ •ํ•œ ๋ถˆ๋ณ€์„ฑ์ด ํ•„์š”ํ•˜๋ฉด const ์‚ฌ์šฉ
  • ๋Ÿฐํƒ€์ž„ ๋ถˆ๋ณ€์„ฑ์ด ํ•„์š”ํ•˜๋ฉด UnmodifiableListView ์‚ฌ์šฉ
  1. ์„ฑ๋Šฅ ๊ณ ๋ ค์‚ฌํ•ญ
  • final์€ ๋ฒ„๊ทธ ๋ฐฉ์ง€์— ๋„์›€
  • const๋Š” ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€

์ž์ฃผ ํ•˜๋Š”  ์‹ค์ˆ˜๋“ค โš 

class ์ผ๋ฐ˜์ ์ธ์‹ค์ˆ˜ {
  // โŒ ๋‚˜์จ: ์ƒ์ˆ˜์— var ์‚ฌ์šฉ
  var APIํ‚ค = "my-api-key";
  
  // โœ… ์ข‹์Œ: ์ƒ์ˆ˜์— final ์‚ฌ์šฉ
  final String APIํ‚ค = "my-api-key";
  
  // โŒ ๋‚˜์จ: final์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ์ฐฉ๊ฐ
  final List<int> ์ ์ˆ˜๋“ค = [1, 2, 3];
  
  // โœ… ์ข‹์Œ: ์ง„์ •ํ•œ ๋ถˆ๋ณ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ„ํ•ด const ์‚ฌ์šฉ
  final List<int> ์ ์ˆ˜๋“ค = const [1, 2, 3];
}

๊ฒฐ๋ก  ๐ŸŽ‰

Flutter์—์„œ var์™€ final์˜ ์ฐจ์ด(๊ทธ๋ฆฌ๊ณ  ์ปฌ๋ ‰์…˜์—์„œ์˜ ๋™์ž‘)๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•˜์„ธ์š”:

  • ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ๋Š” var ์‚ฌ์šฉ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” final ์‚ฌ์šฉ
  • ์ง„์ •ํ•œ ๋ถˆ๋ณ€์„ฑ์ด ํ•„์š”ํ•  ๋•Œ๋Š” const ์‚ฌ์šฉ
  • ์ปฌ๋ ‰์…˜ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•˜๊ธฐ!

๋น ๋ฅธ ์ฐธ์กฐ ๊ฐ€์ด๋“œ ๐Ÿ“

// ๋ณ€์ˆ˜ ์„ ์–ธ ์น˜ํŠธ ์‹œํŠธ
var ๋ณ€๊ฒฝ๊ฐ€๋Šฅ = "๋‚˜๋Š” ๋ณ€ํ•  ์ˆ˜ ์žˆ์–ด์š”";        // ๊ฐ€๋ณ€
final ๋ถˆ๋ณ€ = "๋‚˜๋Š” ๋ณ€ํ•  ์ˆ˜ ์—†์–ด์š”";         // ๋ถˆ๋ณ€ ์ฐธ์กฐ
const ์ƒ์ˆ˜ = "๋‚˜๋Š” ์ง„์ •ํ•œ ์ƒ์ˆ˜์˜ˆ์š”";        // ์ปดํŒŒ์ผ ํƒ€์ž„ ์ƒ์ˆ˜

// ์ปฌ๋ ‰์…˜ ์˜ˆ์‹œ
final List<String> ๊ฐ€๋ณ€๋ฆฌ์ŠคํŠธ = [];         // ๋‚ด์šฉ ์ˆ˜์ • ๊ฐ€๋Šฅ
final List<String> ๋ถˆ๋ณ€๋ฆฌ์ŠคํŠธ = const [];   // ๋‚ด์šฉ ์ˆ˜์ • ๋ถˆ๊ฐ€

 

Happy Hacking ๐Ÿš€๐Ÿ™ˆ 

๋ฐ˜์‘ํ˜•
LIST