본문 바로가기
카테고리 없음

플러터 공부 시작 Day 1

by 벡터[x,y] 2023. 4. 4.
반응형

안녕하세요 제가 이번에 시작하는 것은 제가 여러 번 도전했다가 실패했던 모바일 앱 개발 공부입니다. 이 글에서는 온라인 강의를 듣고 공부한 내용을 간단한 노트형식으로 남겨볼까 합니다.

 

일단 플러터는 안드로이드와 ios 모바일 앱 개발을 동시에 할 수 있는 구글에서 만든 오픈소스 프레임워크입니다. 플러터는 다트(dart)라는 언어를 사용하는데요. 오늘은 플러터 공부 Day1으로 Dart 기초 문법을 공부하려고 합니다. Dart 문법 공부는 google에 dartpad를 검색하면 나오는 사이트를 이용했습니다.

 

 

Variable

var - 모든 가능, 단 헷갈림, 한번 선언하면 type이 fix됨, method나 function에서 주로 사용

      - class에서는 타입을 써두기

int - 정수

double - 실수

bool - 참과 거짓

String - 문자, 더하기(+) 가능

dynamic - var과 같음. 단, 변수의 type 변경 가능

late - 나중에 데이터를 넣어야 변수를 사용할 수 있다

- 변수의 값을 바꾸고 싶으면 변수 앞 type을 빼고 다시 선언

- runtimeType (variable의 type)

- ${} 사용하면 print안에 변수 사용가능, 혹은 변수 하나만 사용하는 경우 줄여서 $만 사용가능

nullable vs non-nullable

- nullable: 아무런 값도 가지지 않을 수 있다

- non-nullable: 무조건 값을 가지고 있어야 한다

- ? -> nullable,  ! -> non-nullable

- ex) String? name = "Flutter"; -> nullable

         print(name!);

final vs const

-final: 값 변경 불가능, var 부분 생략가능, buildtime 값을 몰라도 됨 ex) DateTime.now() 가능

-const: 값 변경 불가능, var 부분 생략가능, buildtime 값을 무조건 알아야 됨-> 앱스토어에 보내기 전에 알아야 될 값

operator

 +, -, /, *, %(나머지),

재저장: ++, --, +=, -=, *=, /=

??= : null이라면 값을 오른쪽 값으로 바꿔라

<, >, <=, >=, ==, !=

variable type 비교

ex) print(variable1 is int);

      print(variable1 is! String);

and, or

&& - and

|| - or

List

ex) List<String> list1 = ['사과', '바나나'];

<> - generic: 값의 type을 지정

- 값을 가져오려면: index사용 -> ex) print(list1[0]); -> 사과

- index 시작은 0

- list1.length -> list의 길이 (1부터 시작)

- list1.add('값'); -> list의 마지막에 값 추가

- list1.remove('값');  -> list의 값 삭제

- list1.indexOf('값'); -> list에 있는 값의 index 가져오기

collection if - true라면 아이템을 넣어라

ex)

var isTrue = true;

var list1 = [1,2,3,4 if(isTrue) 5],

-> isTrue가 true일때만 5를 추가한다

collection for - list 안에서 for loop을 돌린다

ex) 

Row(
children: [
const Calendar(
text: "TODAY",
textColor: Colors.white,
),
const Icon(
Icons.circle,
color: Color(0xFFA4337D),
size: 12,
),
for (var day in days)
Calendar(
text: "$day",
textColor: Colors.white.withOpacity(0.5),
)
],
),
List<int> days = [17, 18, 19, 20, 21, 22, 23];

Map

- ex) Map<int, String> map1 {1: '사과', 2: '바나나', 3: '오렌지'}; -> 1,2,3 은 key, 사과 바나나 오렌지는 value

- map1.addAll({4: '토마토', 5: '아보카도'}); -> map에 값을 다 넣어주기

- map1['key'] = 'value'; -> 추가하거나, 편집하기

