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("치즈버거");
}

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();
}

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);
}

코드설명
이 코드는 Dart에서 mixin을 사용하여 여러 클래스의 기능을 하나의 클래스에 결합하는 방법을 보여줍니다. mixin은 상속과 유사하게 동작하지만, 여러 클래스의 기능을 결합할 수 있도록 해줍니다.
- mixin은 Dart에서 여러 클래스의 기능을 하나의 클래스에 결합할 때 사용됩니다.
Sonata
클래스는Engine
과Wheel
mixin을 사용하여 두 클래스의 필드(power
와count
)를 상속받고 사용할 수 있습니다.
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]);
}

코드설명
이 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 출력
}

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);
}

코드설명
이 코드는 Dart에서 리스트를 순회하며 각 요소를 변경하는 방법을 보여주는 예제입니다. 주어진 초밥 리스트(
chobab
)의 각 항목에 문자열 "_간장"
을 추가하는 작업을 하고 있습니다.map
과 for
루프의 차이
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);
}

코드설명
이 코드는 Dart에서 리스트를 순회하며 조건에 맞는 요소를 찾거나 제거하는 방법을 보여줍니다. 여기서
where
함수를 사용하여 주어진 리스트에서 특정 조건을 만족하는 요소를 필터링합니다. Dart에서 where
함수는 리스트의 원소 중에서 조건에 맞는 원소만 남겨 새로운 리스트를 만드는 함수입니다.where
함수
where
는 리스트 내에서 특정 조건을 만족하는 요소만 필터링할 때 사용됩니다. 조건을 만족하는 요소들만 새로운 리스트로 반환하며, 원본 리스트는 그대로 유지됩니다.
- 이 예제에서는:
"새우초밥"
과 같은 값을 찾을 때는==
를 사용하고,"새우초밥"
을 제외한 값들을 찾을 때는!=
를 사용하여 리스트를 필터링하고 있습니다.
요약
이 코드는
where
함수를 사용하여 리스트에서 조건에 맞는 요소를 선택하고 필터링하는 방법을 보여줍니다. where
는 원본 리스트를 변경하지 않고 새로운 리스트를 반환하기 때문에, 불변 데이터를 유지하면서 원하는 값을 필터링하는 데 매우 유용합니다.8. ex20.dart
//추가하기
void main() {
var chobab = ["새우초밥", "광어초밥", "연어초밥"];
// sprad 연산자(흙뿌리는 연산자), ...은 타입이 벗겨지고
var changeChobab = [...chobab, "장어초밥"];
print(changeChobab);
}

코드설명
이 코드는 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);
}

코드설명
이 코드는 Dart에서 클래스 생성자와 이름 있는 생성자, JSON 파싱을 사용해 객체를 만드는 방법을 보여줍니다.
주요 개념
- 기본 생성자: 클래스가 객체를 생성할 때 필드를 초기화하는 기본적인 방식입니다.
- 이름 있는 생성자: 특정한 이름을 가진 생성자를 통해 객체를 생성할 수 있습니다. 이 방식은 여러 생성자를 구분할 때 유용합니다.
- 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);
}

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