내일배움캠프 Flutter 트랙
[1주차] Dart 문법 이해하기
변수 생성
String stringValue = "문자열";
int intValue = 2;
bool booleanValue = false;
배열 선언
List<int> cards = [];
배열을 선언할때는 어떤 유형의 배열인지를 제네릭(Generic)으로 선언.
제네릭(Generic) : <> 괄호 중간에 선언하는 타입
반복문
void main() {
var sum =0;
for(var i =0; i<1000; i++){
sum+=i;
}
print(sum); // 499500
}
함수 생성
int add(int a, int b) {
int sum = a + b;
return sum;
}
void main() {
int result = add(3, 5);
print('결과: $result'); // 출력: 결과: 8
}
포지셔널 파라미터 vs 네임드 파라미터
1) 포지셔널 파라미터
int substract(int a, int b) {
int sum = a - b;
return sum;
}
void main() {
int result = substract(3, 5);
int result2 = substract(5, 3);
print('결과: $result'); // 출력: 결과: -2
print('결과: $result2'); // 출력: 결과: 2
}
2) 네임드 파라미터
int add({required int frontValue,required int endValue}) {
int sum = frontValue + endValue;
return sum;
}
void main() {
int result = add(frontValue : 3, endValue : 5);
print('결과: $result'); // 출력: 결과: 8
}
이름과 타입을 지정해서 전달하므로 파라미터의 순서는 상관이 없음.
2-1) 옵셔널 파라미터
int add({required int frontValue,required int endValue, int? expansionValue}) {
int sum = frontValue + endValue + (expansionValue??0);
return sum;
}
void main() {
int result = add(frontValue : 3, endValue : 5);
int result2 = add(frontValue : 3, endValue : 5, expansionValue : 3);
print('결과: $result'); // 출력: 결과: 8
print('결과: $result2'); // 출력: 결과: 11
}
조건문
1) if-else
void main() {
int number = 3;
if (number > 5) {
print('number는 5보다 큽니다.');
} else {
print('number는 5보다 크지 않습니다.');
}
}
2) switch
void main() {
int number = 2;
switch (number) {
case 1:
print('number는 1입니다.');
break;
case 2:
print('number는 2입니다.');
break;
case 3:
print('number는 3입니다.');
break;
default:
print('number는 1, 2, 3 중 하나가 아닙니다.');
}
}
switch문을 사용하는 경우
-조건이 특정 값(상수)과 비교될 때
-코드의 가독성을 높이고 싶을 때
-enum 타입과 같은 열거형을 비교할 때
동기/비동기
1) 동기 방식 : 동기 방식에서는 작업이 순차적으로 처리되는 것을 의미. 하나의 작업이 끝나야 다음 작업이 진행.
void main() {
print('작업 1 시작');
performTask();
print('작업 1 완료');
}
void performTask() {
print('작업 2 실행');
}
출력
작업 1 시작
작업 2 실행
작업 1 완료
2) 비동기 방식: 작업이 병렬적으로 처리될 수 있음. 작업이 완료될 때까지 기다리지 않고 다음 작업을 바로 시작.
주로 네트워크 요청, 파일 읽기/쓰기 등 시간이 걸리는 작업에 사용.
void main() {
print('작업 1 시작');
performTask();
print('작업 1 완료');
}
Future<void> performTask() async {
await Future.delayed(Duration(seconds: 2));
print('작업 2 실행');
}
출력
작업 1 시작
작업 1 완료
(2초뒤에)
작업 2 실행
동기 방식의 단점
- 블로킹
시간이 오래 걸리는 작업이 있을 경우 전체 프로그램의 응답성이 저하
하나의 작업이 완료될 때까지 다른 작업이 블로킹 - 비효율성
네트워크 요청 동안 CPU는 유휴 상태
자원이 비효율적으로 사용될 수 있음
비동기 방식의 단점
- 복잡성
코드가 복잡해질 수 있음
비동기 함수의 오류 처리 등이 복잡 - 디버깅 어려움
비동기 코드의 흐름을 추적하고 디버깅하는 것이 더 어려움
이벤트 루프와 비동기 호출 스택을 이해해야 함
'TIL' 카테고리의 다른 글
[TIL] Dart 문법 기초 (0) | 2024.10.28 |
---|---|
[TIL] 5주차 메모 앱 개발 (1) | 2024.10.25 |
[TIL] firebase 연동 (1) | 2024.10.24 |
[TIL] 상태관리 (0) | 2024.10.23 |
[TIL] 앱 개발 종합반 - 2주차 위젯 (0) | 2024.10.22 |