Dart 기본 문법

ssook·2023년 8월 24일
0

Flutter-Study

목록 보기
1/3

  • 간단한 다트 코드를 실행해보려면 웹 브라우저에서 dartpad.dev/? 사이트 사용하면 됨.

https://dartpad.dev/?


다트 언어의 9가지 기본 특징

  • main() 함수로 시작
  • 어디에서나 변수를 선언하고 사용할 수 있음
  • 모든 변수가 객체이며, 모든 객체는 Object 클래스를 상속받음.
  • 자료형이 엄격한 언어이며, 변수에 지정한 자료형과 다른 유형의 값을 저장하면 오류가 발생함. → 여러 자료형을 허용하려면 dynamic 타입을 이용 가능함.
  • 제네릭 타입을 이용해 개발 가능하며, 자료구조 생성 시에 다양한 자료형을 넣을 수 있음.
    List<int>;
    List<dynamic>;
  • public, protected 같은 키워드가 없음. 만약 외부로 노출하고 싶지 않다면 변수나 함수 이름 앞에 언더스코어(_)를 이용해 표시할 수 있음.
  • 변수나 함수의 시작은 언더스코어 또는 문자열로 시작하고 그 이후에 숫자를 입력할 수 있음.
  • 삼항 연산자 사용 가능
  • Null safety를 지원(2.12.0 버전 이상부터 가능)함. Null safety를 이용하면 컴파일 전에 널 예외를 알 수 있으므로 널에 대한 오류가 발생하지 않도록 작업할 수 있음.
    int? test = 1; // Null 가능
    List<int>? nullsList; // 리스트 자체가 Null 일 수 있음
    List<int?> countNumList; // List의 요소에 Null이 들어갈 수 있음

다트의 특징

기본

  • 자료형 추론 지원 : 자료형을 특정하지 않고 변수를 선언할 때 사용
    var number = 42;
    동적 타입 변수 지정 가능
  • 다트에서 문자열을 표현할 때는 큰따옴표나 작은 따옴표를 이용하는데, 이때 따옴표 안에 **${표현식}**과 같은 형태로 사용하면 표현식에 변수를 직접 넣을 수 있음.

비동기 처리 지원

  • 비동기란? 언제 끝날지 모르는 작업은 기다리지 않고 다음 작업을 처리하게 하는 것을 의미
  • 비동기 프로세스의 작동 방식
    • 다트는 async와 await 키워드를 이용해 비동기 처리를 구현함.
      • 구현 방법
        1. 함수 이름 뒤 본문이 시작하는 중괄호 { 앞에 **async** 키워드를 붙여 비동기로 만듦.

        2. 비동기 함수 안에서 언제 끝날지 모르는 작업 앞에 **await** 키워드를 붙임.

        3. 2번 작업을 마친 결과를 받기 위해 비동기 함수 이름 앞에 Future (값이 여러 개면 stream) 클래스를 지정함.

          void main(){
          	checkVersion();
          	print('end proess');
          }
          
          // 결과를 여기서 바로 받음
          Future checkVersion() async{ // 비동기
          	var version = await lookUpVersion(); //언제 끝날지 모르는 작업
          	print(version)
          }
          
          int lookUpVersion(){
          	return 12;
          }

비동기 함수가 반환하는 값 활용하기

  • 비동기 함수가 반환하는 값을 처리하려면 **then()** 함수를 사용해야 함.
    void main() async{
    	await getVersionName().then((value) => {
    		print(value)
    	});
    	print('end process');
    }
    
    Future<String> getVersionName() async {
    	var versionName = await lookUpVersionName();
    	return versionName;
    }
    
    String lookUpVersionName(){
    	return 'Android Q';
    }
    async 함수가 데이터를 성공적으로 반환하면 호출하는 쪽에서 then() 함수를 이용해 처리할 수 있음. then() 이외에 error()함수도 사용 가능함. error() 함수는 실행 과정에서 오류가 발생했을 때 호출되므로 이를 이용해 예외를 처리할 수 있음.

다트와 스레드

  • 다트는 하나의 스레드로 동작하는 프로그래밍 언어임.
  • 따라서 동기, 비동기가 중요하며 await 키워드를 사용하면 await이 속한 함수를 호출한 쪽의 프로세스가 끝날 때까지 기다리기 때문에 이를 고려해서 프로그램을 작성해야 함.

JSON 데이터 주고 받기

  • 다트에서는 JSON 통신을 간단하게 이용할 수 있음.
  • JSON을 사용하려면 convert라는 라이브러리를 포함해야 함.
    import 'dart:convert';
  • 데이터 디코딩(파싱)과 데이터 인코딩(직렬화)는 아래처럼 진행함.
    //jsonString은 json 데이터를 문자열로 직렬화 한 것
    
    //디코딩
    var data = jsonDecode(jsonString)
    
    //인코딩
    var jsonText = jsonEncode(data)

스트림 통신하기

  • 순서를 보장받고 싶을 때 Stream 자료구조를 사용함. 스트림은 처음에 넣은 데이터가 꺼낼 때도 가장 먼저 나오는 데이터 구조임. → 스트림을 사용하면 데이터를 차례대로 주고 받는 코드를 작성할 수 있음
  • **then** 함수를 사용해서 스트림 코드를 작성할 수도 있음. 단, 스트림을 통해 데이터를 사용하면 데이터는 사라지기 때문에 한 번만 실행하도록 코드를 짜야 함.
  • 스트림은 실시간으로 서버를 살펴보다가 데이터가 변경되면 화면을 고치지 않아도 자동으로 변경된 데이터가 반영되어야 할 때 사용할 수 있는 유용한 클래스임.

profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글

관련 채용 정보