Dart 언어 오답노트 : 18. const 생성자

샤워실의 바보·2023년 10월 25일
0
post-thumbnail

const 키워드란?

Dart에서 const 키워드는 컴파일 시점에 값이 결정되고 프로그램 실행 도중에는 절대 변경되지 않는 상수를 만들 때 사용됩니다.

const 생성자

클래스 내부에서 const 생성자를 사용하면, 인스턴스를 생성할 때 const 키워드를 사용하여 상수 인스턴스를 만들 수 있습니다. 이렇게 생성된 상수 인스턴스는 모든 프로퍼티가 불변이 되며, 동일한 인자로 생성된 인스턴스는 모두 같은 메모리 주소를 가리키게 됩니다.

예제 코드 분석

class Idol {
  final String name;
  final List<String> members;

  const Idol(this.name, this.members);
}

위 코드에서 Idol 클래스는 namemembers라는 두 개의 프로퍼티를 가지고 있습니다. 이 클래스에는 const 생성자가 정의되어 있어, Idol 인스턴스를 상수로 만들 수 있습니다.

void main() {
  Idol idol1 = const Idol('BTS', ['정국', '뷔']);
  Idol idol2 = const Idol('BTS', ['정국', '뷔']);
  print(idol1 == idol2);
}

main 함수에서는 idol1idol2 두 개의 Idol 인스턴스를 만듭니다. 두 인스턴스는 모두 동일한 인자로 const 생성자를 통해 생성됩니다. 그런데 위의 코드처럼 인자가 동일할 때, idol1idol2는 같은 메모리 주소를 가리키게 되며 동일한 인스턴스가 됩니다. 따라서 idol1 == idol2true를 반환합니다.

void main() {
  Idol idol1 = const Idol('BTS', ['정국', '뷔']);
  Idol idol2 = const Idol('BTS', ['정국', 'RM']);
  print(idol1 == idol2);
}

만약 Idol idol2 = const Idol('BTS', ['정국', 'RM']);이 되어 인자가 동일하지 않을 때, idol1idol2는 다른 메모리 주소를 가리키게 되면서 2개의 인스턴스가 되고, idol1 == idol2false를 반환합니다.

불변성에 대한 주의

상수 인스턴스의 프로퍼티는 변경할 수 없습니다. 하지만 프로퍼티가 객체를 참조하는 경우, 참조된 객체 내부의 값은 변경 가능할 수 있습니다. 예를 들어, members 리스트는 Idol 인스턴스가 불변이라 하더라도 리스트 내부의 값을 변경할 수 있습니다.

결론

const 키워드와 const 생성자를 사용하면, 불변의 상수 인스턴스를 만들 수 있으며, 이는 메모리 효율성을 높이고 버그를 방지하는 데 도움이 될 수 있습니다. 하지만 참조된 객체의 불변성을 항상 주의 깊게 고려해야 합니다.

profile
공부하는 개발자

0개의 댓글