본문 바로가기
Flutter

[Flutter] 플러터 시작하기, 설치 방법 및 Dart 언어 기초

by 굿햄 2023. 4. 3.

이번에 진행하는 개인 프로젝트는 Android와 IOS에서 공통된 환경을 제공하고자 Flutter 프레임워크를 사용하여 제작하기로 하였습니다.

 

이 시리즈에서는 Codelab을 따라 Dart에 대한 기초를 학습하고, 간단한 앱을 만들어보고자 합니다.

 

준비 사항

Android studio 설치

Android studio를 먼저 설치하는 것을 권장합니다.

 

안드로이드 스튜디오 다운로드 페이지에서 최신 IDE를 다운받은 후,

File -> Settings -> Plugins에 들어가, 상단의 Marketplace에서 "Flutter"를 설치합니다.

 

Flutter 설치

https://docs.flutter.dev/get-started/install 에서 각 OS에 맞는 파일을 다운받아 압축을 푼 후, 환경변수를 설명에 따라 설정합니다.

 

설치 시, 명령어로 `flutter doctor`를 입력하면 여러 에러가 발생할 수 있습니다.

공식 홈페이지에 따로 설명이 되지않은 부분이 있어 많이 헤맸습니다.

 

❗ 필히, Jdk 11 이상을 사용해야하며,

Android studio를 Preview 버전으로 사용할 경우 /Applications/Android Studio Preview.app/Contents/jbr 을 기존 안정버전과 같이 /jre을 통해 접근할 수 있도록 아래 명령어로 심볼릭 링크를 생성합니다.

cd /Applications/Android Studio Preview.app/Contents
sudo ln -s jbr jre

 

또한 안드로이드 스튜디오의 SDK Manager를 실행하여 최신버전의 Android SDK Command-line Tools를 설치합니다.

기본적인 준비를 마쳤습니다.

 

Dart 기본 문법

개발자가 학습하는 방법에는 다양한 방법이 있지만, 공식 Docs를 보는 것도 좋은 방법입니다.

 

Dart basics | Dart에서 다트 언어의 기본 문법을 학습하거나, https://dart-ko.dev/codelabs에서 코드랩을 진행해보는 것이 좋을 것 같습니다.

 

기존에 자바와 코틀린을 함께 사용하고 있었으므로, 예제를 보며 빠르게 파악해보도록 합니다.

 

예제 코드는 https://dartpad.dev 에서 간단히 돌려볼 수 있습니다.

 

기본적인 Dart 프로그램

// 함수 정의.
// void 는 값을 반환하지 않음을 선언.
// int 형의 파라미터 number를 수신
void printInteger(int number) {
  // $number은 문자열 보간(String interpolation)을 통해 변수의 값으로 치환
  print('number = $number');
}

// 앱의 실행
void main() {
  // 숫자 리터럴 컴파일 타임 상수 27을 변수로 선언.
  // var은 타입을 특정하지 않고 변수를 선언.
  var number = 27;
  // 함수 호출
  printInteger(number);
}

 

Java와 유사한 모습을 보여주고 있습니다.

 

주요 컨셉

  • 변수로 할당가능한 모든 것을 객체이며, 모든 객체는 클래스의 인스턴스입니다. 숫자, 함수, null 모두 객체이며, null을 제외한 모든 객체는 Object클래스를 상속받습니다. (Dart 2.12부터 Null-safety를 지원하며 3부터 의무 사항입니다.)

  • Dart는 타입에 엄격(Explicit)하지만, 타입 추론(Type Inference)이 가능하기 때문에 타입 어노테이션은 자율에 맡깁니다.

  • 변수가 nullable이 아닐 때, null 값을 가질 수 없게 합니다. 타입 끝에 int? String?와 같이 물음표를 붙히면 null 값을 가질 수 있습니다. 만약 nullable 객체를 Null-safety함을 주장하고 싶을 경우 아래와 같이 느낌표(!)를 붙혀 null이 아님을 주장할 수 있습니다.
    int x = nullableButNotNullInt!
  • Dart는 List<int>, List<Object>와 같은 제네릭 타입을 지원합니다.

  • 클래스나 객체에 묶여있는 함수들 뿐만 아니라, main()과 같은 최상위 함수를 지원합니다. 함수나 변수를 클래스 내에 선언하지 않아도 됨을 의미합니다.
    마찬가지로, 최상위 변수를 지원하며, 클래스나 객체안에 묶여있는 Instance 변수(맴버 변수)들은 필드, 프로퍼티로도 불립니다.

  • 중첩 함수 또는 지역 함수처럼 함수 안에 함수를 생성할 수 있습니다.
  • Java의 접근 지정자는 public, projected, default(아무것도 선언하지 않음), private 총 4가지이지만, Dart는 기본적으로 public이며 밑줄(_)을 붙힘으로써 동일 라이브러리(패키지 묶음)로 접근 범위를 제한할 수 있습니다. 문자나 숫자와 결합이 가능합니다.
  • Dart는 런타임 값을 가지는 식 expression과 그렇지 않은 문 statement를 가지고 있습니다.
    조건 표현식(conditional expression)은 condition ? expr1 : expr2 와 같이 두 가지 중 하나를 반환하는 값을 가집니다.
    if-else 문은 값을 가지지 않으며, 때로 하나 이상의 식을 포함하지만, 식(expression)은 문(statement)를 포함할 수 없습니다.

2부에서 이어서 설명합니다.


ⓒ 굿햄 2022. daryeou@gmail.com all rights reserved.

댓글