왜 자꾸 const로 선언하라는거야

순순·2024년 6월 19일

Flutter

목록 보기
3/16

플러터로 앱을 개발하다 보면, 안드로이드 스튜디오에서 위젯 앞에 const를 붙이라는 제안을 종종 받을 수 있다. 자꾸 뜨는 노란 밑줄이 왜 강조되는지, 그 이유와 함께 const와 static const의 활용법을 알아보았다.

dart 공식문서 참조
https://dart-ko.dev/language/variables

const ?

  • Dart에서 const는 불변성을 가진 객체를 선언할 때 사용된다.
  • 즉, 컴파일 타임에 상수로 평가되는 값을 갖는 객체를 만드는 것이다.

"컴파일 타임 상수인 변수를 생성할 때 const를 사용하세요. 클래스 레벨의 상수 변수라면 static const로 선언하세요." (공식 문서 참조)

const의 역할

const로 선언된 객체는 컴파일 타임에 상수로 평가되며, 프로그램 실행 중 동일한 값을 가지는 다른 const 객체들이 동일한 인스턴스를 참조하게 된다. 이를 통해 메모리를 절약하고 성능을 향상시킬 수 있다.

메모리 절약의 원리

예를 들어, 다음과 같은 코드가 있다고 가정해보자. 이 코드에서 myConstWidget과 anotherConstWidget는 동일한 'Hello'라는 텍스트를 가지므로, 두 객체는 메모리 상에서 같은 인스턴스를 공유한다.

const myConstWidget = Text('Hello');
const anotherConstWidget = Text('Hello');

const 객체는 메모리 절약을 위해 동일한 내용을 가진 객체를 하나의 인스턴스로 공유하는 특징이 있다. 같은 파일 내에서 여러 번 호출해도 동일한 const 객체는 최초 선언 시 생성된 인스턴스를 계속 재사용한다.

Widget build(BuildContext context) {
  return Column(
    children: [
      myConstWidget,
      anotherConstWidget,
      const Text('Hello'), // 동일한 객체 참조
    ],
  );
}

따라서 위의 예제에서 세 개의 Text('Hello') 위젯은 모두 동일한 인스턴스를 참조하게 된다.

이 때문에 동일한 값을 가지는 객체가 여러번 사용 될 때, 메모리 사용이 최적화 되어 성능이 향상된다는 것.

static const ?

공식 문서에도 나와있듯이, 클래스 레벨에서 상수 값을 설정할 때는 const와 함께 static을 사용한다. static const는 클래스에 종속된, 불변하는 상수값을 설정할 때 사용된다. 일반적으로 애플리케이션 내에서 반복해서 사용되는 상수값을 클래스의 정적 변수로 선언할 때 유용하다.

class AppColors {
  static const primaryColor = Color(0xFF000000);
  static const secondaryColor = Color(0xFFFFFFFF);
}

위 코드에서 primaryColor와 secondaryColor는 여러 위치에서 동일하게 사용될 수 있으며, 메모리 효율성을 제공한다.

const와 static const의 차이

  • const: 인스턴스 레벨에서 사용되며, 개별 객체에서 불변성을 보장.
  • static const: 클래스 레벨에서 사용되며, 모든 인스턴스에서 동일한 불변 데이터를 공유.

메모리 효율성: 동일한 값을 가진 객체가 하나의 인스턴스를 공유하여 메모리 사용을 줄인다.
성능 향상: 불변 객체를 재사용함으로써 객체 생성 비용을 줄인다.
코드 안정성: 불변 객체를 사용해 예측 가능한 동작을 보장.

결론

const는 동일한 값을 가지는 객체가 여러 번 사용될 때 메모리를 절약하고, 코드의 일관성을 높인다.

따라서 const와 static const를 적절히 활용하면 메모리 절약과 성능 최적화를 동시에 이룰 수 있다. 특히 반복해서 사용되는 상수값을 클래스의 static const로 선언하면, 코드의 안정성과 효율성이 향상된다.

profile
플러터와 안드로이드를 공부합니다

0개의 댓글