모음/[코드팩토리의 플러터 프로그래밍]
[코드팩토리의 플러터 프로그래밍] 4장. 다트 3.0 신규 문법
ttoance
2024. 7. 21. 09:44
1. 레코드
1) 포지셔널 파라미터 : 표시한 타입 순서를 지켜야함
void main() {
// 정확한 위치에 어떤 타입의 값이 입력될 지 지정 가능
(String, int) minji = ('민지', 20);
print(minji);
// 특정 순서의 레코드 값 가져오고 싶다면 $ 사용
print(minji.$1);
print(minji.$2);
}
실행화면 >>
2) 네임드 파라미터 : 입력 순서 지킬 필요 없지만 타입과 변수 이름 쉼표로 구분하고 명시해줘야함
void main() {
// 네임드 파라미터 형태로 record 선언
({String name, int age}) minji = (name: '민지', age: 20);
print(minji);
}
실행화면 >>
2. 구조 분해
1) 리스트에서의 구조 분해 사용
void main() {
// final newJeans = ['민지', '혜린'];
// final minji = newJeans[0];
// final haerin = newJeans[1];
// 구조 분해 사용
final [minji, haerin] = ['민지', '혜린'];
print(minji);
}
실행화면 >>
2) 리스트에서의 스프레드 연산자 이용한 구조 분해 사용
void main() {
final numbers = [1, 2, 3, 4, 5, 6, 7, 8];
//스프레드 연산자 사용하게 되면 중간의 값들을 버릴 수 있다.
final [x, y, ..., z ] = numbers;
print(x);
print(y);
print(z);
}
실행화면 >>
3) 맵에서의 구조 분해 사용
void main() {
final minjiMap = {'name': '민지', 'age': 19};
final {'name': name, 'age': age} = minjiMap;
print('name : $name');
}
4) 클래스에서의 구조 분해 사용
void main() {
final minji = Idol(name: '민지', age: 19);
// 구조 분해
final Idol(name: name, age: age) = minji;
print(name);
}
class Idol {
final String name;
final int age;
Idol({
required this.name,
required this.age,
});
}
실행화면 >>
3. switch문
void main() {
String dayKor = '월요일';
// switch문이 함수처럼 값 반환
String dayEnglish = switch (dayKor) {
// '=>'를 사용하면 조건에 맞출때 값 반환..
'월요일' => 'Monday',
'화요일' => 'Tuesday',
_ => 'Not Fount'
};
print(dayEnglish);
}
실행화면 >>
+ 패턴 매치
void switcher(dynamic anything) {
switch (anything) {
// 정확히 'aaa'만 매칭
case 'aaa':
print('match : aaa');
break;
// [1,2] 리스트만 매치
case [1,2]:
print('match: [1,2]');
break;
// 3개 값이 들어있는 리스트 모두 매치
case [_,_,_]:
print('match: [_,_,_]');
break;
// 첫번째와 두 번째 값에 int가 입력된 리스트 매치
case [int a, int b]:
print('match: [int $a. int $b');
break;
// 아무것도 매치되지 않을 경우
default:
print('no match');
}
}
+ 보호 구문 : when 키워드로 boolean 반환할 조건을 case 문에 추가할 수 있음.
void main() {
(int a, int b) val = (1, -1);
switch (val) {
case (1, _) when val.$2 >0:
print('1, _');
break;
default:
print('default');
}
}
실행 화면 >>
4. 클래스 제한자
1) base 제한자 : base 클래스의 기능 강제하는 제한자. 해당 클래스는 오직 상속만 할 수 있음
base class Parent{}
base class Child extends Parent{}
2) final 제한자 : 같은 파일에서 상속과 재정의 가능하지만 외부파일에서는 할 수 없음.
3) interface 제한자 : 클래스를 외부 파일에서 상속 받지 못하고 재정의만 할 수 있도록 제한
4) sealed 제한자 : 클래스를 파일 외부에서 상속, 재정의, 인스턴스화 할 수 없음
5) mixedin 제한자 : 일반 mixin 역할 하면서 상속할 수 있음
참고 문서링크 >> Class modifiers | Dart
반응형