[Dart Programming] final과 const의 차이점

상수를 표현하는 두가지 방법

2020/12/08

final과 const는 모두 상수(constant)를 선언할 때 사용되는 키워드입니다. Dart에서는 final과 const를 통해 선언된 변수는 수정이 불가능하도록 막아줍니다.

const는 compile 단계에서 값이 정해지는 상수입니다. 그렇기 때문에 매번 값이 바뀌는 random이나 DateTime.now()와 같이 멱등이 보장되지 않는 값들은 const로 선언할 수 없습니다.

const를 사용한 방식

// lib/main.dart
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    const wordPair = WordPair.random();
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(
          child: Text(wordPair.asPascalCase),
        ),
      ),
    );
  }
}

const 사용시 나타나는 에러

lib/main.dart:9:31: Error: Cannot invoke a non-'const' factory where a const expression is expected.
Try using a constructor or factory that is 'const'.
    const wordPair = WordPair.random();
                              ^^^^^^

final를 사용한 방식

// lib/main.dart
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    final wordPair = WordPair.random();
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(
          child: Text(wordPair.asPascalCase),
        ),
      ),
    );
  }
}

결과

출처