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()
를 호출하기 전에 다른 로직을 실행하면, 상위 클래스의 초기화가 완료되지 않은 상태에서 위젯의 초기화 코드가 실행되어 예상치 못한 문제가 발생할 수 있습니다.