전체 글
-
플러터 엘리먼트 트리의 상태 변화 관리와 Inherited WidgetComputer Science/Flutter 2021. 3. 2. 14:51
엘리먼트 트리의 상태 변화 관리 플러터는 위젯 트리를 만들고, 모든 위젯에 대해 엘리먼트 오브젝트를 만든다. 이 때 이 엘리먼트는 StatefulElement이며, 아래 그림처럼 state object를 관리한다. AuthorCard라는 stateful widget이 있고, Icon이라는 자식 위젯을 갖고 있다. 사용자가 Icon(하트 버튼)을 탭하면, setState가 실행되고 _isFavorited를 true로 토글한다. 내부적으로 state object는 이 엘리먼트를 dirty로 마크한다. 이는 build가 호출되게 한다. element object는 old widget을 제거하고 heart icon의 색이 채워진 새로운 아이콘으로 대체한다. 전체 트리를 재건축하기보다는, 플러터는 바뀌어야하는 위..
-
Stateless Widget과 Stateful WidgetComputer Science/Flutter 2021. 3. 2. 10:18
Stateless Widget과 Stateful Widget Stateless Widget은 불변 객체이다. 위젯이 한번 만들어지면 state나 프로퍼티를 바꿀 수 없다. 프로퍼티가 바뀔 필요 없을 때, stateless widget으로 만드는 것이 좋다. stateless widget의 lifecycle은 프로퍼티를 넘길 수 있는 constructor와, override하는 build 메소드로 시작한다. 위젯의 시각적 묘사는 build 메소드가 결정한다. 다음 이벤트는 stateless widget의 update를 일으킨다. - 위젯이 위젯트리에 삽입된다. - 의존성의 상태나 상속 받은 위젯(조상 노드)가 변한다. Stateful Widget은 상태를 보존한다. UI의 일부가 동적으로 변해야 할 때 유..
-
크루스칼 알고리즘 (Kruskal Algorithm) with Union-Find 알고리즘Computer Science/자료구조&알고리즘 2021. 2. 26. 18:26
크루스칼 알고리즘 (Kruskal Algorithm)이란, 그래프의 최소 비용 신장 트리(Minimal Spanning Tree : MST)를 구하는 그리디 알고리즘이다. 그리디 알고리즘으로써 최적의 해답을 얻을 수 있다는 사실이 증명되어 있다. 기본 과정은 다음과 같다. 1. 그래프의 간선들을 가중치 오름차순으로 정렬한다. 2. 첫번째 간선부터(즉, 가중치가 가장 낮은 간선부터) 선택한다. 3. 선택했을 때, 현재의 MST 집합에 사이클을 형성하는지 여부를 판단한다. 4. 사이클을 형성하면 배제하고, 그렇지 않으면 MST 집합에 추가한다. 이 때, 사이클 형성 여부는 Union-Find 알고리즘을 이용한다. Disjoint Set : 서로 중복되지 않는, 상호 배타적인 부분 집합들로 나눠진 원소들을 저..