Flutter 개발을 시작하면서 내가 보려고 정리한 최소한의 Dart 문법 - 1
기본 문법 및 언어 특징
- 객체지향언어로 모든 상수, 변수, 함수 심지어 숫자까지 객체
- 단일 상속(single inheritance)과 mixin을 지원
- 행의 끝은 세미콜론( ; )이 필요하며 함수는 중괄호 { }, 문자열은 싱글쿼테이션( ' )을 사용
- 로그출력을 위한 함수는 prinf(), 코멘트 작성은 더블 슬레쉬 ( // )
타입 종류
* 기본 자료형
- int : 정수형
- double : 실수형
- num : int, double를 포함하는 타입
- bool : true, false
- string : 문자열
* 집합 자료형
- List : 중복 O, 순서 O
- Set : 중복 X, 순서 X
- Map : key-value 쌍으로 구성된 집합 (JS의 Object와 유사)
변수 선언
* var 키워드를 사용한 변수 선언
- 변수에 값이 할당되면 타입 추론. 명시적 타입 선언 불필요.
var name = '아이브';
var since = 2021;
var members = 6;
var names = ['안유진', '이서', '장원영', '레이', '가을', '리즈'];
* final, const를 사용한 변수 선언
- 모두 불변하는 상수를 의미
- const는 앱의 life cycle에서 절대 변하지 않음을 의미, 때문에 플러터는 그 부분을 rebuild하지 않고 앱의 속도가 빨라짐
- const는 compile-time constant로 앱 빌드 시 값이 정해지는 반면, final은 run-time constant로서 앱 빌드시에는 값이 정해지지 않지만 앱 실행 시 값이 정해진다.
* static
- 클래스 레벨의 변수를 의미, 클래스의 각 인스턴스는 하나의 static 값을 공유
* dynamic : 동적 타입 지정
- 컴파일러가 해당 변수에 모든 형식을 허용, 이후 타입 변경 가능
void main() {
dynamic test = 3;
test = 'real';
print(something); //real
}
* List
- 인덱스로 특정 원소에 접근 가능
- add, where, map, reduce, flod 등 고차 함수 지원
List<Strng> menuList = ['아이브', '르세라핌', '엔믹스', '있지'];
// add: 아이템추가
menuList.add('트와이스');
// where: 필터링기능. 결과가 Iterable이 반환되므로 리스트로 변환해줌.
menuList.where((name) => name == '르세라핌').toList();
// map: 각요소를 정의한 함수로 처리한 결과를 반환. 결과가 Iterable이 반환되므로 리스트로 변환해줌.
menuList.map((name) => '걸그룹 $name').toList();
// reduce: 각요소를 정의한 함수로 처리하고 결과값을 다음 처리시 넘겨줌.
fianl allMenu = menuList.reduce((value, element) => $value + ',' $element);
// fold: reduce랑 같으나 반환형을 지정(변경)가능
fianl allMenuCont = menuList.fold<Int>(0, (value, element) => value + element.length);
* enum : 열거형 (TypeScript와 유사)
- 컨벤션 확립 및 코딩 규약으로 강제하기 위함
enum Season {
spring,
summer,
autumn,
winter,
}
var currentSeason = Season.summer;
switch (currentSeason) {
case Season.spring:
print('It\'s spring!');
break;
case Season.summer:
print('It\'s summer!');
break;
case Season.autumn:
print('It\'s autumn!');
break;
case Season.winter:
print('It\'s winter!');
break;
}
기본 연산자
- ~/ : 정수 나눗셈
- as : 강제 형변환 키워드, 부모 타입의 객체를 자식 타입의 객체로 형변환 (= 다운캐스팅)
- is / is! : 객체의 타입을 확인해 true / false 반환 (ex. number is Int)
null-aware 연산자
- 객체가 null일 경우를 인지하여 에러 발생을 막고 다른 값을 할당시키는 연산자
* A?.B
- A가 null이 아니면 A 객체의 B 속성을 사용, null으면 그냥 null을 반환
void main() {
String? name;
print(name.length); //Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
print(name?.length); //?.로 처리해 주면 에러가 나지 않음
}
* A ?? B
- js의 || 연산자와 같다. A가 null이면 B 반환
* A ??= B
- 위와 반대로 B가 null이면 백업값을 할당, 아니면 B를 반환
void main() {
int age;
int myAge = 24;
myAge ??= age;
print(myAge); //age가 null이므로 24
}
'Flutter' 카테고리의 다른 글
photo_manager, Error: Type 'DecoderCallback' not found 해결 (부제: flutter SDK 직접 다운로드 및 경로 설정하기) (0) | 2023.12.30 |
---|---|
[Flutter] flutter로 도넛 차트 (Donut Chart)와 데이터 라벨 구현하기 (1) | 2023.10.23 |
[Flutter] Flutter 개발을 위한 Dart 문법 총정리 - 2 (0) | 2023.08.01 |