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