initState 메서드는 위젯이 화면에 렌더링되기 전, 즉 위젯이 위젯 트리에 삽입된 직후에 실행됩니다. 이 단계는 위젯의 생명주기에서 한 번만 호출되며, 위젯이 생성될 때 초기 상태를 설정하는 데 사용됩니다.
initState는 다음과 같은 목적으로 사용됩니다:
initState는 build 메서드가 처음 호출되기 전에 실행되기 때문에, 이 시점에서는 아직 위젯이 화면에 그려지지 않았습니다. 그렇기 때문에 이 메서드 내에서는 위젯의 레이아웃이나 다른 화면 요소에 접근하는 것이 불가능합니다.
initState에서 설정된 초기 상태는 이후 build 메서드 호출 시 사용되며, build 메서드는 위젯이 화면에 그려질 UI를 구성하는 데 사용됩니다.
initState 메서드에서 많은 시간을 필요로 하는 작업을 수행하는 경우, 실제로는 좋은 접근 방법이 아닙니다. initState는 동기적으로 실행되므로, 여기서 시간이 많이 소요되는 작업을 수행하면 위젯의 렌더링이 차단될 수 있습니다. 즉, 해당 작업이 완료될 때까지 화면에 위젯이 나타나지 않을 수 있습니다.
Flutter에서는 다음과 같은 방법으로 이 문제를 해결할 수 있습니다:
initState에서 직접 시간이 많이 소요되는 작업을 시작하지 말고, 대신 Future.delayed와 같은 비동기 함수를 사용하여 작업을 시작합니다. 이렇게 하면 initState는 즉시 완료되고, 비동기 작업은 별도로 진행됩니다.initState에서는 가장 필수적인 부분만 수행하고, 나머지는 나중에 또는 다른 메서드에서 수행하는 방식을 고려할 수 있습니다.initState에서 시간이 많이 소요되는 작업을 피하는 것은 애플리케이션의 반응성과 사용자 경험을 유지하는 데 중요합니다. 따라서, 이러한 작업은 가능한 한 비동기적으로 처리하는 것이 바람직합니다.
initState() 내에서 super.initState()initState() 메서드에서 super.initState()는 항상 메서드의 시작 부분에서 호출해야 합니다.super.initState() 호출은 상위 클래스의 초기화 로직을 실행합니다. 이것을 가장 먼저 호출함으로써, 상위 클래스에서 설정된 초기화가 완료된 후에 하위 클래스(즉, 당신의 위젯 클래스)의 초기화 로직을 실행할 수 있습니다.super.initState()를 호출하기 전에 다른 로직을 실행하면, 상위 클래스의 초기화가 완료되지 않은 상태에서 위젯의 초기화 코드가 실행되어 예상치 못한 문제가 발생할 수 있습니다.