[Flutter] final, const / Future

비나·2022년 11월 21일
0

Flutter

목록 보기
16/16
post-thumbnail

📌 final, const / Future

이번 포스팅에서는 final, const 자료형 그리고 Future 클래스에 대해 정리하려 한다.
그냥 간단하게 공부한 내용 메모니까,,
내용 짧게 정리할 애들은 한 포스팅에 집어 넣으려 한다.
이번 포스팅 역시 코딩셰프 Flutter 조금 매운맛 강좌를 보고 공부한 내용이다.
요즘은 클론코딩이나 예제 위주로 공부하다보니 포스팅을 점점 안하게 된다.
예제들도 따라한 것을 시간 날때 가끔 정리해봐야겠다.




📌 final vs. const

final과 const는 공통적으로 변수 값이 한번 초기화 되면, 바꿀 수 없게 한다.
아래와 같이 이 두 변수형으로 선언하는 경우 변수 값을 바꾸게 되면 오류가 발생한다.

void main(){
	final int myFinal = 20;
	const int myConst = 50;

	myFinal = 40;	// 오류남
	myConst = 70;	// 오류남
}



📌 초기화 방법

✅ final 변수 초기화

final 변수의 초기화 방법은 크게 두 가지가 있다.

  • 변수 선언 시에 초기화
  • 클래스 만들 때 생성자를 통해 초기화
    -> 앱이 실행 될 때, 초기화가 됨
    => run-time constant

✅ const 변수 초기화

const 변수의 초기화 방법은 다음과 같다.

  • 변수 선언과 동시에 초기화 되어야 함
    -> 컴파일 시에 상수가 됨
    => compile-time constant

예를 들어 현재 시간을 계산해서 불러와 변수에 넣는 경우,
호출마다 값이 바뀌기 때문에 const 변수에는 현재 시간을 할당할 수 없다.




📌 Future

Future은 한마디로 주문서 같은 거다.
햄버거를 시키면 주문서를 받고 주문을 기다리면 햄버거가 나온다.
이때 햄버거를 시킨 주문서가 Future인 것이다.
그리고 실제로 내가 원하는 주문한 음식인 햄버거는 실체 객체에 해당한다.

우선 Future 클래스의 내용은 다음과 같다.

  • Future 클래스는 비동기 작업을 할 때 사용
  • Future는 일정 소요시간 후에 실제 데이터나 에러를 반환
  • async 클래스는 await 매서드를 가짐 -> await로 선언된 메서드는 응답이 처리될 때까지 대기

✅ 동기 / 비동기

Future의 개념을 알기 위해서는 Sysnchronous(동기)와 Asynchoronous(비동기)의 개념을 알아야 한다.

  • Synchronous : 한번에 한 가지의 일만을 처리 -> 수행 시간 고려 안함
  • Asynchronous : 동시에 여러 일을 함

✅ await

Future를 사용할 때는 await 클래스를 함께 사용하는데,
이거는 말 그대로 작업이 처리될 때까지 좀 기다리라는 뜻이다.


🌟 라이브러리 정리

  • import 'dart:io'; // 소켓이나, http 서버와 통신 시에 필요한 라이브러리 제공
  • import 'package:http/http.dart' // 웹 상에서 무언가 정보를 끌어올 때 사용
  • import 'dart:async'; // async, await를 사용하기 위한 것인데 선언 안해도 사용 가능
  • import 'dart:convert'; // json 데이터 변환 용 라이브러리

✅ thread

thread는 Process 내에서 실행되는 흐름의 단위이다.
Process는 Program을 실행한 실질적인 앱의 동작을 의미한다.
Program은 생명이 없는 하나의 데이터 묶음이라면,
이를 실행하여 생명이 있는 Process가 되는 것이다.

Dart는 싱글 스레드로 운영되는 언어이다.
그러나 Event loop를 사용한다.
따라서 Flutter 앱이 실행되는 순간 isolate라는 싱글 스레드로 운영한다.

Dart의 실행 과정은 다음과 같다.

  1. FIFO 방식(queue)으로 Micro Task와 Event 준비
  2. main 함수 실행
  3. Event loop 실행 -> 이벤트 발생 시 이벤트 큐에 등록되어 이벤트 루프에서 처리 됨

✅ 정리

  1. 다트에 의해서 future 객체가 내부적인 배열에 등록
  2. Future 관련해서 실행되어야 하는 코드들이 이벤트 큐에 등록
  3. 불완전한 future 객체가 반환
  4. Synchronous 방식으로 실행되어야 할 코드가 있다면, 이 코드를 먼저 실행
  5. 최종적으로 실제적인 data 값이 future 객체로 전달

🌟 Null safty

  • 모든 변수는 null이 될 수 없으며, non-nullable 변수에는 null 값을 할당할 수 없음
  • non-nullable 변수를 위한 null check가 필요 없음
  • if(어쩌구==null) 이런거 안써도 됨
  • 클래스 내의 변수는 반드시 선언과 동시에 초기화를 시켜야 함



📌 마무리

간단하게 공부한 내용 그냥 끄적이는 포스팅이었다.
당분간은 예제 위주로 공부하면서 중간 중간 틈날때 포스팅을 올릴 예정이다.




참고
- Flutter
- Dart packages
- 코딩셰프 Flutter 조금 매운맛
profile
아자아자 코딩라이푸 ٩(๑❛ʚ❛๑)۶

0개의 댓글