반응형

fial과 const의 기본 개념은 한번 선언된 값을 변경되지 못하게 해달라는 의미를 가진다. 

  //일반적으로 우리가 사용할땐, 문자열 변수를 선언 후
  String name = '이름';
  
  //이렇게 값을 변경(재할당)하여 사용할 수 있다.
  name = '이름2';

 

  //하지만 선언 후, 할당한 값을 변경하지 못하게 하고 싶을 떈, 앞에 final을 붙여서 사용한다.
  final String name = '이름';
  
  //const도 마찬가지로 값을 변경하지 못하는 final과 같은 의미를 가진다.
  const String name = '이름';

 

그런데 여기서 둘다 값을 변경하지 못하지만 어떤 차이가 있는지가 중요하다.

const의 경우 컴파일타임에 저장된다는 점과, final은 런타임에 지정된다는 점이 차이가 있다.

프로그래밍 언어가 기계어로 번역되어 실행되는 과정을 컴파일이라 하고, 이 과정을 컴파일 타임이라한다.

이 컴파일된 프로그램이 실행되는 과정이 런타임이라 한다. 

 

무슨 의미인지는 아래 예제를 보면서 확인해 보자.

  //실행한 결과값을 보면, 첫번째 라인의 값과 두번쨰 라인의 값이 1초정도 차이가 나는것을 확인할 수 있다.
  //const는 첫번째 print의 값이고, final은 두번째 print의 값으로 예제를 들수 있는데,
  //프로그램이 만들어 지기 전 컴파일되는 과정에서 값이 지정되어 버리는것은 첫번째 print. 즉 const이며
  //컴파일 완료 후, 프로그램이 만들어진 후 실행되자마자 값이 지정되는 것이 두번쨰 print. 즉 final이다.
  DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

실제 final과 const를 넣어서 예제를 다시 살펴보자.

  //첫번째 print와 두번째 print의 값이 위 예제와 동일하게 1초간의 딜레이가 발생한것을 확인할 수 있다.
  //이는 당연히 컴파일이 완료된 후, 런타임(프로그램 시작!)시에 값이 할당되어 출력되기 때문이다.
  final DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      final DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

반대로 const로 변경하면, 라인 오류가 발생한다. 

컴파일시에 DateTime.now()를 컴퓨터가 알수 없기 때문이다.

그래서 const 사용시엔 값을 반드시 지정해주어야 한다. 

  const DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      const DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

보통은 코딩시엔 final을 많이 사용한다.

final과 const에 대해 이런 차이가 있다 정도만 알고있으면 된다. 

 

오늘 스터디 끝.

반응형

+ Recent posts