본문 바로가기



Dart 10. DART/Flutter의 리소스 충돌이나 변수의 중복문제 해결 {유목민 알폰스}



※ DART/Flutter에서 외부의 여러 파일을 import해올 때 여러 파일에서 중복된 리소스들의 충돌문제가 있을 수 있습니다. {유목민 알폰스}가 해결에 대한 가이드를 드리겠습니다.

Sub.dart파일의 내용을 살펴보겠습니다.

[ Sub.dart ]

String myVar = "Sub.dart변수";

String myFunction() {
  return "Sub.dart파일의 myFunction함수가 실행되었습니다.";
}

 

Sub.dart파일

 

[ Main.dart ]

myVar변수와 myFunction함수가 중복되었습니다.

import 당하는 Sub.dart파일에도 import 하고 있는 Main.dart파일에도 동일한 이름의 리소스를 가지고 있습니다. 즉 리소스가 겹쳐있는 상태입니다.

  • Sub.dart [ {myVar, myFunction()} ]
  • Main.dart [ {myVar, myFunction()} ]

 

import 'Sub.dart';

String myVar = "Main.dart변수";

String myFunction() {
  return "Main.dart파일의 myFunction함수가 실행되었습니다.";
}

main() {
  print(myVar);
  print(myFunction());
}

myVar변수와 myFunction() 함수가 정의되어 있습니다.

 

[ Main.dart 실행결과 ] 실행결과를 볼까요?

 

무조건 Main.dart파일에 있는 리소스가 우선하게 되며 Sub.dart파일에 있는 리소스는 지칭하여 선언할 방법이 없습니다.

Main.dart변수
Main.dart파일의 myFunction함수가 실행되었습니다.
 

as 별칭을 사용해서 중복리소스 문제를 해결해 봅시다.

as 별칭을 사용해서 Sub.dart을 import 하고 Sub.dart 파일의 myVar 변수와 myFunction() 함수도

함께 호출해 보겠습니다.

 

코드를 보시면 as 옵션을 사용해서 Com이라는 별칭을 지정했고 Com.myVar, Com.myFunction()

이런 식으로 Com 식별자를 앞에 붙임으로써 외부 파일 import 시 변수나 객체 함수 간의

충돌을 예방할 수 있습니다.

 

이제 이름이 겹치지 않습니다.

  • Sub.dart [ { Com.myVar, Com.myFunction()} ]
  • Main.dart [ {myVar, myFunction()} ]

[ 수정된 Main.dart ] 

import 'Sub.dart' as Com;// <====== as옵션을 사용해서 Com이라는 별칭을 지정

String myVar = "Main.dart변수";

String myFunction() {
  return "Main.dart파일의 myFunction함수가 실행되었습니다.";
}

main() {
  
  //Main.dart
  print(myVar);
  print(myFunction());

  //Sub.dart
  print(Com.myVar);
  print(Com.myFunction());

}

 

[ Main.dart, Sub.dart의 리소스를 동시에 모두 호출해서 출력 ]

Main.dart변수
Main.dart파일의 myFunction함수가 실행되었습니다.
Sub.dart변수
Sub.dart파일의 myFunction함수가 실행되었습니다.
 

이런 식으로 라이브러리나 외부파일을 import 했을 때 파일 간의 리소스가 곁 치는 것을 예방할 수 있습니다.

 

By. 유목민 알폰스 Alphonse Elric