- map1.remove('key'); -> key 와 value 를 같이 지움

- map1.keys; -> key값을 모두 가져온다

- map1.values; -> value값을 모두 가져온다

Set

- List와 같음. 단, 중복은 자동으로 없애줌

ex) Set<String> set1 = {'토마토', '토마토', '오렌지', '바나나'}; -> '토마토', '오렌지', '바나나'

- set1.add('value');

- set1.remove('value');

- set1.contains('value'); -> value를 가지고 있는지(true or false)

if

ex) if(number % 2 == 0){

          print("even number");

      }

     else if(number % 2 == 1){

         print("odd number");

     }

     else{

         print("invalid");

     }

?? 를 사용하면 null 일때와 아닐때를 간단하게 구연할 수 있다

ex) print('hello my name is ${name ?? 'no name'}'); -> null 일때는 'no name', 값이 있을때는 name을 출력

switch

ex) switch(number % 3){

          case 0:

              print('나머지가 0');

              break;

          case 1:

              print('나머지가 1');

              break;

         default:

              print('나머지가 2');

              break;

      }

- default 는 else와 같다

- break; 로 나와줘야된다

for loop

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

          print(i);

      }

while loop

ex) int total = 0;
      while(total < 10){
        total += 1;
      }

- do while loop (계산 먼저)

   - ex) do{

                   total += 1;

            } while(total < 10);

break

- switch, while, for loop에서 break;를 사용해서 loop을 나갈 수 있다.

continue

- if문에서 현제 Loop만 스킵해라

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

          if(i == 5){

              continue;

          }

     } -> 0,1,2,3,4,6,7,8,9 -> 5없음

enum

void main(){} 위에 있음

ex) 

enum Status{

    approved,

    pending,

    rejected,

}

void main(){

    Status status = Status.pending;

    status = Status.approved;

}

- 에러 뜰 가능성이 적음

- Status.approved.name; 을 사용하면 approved라는 단어만 가져올 수 있다

function

ex)

int function1(arguments){

    blah blah blah

    return integer;

}

int -> return type(void: no return)

argument -> 받는 값

arguments

    - positional parameter - 순서가 중요 ex) (int x, int y, int z)

    - optional parameter - 있어도 되고 없어도 되고 ex) (int x, [int? y, int? z]) -> y랑 z는 필수가 아님, 안 넣으면 null 이기에 ?필요

                                           혹은 int y = 10, int z = 15 같이 값을 정해줘야 됨 

    - named parameter - 이름이 있다(순서 중요X)  ex) ({required int x, required int y, required int z}) -> 함수 부를 때 이름

                                         예를 들어 (x: 10, y: 15, z: 20)

    - optional parameter in named parameter - required를 지우면 된다. 

                                                                               ex) ({required int x, required int y, int z = 10}) -> z값이 안정해지면 z는 10.

- arrow function

    - return을 간단하게 ex) int function(parameters){} => integer;

typedef

- type 의 이름을 정해줄 수 있음

ex) 

typedef ListOfInts = List<int>;

ListOfInts reverseListOfNumbers(ListofInts list) => list.reveresed.toList();

위에 예시처럼 List<int>대신에 ListOfInts라는 type을 쓸 수 있음

 

- 함수를 편리하게 사용할 수 있음. 함수와 비슷. 단, 바디가 없음

ex)

void main(){

    Operation operation = add; // operation에 원하는 함수를 넣을 수 있음

    int result = operation(10, 15, 20);

    int result2 = calculate(10, 20, 30, add);

}

typedef Operation = int Function(int x, int y, int z); // signature, int x int y int z 를 받는 함수에 이름을 붙여준것 뿐

int add(int x, int y, int z) => x + y + z; // addition function

int calculate(int x, int y, int z, Operation operation)=> operation(x, y, z); // operation 까지 받아서 그 operation의 값을 return

 

 

 

 

 

반응형

댓글