[Week1] - Dart 시작하기

다시보려고 쓰기·2022년 9월 3일
0

Flutter 배우기

목록 보기
1/1
post-thumbnail

Dart 시작하기

Dart는 구글이 앱을 위해 디자인한 프로그래밍 언어로, 크로스플랫폼 웹 프레임워크인 Flutter가 이 언어를 사용하고 있다. Flutter를 배우기 전에 먼저 Dart를 익혀보고자 한다.

먼저 간단하게 살펴보기!

  • Print를 이용한 기본 Hello World
void main() {
    print('Hello world');
}
  • for문을 이용해서 Hello

void main() {
  for (int i = 0; i < 5; i++) {
    print('Hello ${i + 1}');
  }
}
  • 변수 선언 후 출력하기
void main() {
    const name = 'Hello dart starter';
    print(name);
}

이렇게 하면 다양하게 원하는 구문을 출력할 수 있다.
Dart는 다른 언어와도 마찬가지로 Camel case를 사용한다.

ex) yourName, numberCount, learningDartClass

다양한 변수 사용

여기서는 간단하게 변수의 사용을 살펴보고 다음 게시글에서 자세하게 다룰 예정이다.
숫자는 int, double 등을 사용하고, 문자열은 String 은 아래와 같이 사용한다.
변수 선언 후 다양한 방법으로 출력할 수 있다.
'' 내에서 사용할 때는 $를 붙여주면 된다.

void main() {
   String name = 'Jang';
   String level = 'Starter';
  
  print(name + '은(는) ' + level + '입니다.');
  print('$name은(는) $level입니다.');
  print('${name + ' ' + level} 이다.');
}

Boolean 형태는 bool 이라고 명시하며, 아래와 같다.

void main() {
  bool isTrue = true;
  bool isFalse = false;
  
  print(isTrue);
  print(isFalse);
}

var와 dynamic type의 차이

void main() {
  var name = 'hello dart';
  print (name);
  
  name = 1;
  	// Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  	//name = 1;       ^
	//Error: Compilation failed.

  print(name);
}

var로 선언 후 다른 값을 대입하면 에러가 발생한다.
const와 마찬가지로 초기 선언된 값이 변경되지 않는다.
var로 타입을 변경하고 싶으면 초기값을 대입하지 않고 변수만 선언해서 사용하면 에러가 발생하지 않는다.

void main() {
  var name;
    
  name = 'hello dart';
  print (name);
  
  name = 1;
  print(name);
}

List와 Map

List

