프로그래밍/Flutter
Flutter 기본기 Dart 언어 기본 익히기
우징어🦑
2024. 11. 7. 17:34
출처
[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출! 강의 | 코드
코드팩토리 | iOS 앱과 Android 앱을 코드 한번만 작성해서 모두 제작한다! 코드팩토리의 Flutter 초보 탈출 강의! 디테일한 이론과 흥미로운 프로젝트를 진행하며 탄탄한 기본기 쌓기!, 10개의 프로젝
www.inflearn.com
인프런에서 모바일 앱 개발 Flutter 강의를 듣기 시작했다.
강의를 들으면서 새롭게 알게 된 내용 위주로 간단히 정리하고자 한다.
안쓰면 까먹는걸 알기에.. 내 뇌를 위해 쓰는 글
변수
dynamic
void main() {
// dynamic 선언 변수는 여러 타입으로 변수 할당 가능
dynamic name = '홍길동';
var name2= '김사또';
name = 1; // 정상
name2 = 2; // 오류
}
?와 ! (nullable, non-nullable)
void main() {
String name = '홍길동'; // non-nullable
String? name2 = 'ㅇㅇ'; // nullable
name = null; // 오류
name2 = null; // 정상
print(name2!); // nullable 변수에 !를 붙이면 현재 이 값은 null이 아니라는 뜻
}
Final과 Const
공통점
void main() {
final String name = '홍길동'; // final로 선언한 변수는 값 변경 불가
name = '이몽룡'; // 오류
const String name2 = '김사또'; // const 또한 값 변경 불가
name2 = '춘향이'; // 오류
// final, const 는 var 선업 타입 생략 가능
final name = '홍길동';
const name2 = '김사또';
}
차이점
void main() {
DateTime now = DateTime.now();
DateTime now2 = DateTime.now();
// DateTime.now(): 실행 버튼을 누르는 순간이 아닌, 이 코드가 실행되는 순간의 날짜와 시각.
// 즉, 위 코드를 동시에 실행해도 now, now2 의 값은 다름.
final DateTime now = DateTime.now(); // 정상
const DateTime now2 = DateTime.now(); // 오류
}
final : Build time 값 몰라도 됨.
const : Build time 의 값을 알고 있어야 함
Build란 ?
- 프로그래밍 언어를 Build를 해서 컴퓨터가 이해할 수 있는 0,1 의 형태로 코드를 변환하는 것
Build time이란?
- Build가 되는 시점
Datetime.now()는 코드의 실행 순간을 알려주는 함수인데, build 시점에는 해당 함수의 실행 시점을 알지 못함.
- 빌드 다음에 실행이므로
- 따라서 const 로 선언한 DateTime 타입 변수의 now() 함수 실행 시 오류 발생
Operator
void main() {
double number = 4.0;
number = 2.0;
print(number);
number = null;
print(number); // null
number ??= 3.0; // ??: number가 null이면 3.0 으로 바꾸고, null이 아니면 바꾸지 않는다.
print(number); // 3
double number2 = 1.0;
number2 ?? = 3.0;
print(number2); // 1. number2가 null이 아니므로 3.0으로 바꾸지 않고 1.0 출력
}
?? 는 처음 봤다. 삼항연산자랑 유사한 느낌..
void main() {
int number1 = 1;
print(number1 is int); // true
print(number1 is String); // false
print(number1 is! int); // false
print(number1 is! String); // true
}
void main() {
bool result = 12 > 10; // true
bool result1 = 12 > 10 && 1 > 0; // true && true -> true
bool result2 = 12 > 10 && 1 < 0; // true && false -> false
bool result3 = 12 > 10 || 1 > 0; // ture || true -> true
bool result4 = 12 > 10 && 1 < 0; // true && false -> true
bool result5 = 12 < 10 && 1 < 0; // false && false -> false
}
List
void main() {
List<String> fruits = ['Apple', 'Orange', 'Banana'];
List<int> numbers = [1,2,3,4,5];
print(fruits.length);
fruits.add('Coconut');
fruits.remove('Coconut');
fruits.indexOf('Banana');
}
Map
void main() {
// Map : Key, Value
Map<String, String> dict = {
'Harry Potter': '해리포터',
'Ron Weasley': '론 위즐리',
'Hermione Granger': '헤르미온느 그레인저',
};
dict.addAll({
'Ironman': '아이언맨',
});
dict['Ironman'] = '로다주';
dict.remove('Ironman');
print(dict.keys);
print(dict.values);
}
Set
중복 제거된 List
contains() 함수 : 값 존재 여부를 true / false 로 반환
함수
void main() {
addFunc(1,2,3); // 6
addFunc(10); // 12
}
// parameter를 [] 로 묶어주면 있어도 되고 없어도 되는 optional parameter 처리
// y, z 에 null이 들어갈 수 있어야 하므로 파라미터 선언 부분에 int -> int? 처리
// 그렇다 하더라도 x + y + z 에서 null 을 더할 수 없으므로 오류 발생
// 따라서 y=0, z=0 으로 null 일 때 기본값 지정
addFunc(int x, [int y = 1, int z = 1]) {
int sum = x + y + z;
print(sum);
}
named paramter로 선언한 함수
void main() {
addFunc(x: 1, y: 2, z: 3); // 6
addFunc(x: 1, y: 2 ); // 3
}
// named paramter
addFunc({
required int x,
required int y,
int z = 0, // optional parameter
}) {
int sum = x + y + z;
print(sum);
}
arrow function
void main() {
int result = addFunc(10, y: 20);
int result2 = addFunc(10, y: 30, z: 40);
print('result: $result'); // result: 40
print('result2: $result2'); // result2: 80
print('sum: ${result + result2}'); // sum: 120
}
int addFunc(int x, {
required int y,
int z = 10,
}) => x + y + z;
typedef
void main() {
Operation op = add;
int result = op(10, 20); // 30. add 함수 실행됨.
op = subtract;
int result2 = op(10, 20); // -10. subtract 함수 실행됨.
}
// signature
typedef Operation = int Function(int x, int y);
int add(int x, int y) => x + y;
int subtract(int x, int y) => x - y;
typedef 에 선언된, signature에 부합하는 모든 함수를 집어넣어서 사용 가능
현실적으로 어떤 형태로 사용하느냐,
void main() {
calculate(30, 40, add); // 70
calculate(10, 50, subtract); // -40
}
// signature
typedef Operation = int Function(int x, int y);
int add(int x, int y) => x + y;
int subtract(int x, int y) => x - y;
int calculate(int x, int y, Operation op){
return op(x, y);
}
함수 파라미터로 typedef로 정의된 signature를 받아서 사용