Flutter를 사용하다 보면 const 키워드를 자주 보게 될 텐데요. 특히 위젯을 정의할 때 많이 사용됩니다. 이번 글에서는 const 키워드가 무엇인지, 왜 사용하는지, 그리고 실생활에서 어떻게 활용되는지를 저같은 초보자도 이해하기 쉽게 설명하겠습니다.
const란 무엇인가요?
const는 'constant(상수)'의 약자로, 한 번 정의되면 변경되지 않는 값을 나타냅니다. Dart(Flutter의 프로그래밍 언어)에서는 const 키워드를 사용해 변하지 않는 객체를 정의할 수 있습니다.
쉽게 말하면, const는 "이 값은 절대로 바뀌지 않아!"라고 Dart에게 알려주는 것입니다.
const의 특징
- 컴파일 타임 상수
- const로 선언된 값은 컴파일 타임(앱이 빌드될 때)부터 고정됩니다.
- 앱 실행 중에는 이 값을 변경할 수 없습니다.
- 불변 객체
- const로 생성된 객체는 내부 데이터도 변경할 수 없습니다.
- Dart에서는 이 불변성을 활용해 메모리를 효율적으로 관리합니다.
- 위젯 트리 최적화
- Flutter에서 const 키워드를 사용하면 위젯 트리를 더 효율적으로 렌더링할 수 있습니다. 동일한 const 객체는 다시 생성하지 않고 재사용됩니다.
const와 final의 차이점
많은 초보자가 const와 final의 차이를 헷갈려 하는데요. 두 키워드는 모두 변하지 않는 값을 나타내지만, 중요한 차이점이 있습니다:
특징constfinal
특징 | const | final |
선언시점 | 컴파일 타임에 값이 고정 됨 | 런타임에 값이 고정 됨 |
값의 불변성 | 내부 데이터도 불변 | 참조만 불변(내부 데이터는 변경가능) |
사용 가능한 곳 | 위젯, 객체, 변수 등 다양한 곳에서 사용 가능 | 주로 변수에 사용됨 |
예를 들어:
const int a = 10; // 컴파일 타임에 값이 고정됨
final int b = DateTime.now().year; // 런타임에 값이 고정됨
const를 사용하는 이유
- 성능 최적화
- const 객체는 메모리를 재사용하므로 앱이 더 빠르고 효율적으로 실행됩니다.
- 가독성 향상
- "이 값은 변하지 않는다"는 의미를 명확히 하여 코드를 읽는 사람이 더 쉽게 이해할 수 있습니다.
- 버그 방지
- 변하지 않는 값을 명시적으로 정의하면 의도치 않은 수정으로 인한 버그를 예방할 수 있습니다.
실생활에서의 const 사용 예
1. Flutter 위젯에서 const
Flutter에서 const는 위젯 트리를 효율적으로 관리하기 위해 자주 사용됩니다. 예를 들어:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Hello, const!')),
body: const Center(
child: Text(
'이 텍스트는 변하지 않아요!',
style: TextStyle(fontSize: 24),
),
),
),
);
}
}
위 코드에서 const를 사용하면, Text와 TextStyle 객체는 앱 실행 중에 다시 생성되지 않고 메모리를 재사용합니다.
2. 리스트와 맵에서 const
const 키워드는 리스트나 맵을 불변으로 만들 때도 사용됩니다:
void main() {
const List<String> fruits = ['Apple', 'Banana', 'Orange'];
// fruits.add('Grape'); // 에러 발생! 리스트가 불변이기 때문
print(fruits);
}
const를 사용할 때 주의할 점
- const는 완전히 불변이어야 합니다.
- const로 선언된 객체는 내부 데이터도 절대 변경할 수 없습니다.
- 컴파일 타임에 값이 결정되어야 합니다.
- const는 실행 중 동적으로 계산되는 값을 사용할 수 없습니다.
- 적재적소에 사용해야 합니다.
- 모든 곳에 const를 사용하면 오히려 코드가 불필요하게 복잡해질 수 있습니다. 변하지 않는 값에만 사용하세요.
결론
const 키워드는 Flutter 앱 개발에서 성능과 코드 품질을 높이는 데 매우 유용한 도구입니다. 특히 불변 객체를 정의하거나 위젯 트리를 최적화할 때 큰 도움이 됩니다. 하지만 사용법과 제한 사항을 잘 이해하고 적절히 사용하는 것이 중요합니다.
'TIL' 카테고리의 다른 글
Flutter의 Stream에 대해서.. (1) | 2025.01.15 |
---|---|
Flutter의 Key는 무엇인가요? (0) | 2025.01.15 |
Dart의 Garbage Collector란? (0) | 2025.01.13 |
클래스 내에서 static 키워드 (0) | 2025.01.10 |
Flutter의 빌드 모드에는 무엇이 있는지 알아보자 (0) | 2025.01.10 |