void main() {
 List langList = [
   'Java',
   'Javascript',
   'Dart',
   'Python',
 ];
  
  print(langList);
  
  // 타입을 지정한 List
  List<String> varList = [
    'String',
    'const',
    'bool',
    'int',
    'double'
  ];
  
  // index 사용
  print(varList[0);
}

Map

void main() {
  Map fruit = {
    'Orange' : '오렌지',
    'Apple' : '사과',
    'Banana' : '바나나'
  };
  
  // 데이터 타입 지정
  Map<String, String> fruit2 = {
    'Orange' : '오렌지',
    'Apple' : '사과',
    'Banana' : '바나나'
  };
  
  //키와 값을 추가하기
  fruit2.addAll({
    'Strawberry' : '딸기'
  });
  
  //키를 이용해 값을 변경
  fruit2['Apple'] = '사아과아';
  
  //키를 이용해 삭제
  fruit2.remove('Banana');
  
  //키를 List 형태로 출력
  print(fruit2.keys.toList());
  
  //값을 List 형태로 출력
  print(fruit2.values.toList());
}

final, const

final과 const 둘 다 한 번 값을 선언하면 변경할 수 없다.

void main() {
  final name = '당근';
  
  // 타입을 지정하고 final사용
  final String name2 = '고구마';
  
  // final은 변수의 값을 변경할 수 없다.
  
  // const와 final의 차이
  // final의 경우 runtime에 값이 지정되어도 상관없다. 
  // const는 build time에 반드시 값이 지정되어야 한다.
  
  final now = new Date.now();
  print(now);
  
  const now2 = new DateTime.now();
  print(now2);
  //Error: New expression is not a constant expression.
  //const now2 = new DateTime.now();
  //             ^^^
  // Build Time에 값을 알 수가 없기 때문에 에러가 발생한다. 
}

열거형 enum

enum Status {
  approved,
  rejected,
  pending,
}

void main() {
  Status status = Status.approved;
  
  switch(status){
    case Status.approved:
      print('승인');
      break;
      
    case Status.rejected:
      print('거절');
      break;
    
    default:
      print('---');
      break;
  }
}

조건문 if, switch

void main() {
  int number = 2;
  
  if(number %  3 == 0){
    print('3의 배수입니다.');
  }else if(number % 4 == 0){
    print('4의 배수입니다.');
  }else{
    print('어떤 배수인지 알 수 없습니다.');
  }
  
  switch(number % 3){
    case 1:
      print('나머지가 1');
      break;
    case 2:
      print('나머지가 2');
      break;
    default:
      print('???');
      break;
  }
}

반복문 for, for in, while, do while

for, for in, while, do while

void main() {
  int total = 0;
  List<int> numbersList = [1,2,3,4,5,8];
  
  // for 
  for(int i = 0; i < numbersList.length; i++){
    total += numbersList[i];
  }
  
  print(total);
  
  // for in
  for(int number in numbersList){
    total += number;
  }
  
  print(total);
    
    
  // while
  while(total < 10){
    total ++;
  }  
   
  
  // do while
  do {
    print(total);
    total++;
  } while(total < 10);

break, continue

void main() {
  int total = 0;
  
  // break 
  // use break in while
  while(total < 20){
    print(total);
    
    if(total == 15) break;
    
    total ++;
  }
  
  // use break in for
  for(int i = 0; i < 20; i++){
    print(i);
    
    if(i == 15) break;
  }
  
  // continue
  for(int i = 0; i < 20; i++){
    
    // i가 15면 지나가기
    if(i == 15) continue;
    
    print(i);
  }
}

Class

다양한 parameter

Positional parameter
void main() {
  double res = linearExp(1, 2, 4);
  print(res);
}

// doubel type으로 반환되는 클래스
				//positional parameter : 위치 기반으로 값을 지정
double linearExp(double a, double b, double x){
  return a * x + b;
}
Optional parameter
void main() {
  // parameter값 그대로 계산이 된다.
  double res = linearExp(1, 2, 4);
  print(res);
  
  //b 값을 명시하지 않아도  default 값으로 계산이 된다.
  double res2 = linearExp(1, 2);
  print(res2);
}

// []안에 변수를 넣어주면 optional parameter가 된다.
// 2가 default 값인 optional parameter double b
double linearExp(double a, double x, [double b = 2]){
  return a * x + b;
}
Named parameter
void main() {
  double res = linearExp(1, 2, b: 4);
  print(res);
}

  // named parameter : parameter의 이름을 지정해줄 수 있다. 
double linearExp(double a, double x, {double b}){
  return a * x + b;
}

typedef

typedef는 함수를 미치 시그니처화해서 다양하게 응용하여 사용할 수 있다.
함수를 변수처럼 사용하는 것이 가능하다.

typedef FunctionName (parameter);
void main() {
  calculate(1,2, add);
  calculate(1,2, substract);
  
}

// int 2개를 받는 함수 선언
typedef Operation(int x, int y);

void add(int x, int y){
  print('result : ${x + y}');
}

void substract(int x, int y){
  print('result: ${x - y}');
}

void calculate(int x, int y, Operation oper){
  oper(x, y);
}

클래스 만들어서 사용하기

void main() {
  Intro intro = new Intro();  
  intro.sayName();
  
}

class Intro{
  String name = 'jang';
  
  void sayName(){
    print('저는 ${this.name} 입니다.');
  }
}

Constructor 생성자

void main() {
  Intro intro = new Intro('Jang');  
  intro.sayName();
  
  Intro intro2 = new Intro('Wawa');
  intro2.sayName();
  
}

class Intro{
  final name;
  
  Intro(
    //받고 싶은 값
    String name,
  ) : this.name = name;
  
  void sayName(){
    print('저는 ${this.name}입니다.');
  }
}

Constructor overloading

void main() {
  
  // 1.
  Intro jang = new Intro('Jang', '100');  
  jang.sayName();
  
  Intro wawa = new Intro('Wawa', '5');
  wawa.sayName();
  
  // 2. fromMap 사용하기 
  Intro jang2 = new Intro.fromMap({
    'name': 'Jang',
    'age' : '1000',
  });
  
}

class Intro{
  final name;
  final age;
  
  Intro(
    //받고 싶은 값
    String name,
    String age,
  ) : this.name = name,
    this.age = age;
  
  // 생성자에 이름붙여서 사용하기 
  Intro.fromMap(
    Map values,
  ) : this.name = values['name'],
  this.age = values['group'];
  
  void sayName(){
    print('저는 ${this.name}이고 ${this.age}살 입니다.');
  } 
}

0개의 댓글