본문 바로가기

✏️/Flutter

[dart] 헷갈리는 상수 친구들 알아보기 - const / final

728x90

플러터 개발 하다보면, 예제에 가끔 상수처리 한 것을 종종 볼 수 있다.

그러면, const와 final 키워드의 차이가 무엇이며 각각 언제 사용해야할까?

 

https://dart.dev/guides/language/language-tour#final-and-const 

 

A tour of the Dart language

A tour of all the major Dart language features.

dart.dev

 

들어가기에 앞서, const와 final에 대해서 알아보자

final 

- 컴파일 이후 런타임에 코드가 실행될 때마다 정의
// e.x. final a = b; 

 

const

- 컴파일 타임에서 계산할 수 있는 데이터 (런타임에 계산 해야하는 항목은 불가)
// e.x. const a = [];
- app lifecycle에서 값이 변하지 않는 값을 처리 할 때
- const 변수가 클래스 수준에 있는 경우, static const 로 표시
- 구성요소들 모두 상수, 요소들 내 프로퍼티도 반드시 전부 상수
- 상수 값을 생성하고, 생성자를 선언하는데 사용 할 수 있음
// e.x. 

var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

- const 키워드 사용 시 주의사항 (중복 사용 하지 말 것)

-  위젯 사용 시 const > 위젯의 필드를 바꾸지 않겠다 // Padding이나 size처럼 수치에 대한 값을 다룰 때 씀

Padding(
	padding: const EdgeInsets.all(10.0),
);

 

 

👀

const와 final에 대해서 알아보았으니, 코드 단에서 그 둘의 차이를 확실히 확인해보자!


e.x.) Member class // json serialize 할 때 자주 확인 할 수 있을 것이다.

class Member {

 const Member({
    this.id,
    this.name,
  });
 
 final int id;
 final String name;
}

- id, name와 같은 프로퍼티는 생성자를 통해 설정된 이후 바뀌는 경우가 없기 때문에, final로 처리해준다.
- 생성된 Member 클래스 인스턴스들은 값이 절대 변하지 않기 때문에 const 키워드를 사용한다.
- const Member는 당연히 프로퍼티 값도 상수여야 한다.