[Flutter] final, const, static

Angela Jeong·2024년 5월 1일

Final

  • 변수가 한 번 할당된 후 변경되지 않도록 보장한다.
  • final 변수는 런타임에 값을 할당받을 수 있으며, 그 값은 객체가 생성될 때 초기화된다.
    즉, 실행 시점까지 변수의 실제 값이 무엇인지 결정되지 않는데 현재 시간 계산, 사용자 입력이나 계산에 의해 변수 값이 결정되는 경우다.


Const

  • const는 컴파일 시점에 상수로 결정되며, 프로그램의 실행 동안 절대 변경될 수 없다.
  • 즉 프로그래밍 실행 전에 이미 값이 고정된 상태라고 보면 된다.
  • 프로그램 실행 때마다 값이 변할 필요 없는 경우 최적화를 위해 사용한다.
  • 컴파일 타임에 값이 고정되기 때문에 프로그램의 어느 곳에서도 변경될 수 없다.
  • 예를 들어 앱 전체에서 반복적으로 사용되는 TextStyle을 const로 정의하여 메모리 사용을 최소화하고 렌더링 성능을 향상시킬 수 있다.
 const TextStyle defaultStyle = TextStyle(
       fontSize: 18, 
       fontWeight: FontWeight.bold, 
       color: Colors.black);

Static

  • final, const와 달리 static이 붙은 변수나 함수는 클래스 객체를 생성하지 않고도 사용할 수 있다.
  • static 키워드를 사용하면 해당 변수나 메소드가 클래스의 모든 인스턴스(객체)에 의해 공유되고 접근될 수 있는데 특정 인스턴스에 속하지 않는다.
  • 이렇게 하면, 클래스의 어떤 인스턴스도 생성하지 않고도 해당 변수나 메소드에 접근할 수 있으며, 생성된 모든 인스턴스에서 이를 공동으로 사용할 수 있다.
  • static 변수는 런타임에 초기화될 수 있으며, 프로그램 실행 동안 변경될 수 있다.
  • 공통으로 사용되는 데이터베이스 접속 정보 같은 설정을 클래스 레벨에서 공유하는 데 사용할 수 있다.
 class DatabaseConfig {
  static String databaseURL = 'https://api.example.com/data';
  static final int timeout = 5000;
}

언제 어떤 키워드를 사용하는 것이 적합할까?

final, const: 불변성을 보장하기 위해 사용 → 불변의 상수 관리에 적합
static: 클래스 레벨의 자원을 정의하고 공유하기 위해 사용 → 공유되는 자원 관리에 적합


한번 더 정리하자면!

final: 불변성. 한번 초기화되면 그 이후로 값을 변경될 수 없도록 한다.
const: 컴파일 타임 상수. 컴파일 시간에 상수로 결정되며 실행 중에 절대 변경될 수 없다.
static: 클래스 레벨에서 변수나 메소드를 정의하여 모든 인스턴스에서 공유되므로 객체 생성 없이 접근이 가능하다.

0개의 댓글