Dart에서 동적 변수, 너무 편리한데 쓰지말라고? 동적변수사용은 편리함과 위험도 함께 한다!

2024. 6. 20. 20:11Flutter/Dart Language

반응형

Dart에서 동적 변수는 다양한 데이터 유형을 저장할 수 있어 매우 편리합니다.

하지만 동시에 런타임 오류 발생 가능성이 높아 주의가 필요합니다.

이 블로그 게시물에서는 동적 변수를 사용하면 안 되는 이유와 안전하게 사용하기 위한 방법에 대해 알아보겠습니다.

1. 런타임 오류 위험

동적 변수는 변수에 저장된 데이터 유형을 명시적으로 정의하지 않기 때문에, 런타임에 예상치 못한 오류가 발생할 가능성이 높습니다.

예를 들어, 다음 코드를 살펴보세요.

 
dynamic variable = 10; // 정수 할당
variable = "문자열"; // 문자열 할당

// ... 후에

int result = variable + 10; // 오류 발생!
 

위 코드에서 variable 변수는 처음에는 정수 10을 저장하지만, 이후 문자열 "문자열"로 변경됩니다.

하지만 마지막 코드에서 variable 변수를 정수형 연산에 사용하려고 하면 오류가 발생합니다.

이는 컴파일 시점에 variable 변수의 데이터 유형을 정확히 알 수 없기 때문에 발생하는 문제입니다.

2. 코드 가독성 저하

동적 변수를 사용하면 코드가 어떤 데이터 유형을 처리하는지 명확하게 파악하기 어려워져 코드 가독성이 저하됩니다.

이는 다른 개발자가 코드를 이해하고 유지 관리하는 것을 어렵게 만들 수 있습니다.

예를 들어, 다음 코드를 살펴보세요.

dynamic fetchData() {
  // ... 데이터 가져오는 코드 ...
  return data;
}

void useData(dynamic data) {
  // ... data를 사용하는 코드 ...
}

// ...

dynamic response = fetchData();
useData(response);
 

위 코드에서 fetchData() 함수는 어떤 데이터 유형을 반환하는지 명확하게 알 수 없습니다.

따라서 useData() 함수에서 response 변수를 어떻게 사용해야 하는지 명확하게 파악하기 어렵습니다.

3. 안전하게 사용하기 위한 방법

동적 변수 사용을 완전히 피하는 것이 가장 안전하지만, 상황에 따라 불가피하게 사용해야 할 경우 다음과 같은 방법으로 안전하게 사용할 수 있습니다.

  • 데이터 유형 확인: as 키워드를 사용하여 데이터 유형을 명시적으로 확인합니다.
dynamic variable = 10;

int number = variable as int; // number 변수는 정수형으로 변환
String? string = variable as String?; // string 변수는 문자열형 또는 null로 변환 가능
 
  • 데이터 유형 검증: is 연산자를 사용하여 데이터 유형을 검증합니다.
dynamic variable = 10;

if (variable is int) {
  // variable은 정수형입니다.
} else if (variable is String) {
  // variable은 문자열형입니다.
} else {
  // variable은 다른 데이터 유형입니다.
}
 
  • null 검사: ! 연산자를 사용하여 null 값인지 검사합니다.
dynamic variable;

if (variable != null) {
  // variable은 null이 아닙니다.
}
 

결론

동적 변수는 편리하지만, 런타임 오류 발생 가능성과 코드 가독성 저하라는 위험을 항상 기억해야 합니다.

안전하게 사용하기 위해서는 데이터 유형 확인, 데이터 유형 검증, null 검사와 같은 방법을 적극 활용해야 합니다.

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

 

반응형