ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flutter: constant, final
    공부 기록/Flutter 2021. 12. 3. 00:23
    728x90

    코딩쉐프 님의 조금 매운맛 강좌 6 정리:

    변수는 mutable하다. 

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

    Final and const

    If you never intend to change a variable, use final or const, either instead of var or in addition to a type. A final variable can be set only once; a const variable is a compile-time constant. (Const variables are implicitly final.)

    > final 변수는 오직 한번만 설정할 수있다. const 변수는 컴파일 시간에 상수가 된다. 

    final, const와 같은 키워드를 modifier라고 함. 

    접근제어자

    final, const 변수의 값을 변경하면 에러 발생 -> 선언한 후 변경할 수 없음 -> immutable.

    그럼 이 final, const의 차이는 무엇일까?

    final
    초기화하는 방법
    1) 변수 선언시 초기화(위의 이미지)
    2) 객체 선언시 외부데이터를 받아 생성자를 통해 초기화 (아래 이미지): Person 클래스 안에서 age, name 변수를 선언하고, Person(this.age, this.name);이라는 생성자를 만듬. 메인함수에서 p1이라는 객체를 생성하면서 생성자를 통해 age라는 final 변수에 21을 할당해서 초기화 

    어떻게 초기화하든지간에 final 변수는 immutable 하기에 다른 값으로 변경될 수 없다. 단, 초기화되는 시점이 앱이 실행되는 순간이다. 따라서 final 변수를 run-time constant라고 부름. (예:

    한번 초기화되면 변할 수 없기 떄문에 value값을 변경하려면 새롭게 리빌드해야함.

    ( 변경되는 요소를 build method로 리빌드하는 stateless widget처럼)

    아래 예제는 await 키워드로 인하여 앱이 실행된 후 해당 웹의 데이터가 전송될 때까지 기다렸다가 값이 저장되므로, response의 변수는 컴파일 시가 아닌 앱이 실행될 때 초기화되도록 'final' 키워드를 붙여 run time constant로 지정해준 것이다. 

     

     

    const

    : 컴파일 시에 상수가 됨.  (compile-time constant)

    대표 예제: 현재 시간을 알려주는 DateTime.now 를 사용할 때. -> 이 메소드에 const를 선언하면 에러가 발생. 현재시간은 호출될 때마다 값이 변경되야하므로 런타임 시 지정이 되어야함. -> final로 변경 필요

     

    컴파일 시 할당된 변수가 런타임시에도 변하지 않고 사용될 때 키워드 const 변수 사용하기 (예: const pi = 3.14;) -> 프로그램 어디에서 사용되더라도 값이 변경되지 않아야 하므로 컴파일 시부터 상수화하는 것임  

     

    정리:

    3. 컴파일 시 생성된 변수는 런타임 시에도 변하지 않고 유지된다는 의미. 

     

     


    또다른 설명 (출처: https://www.youtube.com/watch?v=AJ6jXAjCU9E) 

    코드를 작성해서 compile하면 해당 코드가 기계가 이해할 수 있는 기계어로 변환됨(compile time이라고 함). 이 때. 디바이에서 실행할 수 있는 패키지가 형성됨.  -> const는 이 때 생성됨. const는 global variable로 존재함. Collection, List안에 있는 안에 존재하는 값들도 const

    디바이스에 설치하고 실행되는 시간을 runtime이라고 함. -> final는 이 때 생성됨. Collection, List안에 있는 안에 존재하는 값들은 변경 가능함. 

    API를 통해 값을 가져와 사용하는 경우에는 final 사용하기!

    댓글

Designed by Tistory.