흥미/Dart

#4 Dynamic Type

RadderNepa 2023. 1. 5. 01:37

- Dart는 개발자 친화적이다.

- 그 중 dynamic type은 여러가지 타입을 가질 수 있는 변수에 사용하는 키워드이다.

- 강사말로는 그닥 사용을 추천하지는 않지만 유용하게 사용할 수는 있다고 한다.


● dynamic

- 변수를 선언할 때 아래와 같이 해보자

void main() {
  var name;  -->  아무런 값도 할당하지 않았고 타입도 명시해주지 않았다. 이러면 dynamic type을 가진다.
}

- 그러면 해당 변수의 타입은 dynamic이 된다.

 

- dynamic 타입의 변수는 아래와 같이 서로 다른 타입의 값을 할당해 줄 수 있다.(당연히 Error도 나지 않는다.)

void main() {
  var name;
  name = 12;
  print(name);
  name = 'garden';
  print(name);
  name = true;
  print(name);
}

- 이것이 가능한 이유는 변수의 type이 dynamic 이기 때문이다.

- var 키워드 대신 아예 dynamic을 키워드로 사용할 수도 있다.

 

Q. dynamic type은 왜 필요한 것일까?
A. 변수가 어떤 타입일지 알기 어려운 경우에 유용하게 사용 가능(변수에 어떤 값이 담길지 알 수 없다는 얘기인 듯)

Dart는 dynamic을 이용해 데이터 타입을 확인할 수 있다.

- dynamic 변수로 작업을 하려면 가장 먼저 타입을 확인해줘야 한다.

- 위 사진과 같이 dynamic type 변수인 name에 . 을 찍어보면 사용할 수 있는 method가 많이 나오지 않는다.

- 왜냐하면 아직 Dart가 name이 정확히 어떤 type의 변수인지 모르기 때문이다.

- 이럴때는 아래와 같은 방식을 사용하면 된다.

- 조건문을 통해 Dart는 name 변수가 string type 이라는 것을 알 수 있고 그제서야 string에서 사용할 수 있는 method가 나온다.

- 정확히 말해 if 문의 true 블럭 안에서만 name 변수가 string type 이라는 것을 아는 것이다.

- 해당 블럭을 벗어나면 name 변수가 다시 dynamic type이 되기에 또 다시 타입을 체크해줘야한다.

 

- dynamic의 이러한 성질을 이용해, 다른 곳으로부터 특정 데이터를 받았을 때 해당 데이터가 어떠한 type 인지 모르면 위와 같은 방법을 이용해 데이터 타입을 확인할 수 있다.

(Dart가 dynamic을 이용해 데이터 타입을 확인할 수 있도록 도와주는 것이다.)

- type이 확인되면 해당 type에서 사용할 수 있는 method를 이용할 수 있다.(Dart가 데이터 타입을 알게 됐으니까)

- 즉, type이 모르는 데이터를 받았을 때 엉뚱한 method를 사용함으로 인해 발생할 수 있는 오류를 미연에 방지할 수 있는 것이다.

type에 따라 사용할 수 있는 method가 달라졌다.