kokoball의 devlog
article thumbnail
728x90

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
}

 

728x90
profile

kokoball의 devlog

@kokoball-dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!