class _MyAppState extends State<MyApp> {
var userImage;
var userContent;
1번 선언
var MyData = { // 여기에 userImage와 userContent를 선언하면 에러
'id' : 0,
'image' : userImage,
'content' : userContent,
};
2번 선언
addMyData(){ // 여기에 userImage와 userContent 선언하면 잘됨
var MyData = {
'id' : 0,
'image' : userImage,
'content' : userContent,
};
}
}
아니 1번과 2번 선언 둘 다 똑같은거 아니요?
결과부터 말하면 다르다. 이것에 대해 구글 검색해도 못찾아서 gpt에게 물어보았다.
위의 플러터 코드에서 _MyAppState 이라는 클래스 바로 안에 선언한 MyData 변수에서
userImage와 userContent를 호출 못하는데 addMyData() 라는 함수를 생성 후 userImage와 userContent를 호출하면 잘나온다. 클래스 바로 안에서 호출하는 것과 함수 안에서 호출하는 것에 무슨 차이가 있는지 알려줘
클래스 바로 안에서 변수를 호출하는 것과 함수 안에서 호출하는 것에는 몇 가지 중요한 차이점이 있습니다.
변수의 범위(scope) : 클래스 바로 안에서 변수를 선언하면 해당 변수는 클래스 내부의 모든 메소드에서 사용할 수 있습니다. 그러나 함수 안에서 변수를 선언하면 해당 변수는 그 함수 내에서만 사용할 수 있습니다.
변수의 초기값 : 클래스 안에서 변수를 선언하면 해당 변수는 클래스의 생성자(constructor)가 호출될 때 초기화됩니다. 그러나 함수 안에서 변수를 선언하면 해당 변수는 함수가 호출될 때마다 초기화됩니다.
따라서 위의 코드에서 MyData 변수를 클래스 안에서 선언하면 userImage와 userContent 변수가 초기화되기 전에 MyData 변수가 초기화되므로 원하는 결과를 얻을 수 없습니다. addMyData() 함수를 사용하면 userImage와 userContent 변수를 먼저 초기화한 후 MyData 변수를 선언하므로 원하는 결과를 얻을 수 있습니다.