반응형

플러터는 다트(Dart) 언어를 사용합니다.

다트를 알아야 플러터로 앱 개발이 가능하므로 다트를 공부해야합니다.

다트는 구글에서 개발한 프로그래밍 언어입니다.

다트는 모바일이나 데스크탑 기기를 타겟으로 하는 네이티브 플랫폼과 웹을 타켓으로 하는 웹 플랫폼으로 컴파일 할 수 있습니다.

다트 공부하기

1. 다트패드에서 공부하기

다트패드 홈페이지에서 코드 작성 및 실행 가능합니다.
 

DartPad

 

dartpad.dev

코드 작성 후 Run 버튼을 클릭하여 실행 결과를 확인 할 수 있다.

 

2. 안드로이드 스튜디오에서 공부하기

File -> New -> New Flutter Project ... 메뉴를 클릭하여 플러터 프로젝트를 생성한다.

lib/main.dart 파일에 코드를 작성 후 안드로이드 스튜디오 하단의 터미널 탭에서 dart lib/main.dart 명령어를 실행한다.

 

 

기초 문법

메인 함수

void main() {
	// 한줄 주석
    
    /* 시작기호, 끝 기호 */
    /* 여러 줄 주석
    * 
    *
    * */
    
    /// 슬래시 세 개를 사용하면 문서 주석을 작성할 수 있습니다.
    
}

 

변수 선언

// 변수 타입
String(문자열), int(정수형), double(실수형), bool(불리언 true/false)
String s = '';
int i = 1;
double d = 1.0;
bool b = true;

// 자동으로 타입을 추론. 한번 추론된 타입은 고정됨.
var name = '이름';

// 추후에 타입이 바뀌면 에러
name = 1; // 에러

// dynamic 키워드를 사용하면 변수 타입을 고정하지 않고 사용 가능.
dynamic d_name = '다이내믹';
d_name = 1;

// final, const 는 처음 선언 후 값 변경이 불가하다.
final String f_str = 'final string';
f_str = 'new string'; // 에러 발생

const String c_str = 'const string';
c_str = 'new const'; // 에러 발생

// final 은 런타임, const 는 빌드타임 상수이다.
// DateTime.now() 는 실행되는 순간(런타임 시) 값이 정해진다.
final DateTime f_now = DateTime.now();
const DateTime c_now = DateTime.now(); // 에러 발생

// 컬렉션
// List
List<String> list = ['s1', 's2', 's3'];
print(list[3]); // s3
list.add('s4');
final list_where = list.where((str) => str == 's1' || str == 's4'); // Iterable (s1, s4)
print(list_where.toList()); // [s1, s4]
final list_map = list.map((str) => 'new $str'); // Iterable (new s1, new s2, new s3, new s4);
final list_reduce = list.reduce((v, e) => v + ', ' + e); // (반환 타입이 String) s1, s2, s3, s4
final list_fold = list.fold(0, (v, e) => v + e.length); // (반환 타입 아무거나 가능) 8

// Map
Map<String, String> map = {
	'a' : 'a1',
    'b' : 'b2',
    'c' : 'c3',
};
print(map['b']); // b2
print(map.keys); // Iterable (a, b, c)
print(map.values); // Iterable (a1, b2, c3)

// Set
Set set = {'s1', 's2', 's3'};
set.contain('s2'); // true
set.toList(); // Set to List
Set.from(list); // Set from List

// enum
enum Status {
	ready,
    play,
    done,
}

Status status = Status.ready;
print(status); // Status.ready

 

연산자

// 사칙연산
+
-
*
/ // 몫
% // 나머지
++
--
+=
-=
*=
/=


// null 관련 연산자
// nallable
double? number1 = 1;

// not null
double number2 = null; // 에러 발생

// null 로 초기화
double? number;

// null 이면 할당.
number ??= 3; // 3

// not null 이면 할당하지 않음.
number ??= 4; // 3


// 값 비교
>
<
>=
<=
==
!=


// 타입 비교
print(number is int); // false
print(number is double); // true
print(number is! int); // true
print(number is! double); // false


// 논리 연산자
&&
||

 

제어문

if
else if
else

switch() {
	case 1 :
    	print();
    	break;
    default:
    	print();
}

for(int i=0; i < 10; i++) {
	print(i);
}

List<int> list = [1,2,3];
for(int n in list) {
	print(n);
}

while() {
}

do {
} while()

 

함수와 typedef

void main() {
	// 고정된 매개변수(포지셔널 파라미터)
      print(addTwoNumbers1(2, 3));

      // 이름이 있는 매개변수(네임드 파라미터)
      print(addTwoNumbers2(a:2, b:3));

      // 고정된 매개변수 기본값 지정
      print(addTwoNumbers3(2));
      print(addTwoNumbers3(2, 1));

      // 이름이 있는 매개변수 기본값 지정
      print(addTwoNumbers4(a:2));
      print(addTwoNumbers4(a:2, b:1));


      // typedef 는 일반적인 변수의 type 처럼 사용.
      Operation oper = add;
      oper(1, 2);

      oper = subtract;
      subtract(5, 2);

      calculate(3, 4, add);
}

// 함수의 시그니처 정의.
typedef Operation = void Function(int x, int y);

void add(int x, int y) {
  print('Add Result = ${x + y}');
}

void subtract(int x, int y) {
  print('Subtract Result = ${x - y}');
}

// dart 에서 함수는 일급 객체(일급 시민)이므로 함수를 값처럼 사용 가능.
// typedef 으로 선언한 함수를 매개변수로 사용 가능.
void calculate(int x, int y, Operation oper) {
  oper(x, y);
}

int addTwoNumbers1(int a, int b) {
  return a + b;
}

int addTwoNumbers2({required int a, required int b}) {
  return a + b;
}

int addTwoNumbers3(int a, [int b=3]) {
  return a + b;
}

int addTwoNumbers4({required int a, int b=3}) {
  return a + b;
}

 

기본 문법은 이정도로 정리하겠다.^^

반응형

+ Recent posts