Flutter앱 유지보수 1년 간 해보기 프로젝트 -8(트리 & 다트에서 late 타입)

박경현·2023년 11월 20일
0

최근에 계속 만들기만 하고 따로 블로그 정리를 안해서 이제 다시 매일 해보려고 한다.
7일 동안 매일 작성을 할건데 그 날 새로 안 내용 + 복습할 내용으로 구성할 거다!

플러터 트리

지금까지 플러터는 위젯트리로만 이루어진 줄 알았다!

하지만 플러터는 위젯트리, Element Tree, Render Tree로 이루어져 있다!
이렇게 3개의 트리로 나누는 목적은 바로 퍼포먼스 최적화를 위해서입니다

사실 오늘 주의깊에 살펴볼 트리는 바로 Element Tree여서 이 부분을 중점으로 적어보려고 한다

Widget Tree

위젯트리는 우리가 코드를 통해 구현한 트리를 의미합니다.
build가 실행되면 Widget 트리의 객체들이 사라지고 새로운 Widget Tree가 다시 생겨납니다.

Element Tree

Element Tree는 Widget tree의 객체들이 처음 생겨날때 한번 생겨난다 (앱이 start 될때! 등)
Element Tree는 Widget Tree의 위젯들과 1:1로 연결되며 widget들의 정보를 담고 있다

context

여기서 context를 잠깐 알고 넘어가야하는데, context는 위젯에 대한 meta정보나 위젯트리에서 위치를 나타낸다
Element Tree는 이 위젯에 대한 context로 구성됩니다.

Render Tree

실제로 그려진 화면에 대한 트리이고,
Element tree랑 연결되어 있으며 Widget Tree랑은 연결되어 있지 않다
플러터가 알아서 관리함 -> build를 다시해도 객체만 만들어질 뿐 화면을 다시 구성하는데 큰 영향을 안 준다

Dart에서 late 타입이란

class Coffee {
	late String _tem;
    
    void heat() {_tem = 'hot'; }
    void chill() {_tem = 'iced'; }
    String serve() => _tem! + 'coffee';
    
    int topLevel = 0;
}
class SomeClass {
	static int staticField = 0;
}

void main() {
	var coffee = Coffee();
    coffee.heat();
    priint(coffee.serve());
}

널은 안되지만 초기화를 늦게 하기 가능!
Dart는 non nullable변수 사용전에 초기화 해줘야함!

함수 내의 로컬변수는 flexible함 선언과 동시 초기화 필요없다!
차고로 생성자에 초기화 있으면 굳이 선언때 안해줘도 되긴함

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글