플러터의 첫 발!

🦥 플러터의 첫발

플러터 공부를 시작해보겠다.

플러터는 dart 언어를 사용 하는 것을 알아두자!

플러터를 웹에서 간단하게 할수 있도록 웹페이지 하나를 소개해주겠다.

https://dartpad.dev에 접속하면 바로 Dart 언어를 사용해 코드를 실행해볼 수 있다.

문법은 자바스크립트 문법이랑 매우 유사하고, 자주 에러가 생성되는 부분은 코드 마지막에 ; (세미콜론)을 안붙이면 무조건 에러가 출력된다.

void main() {
 // variable
  var name = '코드팩토리';
  print(name);
  name = 'zh';
  print(name);
  
  // interger
  int number = 1;
  print(number);
  int number2 = 12;
  print(number2);
  int number3 = -20;
  print(number3);
  
  // 덧셈
  print(number + number2);
  // 뺄셈
  print(number - number2);
  // 곱셈
  print(number * number2);
  // 나눗셈
  print(number / number2);
  
  // 실수
  // double
  double doubleNumber1 = 2.5;
  double doubleNumber2 = 2.1;
  print(doubleNumber1 + doubleNumber2);
  print(doubleNumber1 - doubleNumber2);
  print(doubleNumber1 * doubleNumber2);
  print(doubleNumber1 / doubleNumber2);
  
  // 참/거짓
  // boolean
  bool isTrue = true;
  bool isFalse = false;
  print(isTrue);
  print(isFalse);
  
  // 글자
  // string 무조건 대문자로 시작해야함
  String strName = '스트링1';
  String strName2 = '스트링2';
  
  print(strName);
  print(strName2);
  
  // var String 의 차이 (할당된 값으로 자동으로 타입을 유추 한다.)
  var varName1 = '스트링3'; // String
  var varNumber = 20; // int
  
  print(varName1.runtimeType);  // String 런타입 되었을때의 타입을 알려주는 내장 메소드
  
  // 글자타입
  // String
  print(strName + strName2); // 스트링1스트링2
  print(strName + ' ' + strName2); // 스트링1 스트링2
  print('${strName} ${strName2}'); // 스트링1 스트링2
  // 조금 더 생략해서
  print('$strName $strName'); // 스트링1 스트링2 , 괄호가 없어도된다.
  
  // Dynamic
  // Dynamic 에는 뭐든지 할당 가능하다.
  
  dynamic name13 = 'code13';
  
  print(name13); // code13
  
  dynamic number13 = 13;
  print(number13); // 13
  
  // 그렇다면,  var 와는 무슨 차이가 있을까? var 도 모든 타입이 다 할당이 가능하다.
  var name14 = '블랙핑크';
  
  print(name14); // 블랙핑크
  
  print(name13.runtimeType); // String
  
  print(name14.runtimeType); // String
  
  name13 = 2; // Daynamic 으로 미리 String 으로 선언을 해두었지만, number로 잘바뀌는것을 볼수있다.
  
//   name14 = 4;  // var 타입으로 선언한 변수는 이미 정해놓은 타입대로 가는 것이지 변경이 불가능하다.
  
  
// nullable - null 이 될 수 있다. ? 
// non-nullable - null 이 될 수 없다. !
// null - 아무런 값도 있지 않다. 
  String nullName = 'code';
  print(nullName); // code
  
//   nullName = null; // 에러가 나는 이유는 null이 들어갈수 없는 String 타입인데 null 을 넣었다.
  // 우리가 방금 까지 배운 타입들은 전부 다 2가지로 나뉜다.
  // 그 타입만 들어갈 수있는 경우, 그 타입과 null 까지 포함하는 경우 
  
  // 이렇게 ? 가 들어가게 된다면 null 까지 들어가되는 경우이다. 
  String? name5 = '블랙핑크';
  
  name5 = null;
  print(name5); // null
   
  // 다른 방법으로 
 String name67 = '블랙핑크67';
  print(name67!); // 블랙핑크67 , 현재 이값은 null 값이 될 수 없다.
  
  
  // final 
  // final 로 변수를 선언하게 되면 다시 재할당 불가능하다. 
  final String name8 = 'code8';
  print(name8); // code8
//  name8 = 'ccc'; 변수 재할당도 안되고,
//   name8 = 8; 타입 변경해서도 안된다.
  
  // const
  const String name9 = 'code1';
  
  print(name9); // code1
  
//   name9 = 'd'; const 역시도 같다.

// final 과 const 를쓰면 좋은점은 Type 선언한거를 생략 가능하다.
  final name10 = 'code10';
  const name11 = 12;
  
  print(name10); // code10
  print(name11); // 12
  
// 차이점을 알기전에 datetime 을알야한다.
  DateTime now = DateTime.now();
  
  print(now); // 2022-10-21 22:52:41.310 , 현재날짜가 출력된다.
  
  // now 라는 변수에 현재시간의 값을 저장 할수 있다. 
  // 나온 시간이 Run  버튼을 눌렀을떄 시점의 시간이 아니고! , 버튼을 누르고 코드가 실행되는 시점의 시간인 것이다.
  // 그렇다면 현재 날짜를 출력하는 변수명만다른 변수가 있다고 한다면, 같은 시간을 담는 것은 아니다.위의 설명대로 코드가 실행되었을때의 시점의 시간을 저장하기 떄문이다. 하지만 코드의 실행 속도가 너무빨라서 같은 시간이 저장이 된다.
  
  // 그러면 final 과 const 로 선언을 해서 테스트를 진행해보자! 
  final DateTime finalNow  = DateTime.now();
//   const DateTime constNow = DateTime.now();
  
  // const 같은 경우에는 buildTime 에 대한 값을 가지고 있어야한다.
  // final 같은 경우는 buildTime 에 대한 값이 필요없다. 
  // buildTime 이란?? 코드를 작성하면 컴퓨터는 2진수로 변환이 된다. ex ) 1010101 
  // 10101010 으로 코드를 작성할 수 없으니 우리의 편리를 위해 프로그래밍 언어를 만들었다. 
  // Run 을 딱하는 순간에 build 가 이뤄지게된다. build 를 하게 되면서 컴퓨터가 이해할 수 있게 101010 변환을하는데 이것이 buildTime 이다.
  // 그렇다면? buildTime 의 값을 알아야한다라는 의미는 ? 지금 당장 코드를 작성했을때의 시간을 알아야한다. 하지만 알수 있는 방법이 없다. 왜냐 DateTiem.now()는 코드가 실행되는 순간 시점의 시간을 가져오기 때문이다!
  // 그래서 const로는 선언이 안된다.  
  
  
  
  // operator
  int number12 = 2;
  print(number12);
  
  print(number12 % 2); // 0 ,  나머지 값 출력
  print(number12 % 3); // 2
  
  number12 ++; // 더하기 
  print(number12); // 3
  number12 --; // 빼기 
  print(number12); // 2
  
  
  double number16 = 4.0;
  print(number16); // 4
   
  number16 += 1;
  print(number16); // 5
   
  number16 -= 1;
  print(number16); // 4
  
  number16 *= 2;
  print(number16); // 8
  
  number16 /= 2;
  print(number16); // 4
  
  
  
  // null 조건 의 operator
  // null 
  double? number17 = 4.0;
  print(number17); // 4
  
  number17 = 2.0;
  print(number17); // 2
  
  number17 = null;
  print(number17); // null
  
  number17 ??= 3.0; // 만약 number17 의 값이 null 이라면? 오른쪽 같으로 바꿔라! 위에 null 이라고 선언을 해두었기 때문에!
  print(number17); // 3
  
  
  // 값을 서로 비교하는 operator
  int number18 = 1;
  int number19 = 2;
  
  print(number18 > number19); // false
  print(number18 < number19); // true 
    print(number18 >= number19); // false
  print(number18 == number19); //false
  print(number18 != number19); // true
  
  
  
  // 타입을 비교하는 operator
  int number20 = 1; 
  
  print(number20 is int); // true
  print(number20 is String); // false
  
  print(number20 is! int); // false
  print(number20 is! String); // true
  
  // 논리 operator
  // && - and 조건
  // || - or 조건
  
  bool result = 12 > 10;
  print(result); // true
  
  bool result1 = 12 > 10 && 1 > 0;
  print(result1); // true
  
  bool result2 = 12 > 10 && 0 > 1; 
  print(result2); // false
  
  bool result3 = 12 > 10 || 1 > 0;
  print(result3); // true
  
  bool result4 = 12> 10 || 0 > 1;
  print(result4); // true
  
  bool result5 = 12 < 10 || 0 > 1; 
  print(result5); // false
  
  
  // List 
  // 리스트 앞은 무조건 대문자로 시작  
  // <> 제너릭 : List 안에 어떤 타입이 들어갈 건지 정의 해줘야한다.
  
  List<String> blackPink = ['제니','지수', '리사','로제'];
  List<int> blackPinkAge = [20,20,20,21];
  print(blackPink); // [제니, 지수, 리사, 로제]
  print(blackPinkAge); // [20, 20, 20, 21]
  
  
  // index
  // 순서
  // 0 부터 시작
  print(blackPink[0]); // 제니
  
  // list 의 크기 구하기
  print(blackPink.length); // 4
  // 추가
  blackPink.add('김희동'); // [제니, 지수, 리사, 로제, 김희동]
  print(blackPink);
  
  // 삭제
  blackPink.remove('김희동');;
  print(blackPink); // [제니, 지수, 리사, 로제]
  
  // List의 index 찾기
  print(blackPink.indexOf('리사')); // 2
 
  // Map 
  // Key / Value  
  Map<String, String> dictionary = {
    'Harry Poter' : '해리포터',
    'Ron Weasley': '론 위즐리',
    'Hermione Granger': '헤르미온느 그레인저'    
  };
  print(dictionary); 
  
  Map<String, bool> isHarryPotter = {
    'Harry Poter' : true,
    'Ron Weasley': true,
    'Hermione Granger': true    
  };
  print(isHarryPotter); 
  
//   map 에 추가할수 있는 방법
  isHarryPotter.addAll({
    'Spider': false
  });
  print(isHarryPotter);
  
  // key에 해당하는 value값 가져오기
  print(isHarryPotter['Spider']); // false
  
  // 새로운 키와 벨류를 넣기
  isHarryPotter['Ironman'] = false;
  print(isHarryPotter); // {Harry Poter: true, Ron Weasley: true, Hermione Granger: true, Spider: false, Ironman: false}

  
  // value 값 변경 가능
  isHarryPotter['Spider'] = true; 
  print(isHarryPotter); // {Harry Poter: true, Ron Weasley: true, Hermione Granger: true, Spider: true, Ironman: false}
  
  // 해당 키값 제거
  isHarryPotter.remove('Harry Poter'); 
  print(isHarryPotter); // {Ron Weasley: true, Hermione Granger: true, Spider: true, Ironman: false}
  
  // 키값만 가져오기
  print(isHarryPotter.keys); // (Ron Weasley, Hermione Granger, Spider, Ironman)
  
  // 벨류 값만 가져오기
  print(isHarryPotter.values); // (true, true, true, false)

  
  // set 
  // map 이랑 매우 비슷하지만 키 랑 밸류 ㄷ짝이아니라 하나의 값만 저장 가능 
  // map 은 중복 가능 set 은 중복 값이 안됌 
  final Set<String> names = {
    'kim',
    'shin',
    'lee',
  };
  
  print(names); // {kim, shin, lee}
  
  print(names.contains('shin')); // true
  
  
  // if 문
  
  int ifNumber = 2; 
  if(ifNumber % 2 == 0){
    print('나머지가 0입니다.');
  } else if(ifNumber & 3 == 1){
   print('나머지가 1입니다.');
  } else {
    print('나머지가 2입니다.');
  }
 
  // switch 문
 switch(ifNumber % 3) {
   case 0 : print('나머지가 0입니다.');
     break;
     case 1 : print('나머지가 1입니다.');
     break;
   default: print('나머지가 2입니다.');
     break;
}
 
  //for loop
 for(int i =0; i < 10; i++){
    print(i); 
 }
  
  int total1 = 0;
  List<int> numbers1 = [1,2,3,4,5];
  
  for(int i=0; i < numbers1.length; i++) {
    total1 += numbers1[i];    
  }
  
  print(total1); // 15
  
  total1 = 0;
  
  // 다른 방법으로 더하기
  for(int number in numbers1){
    total1 += number;    
  } 
  
  print(total1); // 15
  
  // while loop
  
  int total3 = 0;
  
  while(total3 < 10){
      total3 +=1;
    
    if(total3 == 5){
      break;
    }
  };
  
  print(total3); // 5
  
  for(int i=0; i < 5; i ++){
    if(i == 3){
      continue;
    }
    print(i); // 0 1 2 3 4 
  }  
}

Categories:

Updated:

Leave a comment