⭐️ 개발/플러터

[이론] const Constructor

짱구러버 2022. 12. 6. 21:28
728x90

들어가기 앞서...

아주 간단한 실습으로 const 에 대해서 알아볼 예정이다.


본문으로...

1.  기본적으로 세팅!

간단하게 버튼 하나 만들었다. 

build 라는 버튼을 클릭하면 TestWidget() 의 print 함수 가 const 의 유무에 따라 어떻게 찍히는 지 확인 해보자!

void main() {
  runApp(
    MaterialApp(
      home: ConstructorPage(),
    )
  );
}

import 'package:flutter/material.dart';

class ConstructorPage extends StatefulWidget {
  const ConstructorPage({Key? key}) : super(key: key);

  @override
  State<ConstructorPage> createState() => _ConstructorPageState();
}

class _ConstructorPageState extends State<ConstructorPage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: MediaQuery.of(context).size.width,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          TestWidget(label: 'test1'),
          TestWidget(label: 'test2'),
          ElevatedButton(onPressed: (){
            setState(() {

            });
          }, child: Text('빌드 !')),
        ],
      ),
    );
  }
}

class TestWidget extends StatelessWidget {
  const TestWidget({Key? key, required this.label}) : super(key: key);

  final String label;

  @override
  Widget build(BuildContext context) {
    print('$label build 실행!');
    return Container();
  }
}

 

Hot Restart 했을때도, 빌드 버튼을 눌렀을때도 ! TestWidget 이 출력이 되는 것을 볼 수있다.

옆의 결과는 빌드 버튼 클릭했을때의 터미널만 가져온것이다.(실제는 4개 출력 되어있음.)

 

그런데 여기서 const 를 써준다면 어떻게 될까?

const 는 어떨때 쓰이나 ? 

빌드타임에 어떤것이 들어가는 지 명확하게 알때이다. 변하지 않는값일때 작성하는것이다.

children: [
	const TestWidget(label: 'test1'),
    TestWidget(label: 'test2'),
]

원래는 앱이 첫실행할때는 위의 두개의 빌드가 실행이 되고, 달라진점이 클릭하면 const 가 없는 TestWidget 만 출력이된다. 

const 로 인스턴스화 해놓으면은 앱을 실행하는동안 단한번만 그려놓으면 다음에 다시 그릴때 기억을 해두었다가 가져오게된다.

이 점에서 매우 좋은 효율적이다. 

 

build 함수를 계속 실행하게 되는데, 우리가 const 로 선언을해두고 기억을 해두었다면 다시 호출할때 리소스 낭비할 필요없어지게 된다!


끝으로...

  1. 노란색을 밑줄이 뜨는 이유는 const 를 작성해달라는 것이다.
  2. const 를 작성하면, build 가 재실행 시 기억을 해서 재호출을 하지 않아 랜더링이 빨라진다.

 

 

 

 

 

 

 

 

728x90