stl은 constructor로 생성되고, 생성이 되자마자 build 함수가 실행된다.
하나의 stl은 라이프사이클 동안 단 한번만 build 함수를 실행한다.
따라서! 변경이 필요하면 기존의 stl이 죽고 새로운 stl 위젯이 만들어진다.
stateless widget은 한번 build되면 state가 변하지 않으며 새로운 State를 적용하려면 rebuild해야한다. rebuild 비용은 저렴하다
반면에 stf는 여러번 build를 재실행해야한다.
(출처: 코드팩토리)
모든 위젯은 불변하는데 이는 stf도 마찬가지이다. 따라서 불변하는 좌측의 widget과 불변성에 영향을 받지 않은 state로 양분되어있다.
stf는 constructor가 생성되고 build가 실행되는 stl과 달리, createstate를 통해 state를 생성한다.
파라미터가 바뀌었을때는 기존의 stf가 죽고 새로운 stf 위젯이 생성되는 반면에 constructor도 생성되고 기존에 있었던! state를 찾아서 inistate를 생략한 위와 같은 형태로 life cycle을 돈다. 즉, state는 사라지지 않고 새로 형성된 stf에 붙음으로써 상태가 유지된다. hot reload 버튼을 누를때도 같은 동작이 이루어진다.
반면에 state는 setstate함수도 제공하는데 외부에서 넣어주는 파라미터와 달리 state내부에서 build를 재실행하는 방법이다.