개발자/SupaBase && Flutter

03. (Dart 개념_노마드코더 강의) Data Type

푸루닉 2024. 10. 23. 17:20

3.0 기본 데이터 타입

아래 타입을 포함한 거의 대부분의 타입들이 객체로 이루어져 있다. (함수도 객체)
이것이 Dart가 진정한 객체 지향 언어로 불리는 이유이다.

void main() {  
String name = "tom";  
bool isPlay = true;  
int age = 10;  
double money = 52.55;  
num x = 12;  
num y = 1.2;  
}  

3.1 Lists

Dart에서 리스트(List)를 선언하는 두 가지 방법이 있습니다.

void main() {
  // 1. 타입 추론을 사용한 리스트 선언
  var case1 = [1, 2, 3, 4, 5];

  // 2. 명시적으로 List 타입을 선언
  List<int> case2 = [1, 2, 3, 4, 5];
}

유용한 기능

  1. 콤마(,)로 끝맺기
    VSCode나 DartPad를 사용할 때 리스트 항목의 마지막에 쉼표(,) 를 추가하면 코드 포매팅에 유용합니다. 이는 특히 여러 줄로 나열된 리스트에서 더 깔끔하게 코드 정리할 수 있게 해줍니다.
    만약 vscode나 dartPad를 사용한다면 맨 끝을 쉽표로 마무리하면 유용하다.
  2. void main(){ int case1 = [ 1, 2, 3, 4, 5, ]; }
  3. Collection if
    Dart에서는 리스트 내에서 if 문을 사용할 수 있습니다. 이를 통해 조건에 따라 리스트에 요소를 추가할지 결정할 수 있습니다. 예를 들어, 특정 조건이 참일 때만 요소를 추가할 수 있습니다.
  4. void main() { var giveMeSix = true; var case1 = [ 1, 2, 3, 4, 5, if (giveMeSix) 6, // giveMeSix가 true일 때만 6을 추가 ]; // 아래의 if문과 동일한 기능을 합니다. if (giveMeSix) { case1.add(6); } }

3. Collection for
   Dart에서는 리스트 내에서 **`for`** 문을 사용할 수도 있습니다. 이를 통해 반복적으로 요소를 리스트에 추가할 수 있습니다.
```dart
void main() {
  var numbers = [1, 2, 3];

  var case1 = [
    0,
    for (var number in numbers) number, // numbers 리스트의 모든 요소를 추가
    4,
  ];

  print(case1); // 출력: [0, 1, 2, 3, 4]
}

추가 유용한 기능

  1. List 타입 명시: 리스트 타입을 명시적으로 선언하면 타입 안전성을 보장할 수 있습니다.
    List<int> intList = [1, 2, 3];
  2. const List: 리스트 자체가 변경되지 않게 하려면 const 키워드를 사용할 수 있습니다.
    const list = [1, 2, 3];
  3. 스프레드 연산자: 리스트를 다른 리스트에 포함시키는 방법도 있습니다.
    void main() {
    var numbers = [1, 2, 3];
    var moreNumbers = [0, ...numbers, 4];
    print(moreNumbers); // 출력: [0, 1, 2, 3, 4]
    }
  4. null-aware 스프레드 연산자: 리스트가 null일 가능성이 있을 때, null 값인 경우를 처리할 수 있습니다.
    void main() {
    List<int>? numbers;
    var moreNumbers = [0, ...?numbers, 4];
    print(moreNumbers); // 출력: [0, 4]
    }

2.2 String Interpolation

String Interpolation은 문자열 내에서 변수를 사용하거나, 간단한 계산을 삽입하는 방법입니다. Dart에서는 $ 기호를 사용해 변수를 문자열에 삽입할 수 있습니다.

변수 사용하기

문자열 안에 변수를 삽입하려면, 변수 앞에 $ 기호를 붙이면 됩니다.

void main() {
  var name = "tom";
  var greeting = "hello $name"; // 출력: hello tom
}

계산 또는 표현식 사용하기

만약 변수뿐만 아니라 계산이나 표현식을 사용하고 싶다면, ${} 안에 표현식을 넣어줍니다.

void main() {
  var age = 10;
  var greeting = "I'm ${age + 5} years old"; // 출력: I'm 15 years old
}
  • ${ } 형태를 사용하면 문자열 내에서 덧셈, 함수 호출, 논리 연산 등 다양한 표현식을 사용할 수 있습니다.
  • 단순한 변수는 $변수명 형태로 사용할 수 있지만, 복잡한 계산이나 표현식이 필요한 경우 ${ }를 사용해야 합니다.

2.3 Collection for

Dart는 조건문(if) 및 반복(for)을 사용하여 컬렉션을 구축하는 데 사용할 수 있는 컬렉션 if 및 컬렉션 for도 제공합니다.

void main() {  
var oldFriends = ["nico", "lynn"];  
var newFriends = [  
"tom",  
"jon",  
for (var friend in oldFriends) "❤️ $friend",  
];  

print(newFriends); // [tom, jon, ❤️ nico, ❤️ lynn]  
}  

2.4 Maps

Mapkey-value 쌍을 저장하는 객체입니다. 여기서 key는 고유해야 하지만, value는 중복될 수 있습니다. keyvalue는 Dart의 모든 객체 타입이 될 수 있습니다.

1. Map 선언하는 방법

void main() {
  var gifts = {
    // Key: Value
    'first': 'partridge',
    'second': 'turtledoves',
    'fifth': 'golden rings',
  };

  // Map 생성자를 사용하여 동일한 객체를 만들 수 있습니다.
  var gifts2 = Map();
  gifts2['first'] = 'partridge';
  gifts2['second'] = 'turtledoves';
  gifts2['fifth'] = 'golden rings';
}
  • 첫 번째 방식은 리터럴 표기법을 사용해 Map을 선언하는 방식입니다.
  • 두 번째 방식은 Map 생성자를 사용하여 키-값 쌍을 추가하는 방법입니다.

2. Map과 List를 함께 사용하는 방법

Dart에서는 MapList를 함께 사용할 수 있습니다. 특히 리스트 안에 Map을 넣는 구조를 활용하면 여러 객체를 손쉽게 관리할 수 있습니다. 예를 들어, 여러 영화 정보를 저장하는 리스트를 만들 수 있습니다.

void main() {
  List<Map<String, Object>> movies = [
    {
      'title': '대도시의 사랑법',
      'rate': 7.9,
      'actor': '배우1',
    },
    {
      'title': '다른 영화 제목',
      'rate': 8.5,
      'actor': '배우2',
    },
  ];

  // 영화 리스트를 출력
  for (var movie in movies) {
    print('Title: ${movie['title']}, Rate: ${movie['rate']}, Actor: ${movie['actor']}');
  }
}
  • List<Map<String, Object>>Map 객체들의 리스트를 나타냅니다. 각 Map은 영화 정보를 저장하는 구조로, 제목(title), 평점(rate), 배우(actor) 등의 정보를 포함합니다.
  • 이 리스트를 활용하면 여러 개의 영화 정보를 한 번에 다룰 수 있습니다.
  • Object 타입은 모든 객체 타입을 허용하기 때문에 다양한 데이터를 포함할 수 있습니다.여러 명의 배우를 List 형식으로 저장도 가능!
  • void main() { List<Map<String, Object>> movies = [ { 'title': '대도시의 사랑법', 'rate': 7.9, 'actors': ['배우1', '배우2', '배우3'], // 여러 명의 배우를 List로 저장 }, { 'title': '다른 영화 제목', 'rate': 8.5, 'actors': ['배우4', '배우5'], // 여러 명의 배우를 List로 저장 }, ]; // 영화 리스트를 출력 for (var movie in movies) { print('Title: ${movie['title']}, Rate: ${movie['rate']}, Actors: ${movie['actors']}'); } }
  • 번외~

2.5 Set

Set에 속한 모든 아이템들이 유니크해야될 때 사용한다.
유니크할 필요가 없다면 List를 사용하면 된다.

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};