[Dart] 2. Data Types (자료형)

yunulog·2023년 1월 2일
0

Dart

목록 보기
2/5

Data Types

0. Basic Data Types

void main() {
  String name = "jason";
  bool alive = true;
  int age = 20;
  double pi = 3.14;

  num x = 10;
  x = 1.23;
}
  • String : 문자
  • bool : true / false
  • int: 정수
  • double : 소수
  • number : 정수와 소수 모두 가능

다양한 숫자값을 받아야 할 때에는 number 타입을 이용하는 것이 편리하다.

1. Lists

DartListjavascriptArray와 같다고 보면 된다.

Dart에서 리스트를 만드는 방법은 간단하다.

void main() {
 var numbers = [1,2,3,4];
 List<int> numbers = [1,2,3,4];
}

첫번째 줄처럼 var를 이용해서 선언할 수도 있고
두번째 줄처럼 리스트와 데이터타입을 명시해서 사용할 수도 있다.

collection if

dart에서는 collection if 라는 기능을 이용해서 있을 수도, 없을 수도 있는 값을 리스트에 넣을 수 있다.

void main() {
  var giveMeFive = true;
  var numbers = [1,2,3,4,if(giveMeFive) 5];
}

위 코드는 giveMeFive라는 데이터가 true이면 numbers 리스트에 5를 추가한다는 의미이다.

void main() {
  var giveMeFive = true;
  var numbers = [1,2,3,4];
	if (giveMeFive === true) {
		numbers.add(5);
	}
}

같은 코드이지만 collection if 를 사용한 위 코드가 더 간단한 것을 볼 수 있다.

**2. String Interpolation**

다음은 ‘$데이터명' 을 이용해서 문자열 변수 두개를 연결시키는 방법이다.

void main() {
  var name = 'hey';
  var greeting = '안녕 내 이름은 $name';
  print(greeting);
	// 안녕 내 이름은 hey
}

이와 같이 문자열 안에서 $ 뒤에 다른 데이터명을 붙이면 해당 데이터를 끌어와서 사용할 수 있다.

데이터를 단순하게 끌어올 때는 위와 같이 하면 되지만
간단한 계산을 해서 가져오고 싶을 때에는 ${데이터~} 를 사용해야한다.

void main() {
  var name = 'hey';
  var age = 20;
  var greeting = '안녕 내 이름은 $name야 나이는 ${age+2}살임';
  print(greeting);
	// 안녕 내 이름은 hey야 나이는 22살임
}

$age 가 아닌 ${age+2} 라고 써주었기 때문에 나이로 입력한 20 대신 22로 출력이 된다.

3. Collection For

collection for 기능은 다른 리스트에서 요소들을 간단한 이벤트를 더해서 끌어올 때 사용한다.

예를 들어, 다음과 같이 newFriends 리스트와 oldFriends 리스트가 있다고 하자.
newFriends에 oldFriends 요소들을 가지고와 함께 출력하려고 하는데,
이 때 oldFriends 요소들 앞에는 특별한 표식을 붙여 출력하고자 한다.

void main() {
  var oldFriends = ['Apple', 'Banana'];
  var newFriends = [
    'Cat',
    'Donkey',
    'Error',
    for(var friend in oldFriends) "✨$friend",
  ];
  print(newFriends);
	// [Cat, Donkey, Error, ✨Apple, ✨Banana]
}

for(var friend in oldFriends) "✨$friend" 코드는 olfFriends 에 있는 요소들 앞에 ✨ 를 붙여 하나씩 리스트에 더해주겠다는 의미이다.

4. Maps

DartMapjavascriptObject와 같다고 보면 된다.

void main() {
  var player = {
    'name': 'Son',
    'xp': 19.99,
    'superpower': true,
  };
}

마찬가지로 var를 이용해서 선언해줄 수 있다.

player 에 마우스를 올려보면 데이터 타입이 Map<String, Object> 라고 나오는데
Stringkey의 값이 모두 문자열이라는 의미이고,
Objectvalue의 값이 다양한 데이터 타입이라는 의미이다.

물론 데이터 타입을 명시해서 map을 선언해 줄수도 있다.

void main() {
  Map<int, bool> player = {
    1: true,
    2: false,
    3: false,
  };
}

이처럼 Map<int, bool> 라고 쓰면
이 Map의 key값은 정수여야 하고, value값은 true또는 false가 되어야 한다는 뜻이다.

더 심화해서 보자면 다음과 같이 List 안에 Map, 또는 Map 안에 List 의 데이터타입을 명시하여 선언할 수 있다.

void main() {
	// key값은 숫자로 이루어진 List이고 value값은 불리언인 Map...
  Map<List<int>, bool> player = {
    [1,2,3]: true,
    [4,6,8]: false,
  };

	// key값이 문자열이고 value값의 데이터 타입이 다양한 Map들의 List...
  List<Map<String, Object>> players = [
    {'name': 'A', 'xp': 19.98765},
    {'name': 'B', 'xp': 18.98765},
  ];
}

추천하는 방법도 아니고 데이터 타입 명시 안해도 Dart 에서는 알아서 잘 찾아내기 때문에
꼭 필요한 경우가 아니라면 사용할 일은 많이 없을 것 같다.

5. Sets

Set은 Map과 비슷하지만 몇가지 차이점이 있다.

  • Set은 모든 요소들이 unique 해야 한다. 즉, 같은 요소가 있으면 안된다.
  • Set은 대괄호([])가 아닌 중괄호({})로 묶는다.
void main() {
	var numbers = {1,2,3,4};
	numbers.add(1);
	numbers.add(1);
	numbers.add(1);
	numbers.add(1);
	print(numbers);
	// {1, 2, 3, 4}
}

역시나 var를 이용해서 선언할 수 있다.

set는 모든 값이 달라야 하기 때문에 위처럼 아무리 1을 add 한다고 해도 1은 한번만 출력된다.

또한 데이터 타입을 명시해서 선언할 수도 있다.

void main() {
	Set<int> numbers = {1,2,3,4};
}

<참조>

[노마드 코더] Dart 강좌

0개의 댓글