Dart 'var, final, const' , 'super, key'

이건선·2023년 7월 13일
0

Flutter

목록 보기
2/30

'var, final, const'

  1. var: var 키워드는 변수의 타입을 명시하지 않을 때 사용합니다. 컴파일러가 할당된 값에 따라 타입을 추론합니다. var로 선언된 변수는 다른 값으로 변경이 가능합니다.

    예를 들어:

    예제 1
    
    var name = 'John';
    print(name);  // John이 출력됩니다.
    
    name = 'David';
    print(name);  // David가 출력됩니다. 변수값을 변경할 수 있습니다.
    예제 2
    
    var name = 'Dart'; // String 타입
    name = 'Flutter';  // 여전히 String 타입
    // name = 123;     // Error! name 변수는 String 타입으로 이미 결정되었습니다.
    
    var year = 2023;  // int 타입
    year = 2024;      // 여전히 int 타입
    // year = '2024'; // Error! year 변수는 int 타입으로 이미 결정되었습니다.
    
  2. final: final 키워드는 한 번 할당되면 값이 변경되지 않는 변수를 선언할 때 사용합니다. 즉, final로 선언된 변수는 상수입니다만, 컴파일 시점에 값이 무엇인지 알 필요는 없습니다.

    예를 들어:

    final timeNow = DateTime.now();
    print(timeNow);  // 현재 시간을 출력합니다.
    
    // 이후에 timeNow 변수에 다른 값을 할당하려고 하면 컴파일 에러가 발생합니다.
    // timeNow = DateTime.now();  // 에러 발생!
  3. const: const 키워드도 final과 같이 한 번 할당되면 값이 변경되지 않는 상수를 선언하는데 사용되지만, const는 컴파일 시점에 값이 결정되어야 합니다. 즉, 변경할 수 없는 리터럴 값이거나, 다른 const 변수의 연산으로 값이 결정되어야 합니다.

    예를 들어:

    const pi = 3.14159;
    print(pi);  // 3.14159를 출력합니다.
    
    // pi 변수에 다른 값을 할당하려고 하면 컴파일 에러가 발생합니다.
    // pi = 3.14;  // 에러 발생!

'super'와 'key'

'super'는 Dart 언어에서 부모 클래스에 대한 참조를 나타내는 키워드입니다. 'super'를 사용하면 부모 클래스의 메서드를 호출할 수 있습니다.

예제

class Parent {
  Parent(String message) {
    print(message);
  }
}

class Child extends Parent {
  Child(String message1, String message2) : super(message1) {
    print(message2);
  }
}

void main() {
  Child('Hello from parent!', 'Hello from child!');
}

이 코드를 실행하면, 우선 Parent 클래스의 생성자가 호출되어 "Hello from parent!"가 출력되고, 그 다음으로 Child 클래스의 생성자가 실행되어 "Hello from child!"가 출력됩니다. 여기서 Child 클래스의 생성자에서 super(message1)을 사용하여 부모 클래스인 Parent의 생성자를 호출하였습니다.

super를 사용하는 주된 이유는 부모 클래스의 로직을 재사용하거나 확장하기 위함입니다. 이를 통해 중복 코드를 줄이고 코드의 유지 보수성을 높일 수 있습니다.

Flutter에서는 Widget 클래스가 key를 파라미터로 받는 생성자를 가지고 있으며, 이 key는 위젯을 고유하게 식별하는 데 사용됩니다. 따라서 StatelessWidget이나 StatefulWidget 같은 위젯 클래스를 정의할 때는 super(key: key)를 호출하여 부모 클래스인 Widget의 생성자에 key를 전달하는 것이 일반적입니다. 이를 통해 Flutter 프레임워크가 위젯을 올바르게 관리할 수 있게 됩니다.

profile
멋지게 기록하자

0개의 댓글