4. Flutter 수업-Dart문법 예제 모음 part 3

Dart
홍윤's avatar
Sep 27, 2024
4. Flutter 수업-Dart문법 예제 모음 part 3
 

1. ex11.dart

import 'ex01.dart'; //super안에 name을 넣고 싶으면 코드 보고 하면 된다. //생성자 만들면 이니셜라이즈 키워드 가 초기화 하려면 String?name; 을 해야한다. 초기화가 되고나서 stack이 때려진다. class Buger { String name; Buger(String name) : this.name = name { print("버거 생성됨"); } } //이니셜라이즈 키워드 CheeseBuger() : super() super를 쓰고싶으면 이렇게 쓴다. class CheeseBuger extends Buger { String name; CheeseBuger(this.name) : super(name) { print("치즈버거 생성됨"); } } void main() { Buger b = CheeseBuger("치즈버거"); }
notion image
💡

코드설명

이 코드는 Dart에서 상속을 사용하여 Buger라는 부모 클래스와 CheeseBuger라는 자식 클래스를 정의한 것입니다. 생성자에서 super 키워드를 사용하여 부모 클래스의 생성자를 호출하는 예제를 보여주고 있습니다.

2. ex12.dart

//여기서 추상매소드를 만들어야한다. abstract class Animal { void speak(); } class Dog extends Animal { @override void speak() { print("월월월"); } } class Cat extends Animal { @override void speak() { print("묘우묘우"); } } void main() { Animal D = Dog(); Animal C = Cat(); D.speak(); }
notion image
💡

코드설명

이 코드는 Dart에서 추상 클래스추상 메서드를 사용하는 예제입니다. 간단하게 Animal이라는 추상 클래스와 그 클래스를 상속받는 DogCat 클래스가 있습니다. 각각의 클래스는 speak()라는 메서드를 오버라이드하여 동물들이 내는 소리를 출력합니다.
 

3. ex13.dart

//is와 has의 관계 // //mixin mixin class Engine { int power = 5000; } mixin class Wheel { int count = 4; } //Composition Code class Sonata with Engine, Wheel { //Engine e; //wheel w; //Sonata(this.e, this.w); } void main() { // 의존성 주입 //Sonata s = Sonata(Engine(), wheel()); Sonata s = Sonata(); print(s.power); print(s.count); }
notion image
💡

코드설명

이 코드는 Dart에서 mixin을 사용하여 여러 클래스의 기능을 하나의 클래스에 결합하는 방법을 보여줍니다. mixin은 상속과 유사하게 동작하지만, 여러 클래스의 기능을 결합할 수 있도록 해줍니다.
  • mixin은 Dart에서 여러 클래스의 기능을 하나의 클래스에 결합할 때 사용됩니다.
  • Sonata 클래스는 EngineWheel mixin을 사용하여 두 클래스의 필드(powercount)를 상속받고 사용할 수 있습니다.
  • with 키워드를 통해 여러 mixin을 결합하여 상속할 수 있으며, 이 경우 다중 상속이 불가능한 Dart에서 여러 클래스의 기능을 한 클래스에 포함시킬 수 있습니다.
 

4. ex15.dart

List<int> nums = [1, 2, 3, 4]; var list = [1, 2, 3, 4]; final arr = [1, 2, 3, 4]; void main() { print(arr[0]); }
notion image
💡

코드설명

이 Dart 코드는 리스트(List<int>, var, final)를 정의하고, 그 중 arr 리스트의 첫 번째 요소를 출력하는 간단한 예제입니다.
  • List<int> nums: Dart에서 명시적으로 int 타입의 리스트로 선언한 것입니다. 이 리스트에는 정수형 값들만 들어갈 수 있습니다.
  • var list: var 키워드를 사용하여 Dart가 타입을 추론하도록 한 리스트입니다. Dart가 [1, 2, 3, 4] 값들을 보고 자동으로 List<int>로 추론합니다.
  • final arr: final 키워드를 사용하여 선언된 리스트입니다. final변수 자체를 재할당할 수 없게 만들지만, 리스트의 내부 요소는 수정할 수 있습니다.
 

5. ex16.dart

