欲速不達

일을 급히 하고자 서두르면 도리어 이루지 못한다.

Fantastic AI, Fantastic World

CS | Computer Science/FE | Front-end

[App] Dart 3. Data Types

_껀이_ 2024. 4. 18. 17:27
728x90
반응형

Data Types

Dart는 다른 언어와 마찬가지로 List, Map(파이썬의 Dictionary), Set 등의 데이터 타입을 가진다.

다른 언어와의 차이점도 있으니 Dart의 데이터 타입에 대해 알아보자.


1) Basic Data Types

모든 데이터 타입은 Object이다.

 

void main() {
  // 모든 데이터 타입은 class이므로 object
  String name ='kuuneeee';
  bool alive = true;
  int age = 32;
  double money = 100.11;
  // int, double은 num 클래스에서 파생 -> 부모 클래스가 num

  // num은 정수, 소수 가능
  num x = 12;
  num y = 1.1;
}

 

String, bool, int, double 등 데이터 타입은 class이기 때문에 object 데이터 타입을 가진다.

특이한 점은 int와 double은 num이라는 class에서 파생된 class이라는 것이다.

 

즉, num 데이터 타입은 int와 double 형태를 다 가질 수 있다.


2) Lists

리스트는 우리가 흔히 알고 있는 그 리스트이다.

[]로 요소를 묶는 데이터 타입이다.

void main() {
  var numbers1 = [
    1,
    2,
    3,
    4,
    5, // 리스트 마지막 요소에 ,를 하면 세로로 정렬됨 -> 요소들이 복잡하거나 할때 보기 편할 것 => preferences에서 Settings -> Editor -> Format On Save 체크
  ];
  List<int> numbers2 = [
    1,
    2,
    3,
    4,
    5,
  ];

  numbers1.add('lalalal'); -> 안됨 : 리스트의 요소가 int이므로 List<int>이기 때문에
  numbers1.add(1); // 뒤에 1 추가 -> 파이썬의 append와 같음
  numbers1.first; // 인덱스 0 값 추출
  numbers1.last; // 인덱스 -1 값 추출

  // collection if
  // collection if는 '존재할 수도 안할 수도 있는 요소를 다루는 것'
  var giveMeFive = true;
  var numbers3 = [
    1,
    2,
    3,
    4,
    if (giveMeFive) 5, // giveMeFive가 true이면 5가 추가되는거고, 아니면 없는 것
  ];
  print(numbers3);

  // 위의 if는 아래 코드와 같음
  // if (giveMeFive) {
  //   numbers3.add(5);
  // }
}

 

리스트의 선언은 var와 List<type> 두 방법으로 가능하다.

 

변수 선언과 유사하게 초기 타입이 선언되면 다른 변수타입을 추가할 수 없다.

 

Dart의 리스트가 가지는 특징은 collection if이다.

collection if는 리스트 내에 조건을 부여해서 값을 추가하는 등의 로직을 수행할 수 있다.

 

위의 코드 처럼 giveMeFive가 true면 5를 추가하는 것처럼 작성할 수 있다. 이는 리스트 밖에서 if문을 따로 작성하는 것과 같은 동작을 수행하지만 코드가 더 짧고 간결하다.

 

# 참고

리스트에서 마지막 요소에 ,를 찍으면 세로로 정렬된다.

리스트 외에 다른 데이터타입에서도 작동한다.


3) String Interpolation

String Interpolation은 text에 변수를 추가하는 방법이다.

파이썬의 format과 유사하다.

void main() {
  var name = 'kuuneeee';
  var age = 16;
  var greeting = 'Hello, everyone! my name is $name, and I\'m ${age + 2}';
  // $name는 변수 사용할 때 사용
  // 수식을 담을 때는 ${} 사용
  // \' escape는 파이썬과 동일
  print(greeting);
}

 

변수명을 문자열에서 사용하기 위해서는 변수명에 $를 붙인다.

age와 같이 숫자로 지정된 변수의 경우, 수식을 사용하려면 ${수식}과 같이 사용한다.

 

# 참고

파이썬과 마찬가지로 escape를 사용할 수 있다.

${} 형태로 사용하는 경우는 void 함수가 아닌 함수의 return 값이나 메서드의 return 값을 넣을 수 있다.

 


4) Collection For

Collection For는 파이썬의 list comprehension과 유사하다.

 

void main() {
  var oldFriends = ['kuuneeee', 'naerong'];
  var newFriends = [
    'lewis',
    'ralph',
    'darren',
    for (var friend in oldFriends) "### $friend",
  ];
  print(newFriends);
}

 

위의 코드의 경우, newFriends 리스트에 oldFriends의 요소들을 하나씩 꺼내서 추가하게 된다.

또, oldFriends에서 꺼낸 요소들의 앞에 ### 을 붙여서 추가할 수 있도록 했다.


5) Maps

Maps는 javascript나 typescript에서의 opject, python의 dictionary와 같은 개념이다.

Key와 Value로 구성되어 있고, 선언시에 Map<Key data type, Value data type>을 작성한다.

 

void main() {
  var players = {
    // Map<String, Object> players -> 이렇게 쓸수도 있음
    'name': 'kuuneeee',
    'xp': 19.99,
    'super_power': false,
  };
  // Map<String, Object> : Object = any type -> 뭐든 올 수 있다는 거
  // 실제로 key는 String이고 value는 Object(String, double, boolean -> any type)

  Map<List<int>, bool> players2 = {
    // 이렇게 복잡하게도 할수 있음
    [1, 2, 3, 4]: true,
  };

  List<Map<String, Object>> players3 = [
    {
      'name': 'kuuneeee',
      'xp': 19.99,
    },
    {
      'name': 'naerong',
      'xp': 29.99,
    },
  ];
  // 이런식으로 Map을 여러개 써서 만들 수도 있음 -> 추천하지 않는 방식
}

 

데이터 타입을 Object로 지정하는 경우 어떤 데이터 타입이든 올 수 있다. any type이라고도 한다.

Key에는 List가 올수도 있고, List 안에 여러 개의 Map을 담을 수도 있다. 하지만 이렇게 복잡한 구조는 추천하지 않는다.

 

Key, Value를 가지는 구조로 Object를 만들 때, 그리고 그게 특정 구조를 가진다면 class로 구현하는게 더 구조화된 방법이다.

 


6) Sets

Set는 파이썬의 Set와 같다.

{}로 요소를 묶는 데이터 타입이며, Set 안의 요소는 unique한 값을 가진다.

void main() {
  var numbers = {1, 2, 3, 4};
  // Set<int> numbers2 = {1, 2, 3, 4};
  // 파이썬에서의 Set와 같이 unique한 값을 요소로 하는 집합
  numbers.add(1);
  numbers.add(1);
  numbers.add(1);
  print(numbers);
}

 

728x90
반응형

'CS | Computer Science > FE | Front-end' 카테고리의 다른 글

[App] Dart 5. Classes  (1) 2024.04.19
[App] Dart 4. Functions  (0) 2024.04.19
[App] Dart 2. Variables  (0) 2024.04.18
[App] Dart 1. say "Hello World!"  (0) 2024.04.18