Dart 기본 문법 01

GreenBean·2023년 3월 24일
0
post-thumbnail

Dart

Dart 공식문서
다트 ( Dart ) 소개 및 개발 환경
다트 ( Dart ) 기본 구조 및 중요 개념

Dart 란?

  • 다트 ( Dart ) 는 구글이 2011년 웹 프론트엔드 개발을 위해 만든 언어
    • 지금은 웹 뿐만 아니라 데스크톱이나 모바일 앱까지 개발할 수 있음

Dart 언어의 장점과 특징

  • 장점
    • 다트는 객체 지향이면서 C언어와 유사한 문법을 가지고 있음
      • 실행 중인 앱에 즉시 결과를 보여주는 hot reload 를 사용해서 개발 생산성을 높일 수 있음
      • AOT 컴파일로 네이티브 코드를 생성하기 때문에 모든 플랫폼에서 빠른 속도를 제공

Tip! JITAOT 컴파일러

  • JIT ( Just-In-Time )
    • 방식
      • 브라우저에서 파일들을 다운로드 한 뒤에 한번 컴파일해서 브라우저 엔진이 실행할 수 있는 저수준 언어로 바꿔준 후 화면을 렌더링 하는 방식
      • 실행 시점에 바이트코드를 기계어로 번역
    • 특징
      • 실행속도가 상대적으로 느림
      • 앱 설치 속도 ∙ 설치 용량 등이 AOT에 비해 빠르고 적게 차지
      • 브라우저에서 여러 에러들을 발생시키고 확인할 수 있으며 디버깅이 가능
      • CPU 사용이 AOT 에 비해 높음
  • AOT (Ahead-Of-Time )
    • 방식
      • 소스 코드를 미리 컴파일하는 방식을 의미
      • 설치 시점에 기계어로 번역
    • 특징
      • 미리 컴파일을 해놓기 때문에 속도가 상대적으로 빠름
      • 미리 컴파일을 해놓기 때문에 설치 속도나 설치 용량이 큰 편
      • CPU 사용이 JIT 에 비해 낮음
  • 특징
    • 객체 지향
    • 선택적 타입 ( optional type )
    • 메모리를 공유하는 thread 대신 독립 메모리를 갖는 isolate 를 사용
    • 자바스크립트와 호환

Dart 기본 예제

# main.dart

import 'package:dartEx01/dartExo1.dart' as dartEx01;

// Def a function
add(int a, int b) {
  return a + b;
}

// This is where the app starts executing
main() {
  var numberA = 10; // Declare and initialize a variable
  var numberB = 25; // Declare and initialize a variable
  var result = add(numberA, numberB); // Call a function
  dartEx01.printResult(result);
}
  • Line 1
    • import : 패키지 내의 라이브러리를 사용하고자 할 때 라이브러리를 가져오기 위해 사용
    • 해당 라인은 lib 내의 dartEx01.dart 를 alias 를 사용하여 dartEx01 로 가져온다는 의미
  • Line 3
    • 주석은 // 를 사용
  • Line 4
    • 함수 선언: 두 매개변수를 더하여 리턴하는 함수
    • 함수명 앞에 리턴 타입이 생략된 것을 눈여겨 볼 만함
      • int 형을 리턴해주고 있기 때문에 당연히 생략된 타입은 int 형
    • 리턴 값이 없는 경우에도 void 생략이 가능
  • Line 9
    • main() 함수: 앱 실행을 시작하는 최상위 함수
    • lib 내의 파일은 보통 공유 가능한 코드를 포함하고 해당 코드를 bin 등에 공유
    • bin 은 ( main() 를 포함하는 ) 파일을 실행하기 위한 다트의 엔트리 포인트를 포함
      • 그래서 main.dart 가 bin 내에 존재
  • Line 10-11
    • 다트 변수 선언은 var 이라는 키워드를 사용
    • var 는 특정 타입을 지정하지 않은 형태로 해당 변수가 참조하는 타입에 따라 결정
    • 변수가 할당이 아닌 참조라고 하는 이유는 다트의 모든 변수는 객체 ( object ) 이기 때문
      • 여기서는 숫자를 참조하기 때문에 int 형으로 추론 가능
  • Line 12
    • add() 함수를 호출하고 리턴 값을 result 변수가 참조
  • Line 13
    • dartEx01.dart 내의 printResult() 함수를 호출
    • import 시 dartEx01 를 prefix 로 지정하였기 때문에 dartEx01.함수명 으로 호출
      • dartEx01.dart 내용은 아래와 같이 printResult() 를 통해서 출력하는 내용이 전부
# dartEx01.dart

printResult(int aNumber) {
  print('The number is $aNumber.'); // Print to console
}
  • Line 2
    • 여타 프로그래밍과 비슷하게 콘솔에 텍스트를 표시하려면 print() 함수를 사용
      • 문자열 리터럴을 출력할 때는 '내용' 이나 "내용" 처럼 작은 따옴표나 큰 따옴표 모두 사용 가능
    • 변수값을 출력하려면 $변수 로 사용
      • 변수값과 함께 출력하려면 "내용 $변수명" 으로 사용하면 됨
      • 만약 표현식을 출력하고 싶다면 "내용 ${표현식}" 을 사용하면 됨
        • 예시: print('The number is ${aNumber + 10};

중요 개념

  • 모든 변수는 객체 ( Object )
    • 모든 객체는 클래스의 인스턴스
      • 숫자 ∙ 함수 ∙ null 도 객체
    • 모든 객체는 Object 클래스로부터 상속됨
  • 타입 어노테이션은 타입 추론이 가능할 경우 옵션
    • 예를 들어 int number = 10; 으로 명시적으로 타입을 지정하지 않고 var number = 10; 으로 사용 가능하다는 의미
  • 타입이 예상되지 않는다고 명시적으로 표현하고 싶을 때는 dynamic 키워드를 사용
    • 하나의 변수가 여러 타입으로 변경 가능하다는 의미
    • var 키워드와 비교해보면 좀 더 이해하기 쉬움
      • var 은 아래와 같이 String 타입으로 지정된 후에는 int 타입을 참조할 수 없음
# 예시 1

var name = "Kim";
name = 100;

------------------------------------------------------------------------------------------

# 결과

Error: A value of type 'int' can't be assigned to a variable of type 'String'.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

# 예시 2

dynamic name = "Kim";
name = 100;
  • 제너릭 타입을 지원
  • main() 과 같은 최상위 함수를 지원
  • pubicprotectedprivated 키워드가 없음
    • 해당 라이브러리 내에 private 하려면 식별자 앞에 밑줄 ( _ ) 을 붙임
  • debug mode 와 release mode 의 두 가지 런타임 모드가 있음
    • debug mode 는 dartdev 컴파일러를 통해 좀 더 쉬운 디버깅을 제공
    • release mode 는 dart2js 컴파일러를 통해 앱 사이즈와 성능을 최적화 함
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글