변수 생성 위치에 따른 호출 방법

바다구름·2023년 3월 9일
0

Flutter

목록 보기
15/19
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 변수를 선언하므로 원하는 결과를 얻을 수 있습니다.

결론

  • 1번 선언 : 값이 할당 되기 전에 호출해 버려서 오류가 난 것.
  • 2번 선언 : 함수 안에 정의를 하면 변수들이 다 정의되고 호출되는 것이라 오류가 나지 않은 것.
profile
안녕하세요.

0개의 댓글