Map<String, dynamic> session = {"id": 1, "username": "ssar"}; void main() { session["model"] = "username"; // 새로운 키-값 쌍 추가 print(session["id"]); // id의 값 출력: 1 print(session["username"]); // username의 값 출력: "ssar" print(session["model"]); // model의 값 출력: "username" session.remove("id"); // id 키 삭제 print(session["id"]); // id 키는 삭제되었으므로 null 출력 }
notion image
💡

코드설명

이 코드는 Dart에서 Map을 사용하는 예제로, **session**이라는 Map<String, dynamic> 타입의 변수를 통해 데이터를 추가, 조회, 삭제하는 작업을 수행합니다.
  • sessionMap<String, dynamic> 타입입니다.
  • *Map*은 키-값 쌍을 저장하는 자료구조입니다. 여기서 키는 String 타입, 값은 dynamic 타입(즉, 어떤 타입도 될 수 있음)으로 선언되었습니다.
  • 초기값으로 id 키에 값 1, username 키에 값 "ssar"가 할당되어 있습니다.
 

6. ex18.dart

void main() { var chobab = ["새우초밥", "광어초밥", "연어초밥"]; //1. 기본 FOR문 // chobab[0] = chobab[0]+"_간장"; // chobab[1] = chobab[1]+"_간장"; // chobab[2] = chobab[2]+"_간장"; // for (var i = 0; i < chobab.length; i++) { // chobab[i] = chobab[i] + "_간장"; //} //map 의 순회하면서 리턴을 한다. //chobab.map 물에 던지고 (e) => e + "_간장" 가공과정, .toList() 담는다. var changeChobab = chobab.map((e) => e + "_간장").toList(); print(changeChobab); }
notion image
💡

코드설명

이 코드는 Dart에서 리스트를 순회하며 각 요소를 변경하는 방법을 보여주는 예제입니다. 주어진 초밥 리스트(chobab)의 각 항목에 문자열 "_간장"을 추가하는 작업을 하고 있습니다.

mapfor 루프의 차이

  • for 루프는 직접 리스트의 요소를 수정하는 방식입니다. 기존 리스트의 요소를 직접적으로 변경할 때 사용됩니다.
  • map 함수는 각 요소를 변환하여 새로운 리스트를 만듭니다. 원본 리스트를 유지하면서, 새로운 가공된 리스트를 얻고 싶을 때 유용합니다.

요약

이 코드는 map을 사용하여 리스트의 각 요소에 추가적인 문자열을 붙여 새로운 리스트를 생성하는 방법을 보여줍니다. map은 리스트 요소를 변환할 때 매우 유용하며, for 루프 대신 리스트 변환을 깔끔하게 처리할 수 있는 고차 함수입니다.
 

7. ex19.dart

void main() { var chobab = ["새우초밥", "광어초밥", "연어초밥"]; //boolean //사용법 :삭제 할 때, 검색 할 때 //map,where 은 깊은 복사를 한다. Flutter를 할 때 기존데이터(불면데이터)가 있어야 비교하면서 //화면에 뿌려줄 수 있다. var changeChobab = chobab.where((e) => e == "새우초밥").toList(); var removeChobab = chobab.where((e) => e != "새우초밥").toList(); print(changeChobab); print(removeChobab); }
notion image
💡

코드설명

이 코드는 Dart에서 리스트를 순회하며 조건에 맞는 요소를 찾거나 제거하는 방법을 보여줍니다. 여기서 where 함수를 사용하여 주어진 리스트에서 특정 조건을 만족하는 요소를 필터링합니다. Dart에서 where 함수는 리스트의 원소 중에서 조건에 맞는 원소만 남겨 새로운 리스트를 만드는 함수입니다.

where 함수

  • where는 리스트 내에서 특정 조건을 만족하는 요소만 필터링할 때 사용됩니다. 조건을 만족하는 요소들만 새로운 리스트로 반환하며, 원본 리스트는 그대로 유지됩니다.
  • 이 예제에서는:
    • "새우초밥"과 같은 값을 찾을 때는 ==를 사용하고,
    • "새우초밥"을 제외한 값들을 찾을 때는 !=를 사용하여 리스트를 필터링하고 있습니다.

요약

이 코드는 where 함수를 사용하여 리스트에서 조건에 맞는 요소를 선택하고 필터링하는 방법을 보여줍니다. where는 원본 리스트를 변경하지 않고 새로운 리스트를 반환하기 때문에, 불변 데이터를 유지하면서 원하는 값을 필터링하는 데 매우 유용합니다.
 

8. ex20.dart

//추가하기 void main() { var chobab = ["새우초밥", "광어초밥", "연어초밥"]; // sprad 연산자(흙뿌리는 연산자), ...은 타입이 벗겨지고 var changeChobab = [...chobab, "장어초밥"]; print(changeChobab); }
notion image
💡

코드설명

이 코드는 Dart에서 스프레드 연산자(...)를 사용하여 기존 리스트에 새로운 요소를 추가하는 방법을 보여줍니다.

스프레드 연산자(...) 설명

  • 스프레드 연산자는 리스트의 요소들을 펼쳐서 다른 리스트에 추가하는 데 사용됩니다.
  • 기존 리스트를 복사하면서 새로운 요소를 추가할 때 매우 유용합니다.
  • Dart에서 스프레드 연산자는 기존 리스트의 타입을 유지한 채로 새로운 리스트에 결합할 수 있는 간단하고 효율적인 방법을 제공합니다.

요약

이 코드는 스프레드 연산자(...)를 사용하여 기존 리스트(chobab)에 새로운 요소("장어초밥")를 추가하는 방법을 보여줍니다. 이 연산자를 사용하면 기존 리스트를 복사하고, 추가적인 요소를 결합한 새로운 리스트를 만들 수 있습니다. 결과적으로 원본 리스트는 변경되지 않고, 새로운 리스트가 생성됩니다.
 

9. ex21.dart

class User { int id; String username; String password; User(this.id, this.username, this.password); //이름이 있는 생성자 이름으 붙여서 생성자를 만들 수 있다. User.hello( {required this.id, required this.password, required this.username}); //map을 받아서 오브젝트로 만든다. //1. 이니셜라이즈 키워드 사용해한다. //2. map 타입으로 json을 바로 받을 수 있다. //arr로 받으면 dynamic으로 받으면 된다. User.fromJson(Map<String, dynamic> json) : this.id = json["id"], this.username = json["username"], this.password = json["password"]; } void main() { //이름있는 생성자인지 아닌지 확인을 하고 잘 사용하면 좋다. User u1 = User(1, "ssar", "1234"); User u2 = User.hello(id: 1, username: "ssar", password: "1234"); User u3 = User.fromJson({"id": 1, "username": "ssar", "password": "1234"}); print(u1.username); print(u2.username); print(u3.username); }
notion image
💡

코드설명

이 코드는 Dart에서 클래스 생성자이름 있는 생성자, JSON 파싱을 사용해 객체를 만드는 방법을 보여줍니다.

주요 개념

  1. 기본 생성자: 클래스가 객체를 생성할 때 필드를 초기화하는 기본적인 방식입니다.
  1. 이름 있는 생성자: 특정한 이름을 가진 생성자를 통해 객체를 생성할 수 있습니다. 이 방식은 여러 생성자를 구분할 때 유용합니다.
  1. fromJson 생성자: JSON 데이터를 받아서 객체를 생성하는 방식입니다. REST API나 외부에서 JSON 형식의 데이터를 받을 때 자주 사용됩니다.

요약

이 코드는 Dart에서 다양한 방식으로 객체를 생성하는 방법을 보여줍니다. 기본 생성자, 이름 있는 생성자, 그리고 JSON 데이터를 파싱하여 객체를 생성하는 생성자를 통해 유연한 객체 생성 방식을 제공하고 있습니다. fromJson 생성자는 외부에서 데이터를 받아서 객체를 초기화할 때 유용하게 사용됩니다.
 

10. ex22.dart (기본 문법 활용해보기)

class Dog { int age; String name; Dog(this.age, this.name); @override String toString() { return 'Dog(age: $age, name: $name)'; } } void main() { // CRUD final list = [Dog(1, "토토"), Dog(2, "레르코"), Dog(3, "우유")]; //1. 추가 var add = [...list, Dog(4, "누렁이")]; // 4,"누렁이" print(add); //2. 수정 (age가 1번인 것을 이름을 수정) var update = list.map((e) => e.age != 1 ? e : Dog(e.age, "토루토")).toList(); print(update); //3. 삭제 (age가 3번인 것을 삭제) var del = list.where((e) => e.age != 3).toList(); print(del); }
notion image
💡

코드설명

이 코드는 Dart에서 리스트CRUD(Create, Read, Update, Delete) 작업을 수행하는 방법을 보여줍니다. 여기서는 Dog 객체 리스트를 사용하여 데이터를 추가, 수정, 삭제하는 과정을 다룹니다.

요약

  • 추가(Create): 스프레드 연산자를 사용해 기존 리스트에 새로운 강아지 객체를 추가합니다.
  • 수정(Update): map() 함수로 리스트의 요소를 순회하면서 특정 조건에 맞는 요소를 수정합니다.
  • 삭제(Delete): where() 함수를 사용해 조건을 만족하지 않는 요소를 필터링하여 제거합니다.
이 코드를 통해 Dart에서 리스트를 다루는 방법과, CRUD 작업을 수행하는 방법을 이해할 수 있습니다.
 
Share article

Uni