[Flutter] 플러터 Dart(다트) 기본 변수(2024.09.최신) – 기초강의 1강

이번 강좌에서는

  • 온라인 컴파일러
  • 다트 기본 변수

에 대해 다룹니다.

Dart

안녕하세요 여러분! 오늘은 플러터 기초 문법인 다트 기본 변수에 대해 다뤄보겠습니다.

지난 강의를 보고 이제 Flutter를 에뮬레이터/핸드폰으로 실행하며 구동해 볼 수 있지만,
실행되는데 시간도 오래걸리고 기초 문법을 배우기에는 복잡합니다.
그래서 오늘은 온라인 컴파일러를 통해 플러터 기초강의 – Dart(다트) 기본 변수에 대해 설명드리겠습니다.

0. 온라인 Dart 컴파일러(online flutter)

이번 강의에서는 온라인 컴파일러를 적극 활용할 예정으로 새창에 홈페이지를 띄워놓도록 하자

주소 : www.dartpad.dev

온라인 컴파일러

1. Dart 변수

1.1. 기본 변수

int정수 (예: -1, 0, 42)
double실수 (소수점을 포함한 숫자) (예: 3.14, -2.5)
num숫자 (정수와 실수를 모두 포함) (예: 5, 3.14)
bool참/거짓 (논리값) (예: true, false)
String문자열 (문자들의 집합) (예: ‘Hello’, “Dart”)
List리스트 (순서가 있는 요소들의 모임) (예: [1, 2, 3])
Set집합 (중복되지 않는 요소들의 모임) (예: {1, 2, 3})
Map키-값 쌍의 데이터 구조 (예: { 'name': 'Dart', 'age': 10 })
Null값이 없음을 나타내는 타입

1.2. 고급 변수

dynamic모든 타입을 가질 수 있는 변수 (타입을 런타임에 결정)
var타입을 명시하지 않고 초기화 시 타입이 자동으로 추론되는 변수
Object모든 데이터 타입의 최상위 타입 (Dart의 모든 데이터는 Object로 취급될 수 있음)

1.3. 변수 상속구조

상속구조

이처럼 모든 상속관계는 Object로 시작하게 된다.


2. 변수 선언과 초기화

2.1. 변수 선언

– 변수의 선언 방식

var name = 'Bob';

왼쪽에 var이라는 자료형의 name이 오른쪽의 String을 입력받고 있는 구조입니다.
변수는 기본적으로 var처럼 다이나믹한 추론형 변수를 사용할 수 있지만 그렇게 개발하는 개발자는 없을거라 생각합니다.

String name = 'Bob';

이렇게 미리 형을 결정하여 작성하는 것이 일반적이기 때문이죠.

혹은 여러 타입을 저장할 수 있는 변수가 필요하다면, Objectdynamic을 사용할 수 있습니다:

Object name = 'Bob';

하지만 말씀드렸다시피 타입을 명확하게 작성하는 것은 오류를 방지하고 개발자 사이에 문제를 없애는 지름길입니다.
(자바스크립트가 좋다지만 타입스크립트가 추앙받는 이유가 있죠..)


3. Null 안전성

Dart에서는 null안전성을 지원합니다.
이 말은 변수가 null을 가질 수 있는지, 즉 nullable한 상황인지 명확하게 정의하고
null로 인해 발생하는 오류를 방지할 수 있습니다.

예를 들어 intnull이 할당되면 원래는 오류가 발생하겠죠?

int index = null;  //ERROR!!

하지만 아래와 같은 선언이라면 가능합니다.

int? index;

null이 가능한 변수는 기본적으로 null로 초기화 되기 때문에 사용하기전에는 꼭 null체크를 해야합니다.

물론 컴파일 때 null로 인한 오류를 감지하고 에러를 띄웁니다.

late int lineCount;  // late는 잠시 무시합시다

if (조건) {
  lineCount = 10;
} else {
  lineCount = 0;
}

print(lineCount);

그렇기에 이렇게 변수를 꼭 초기화 하고 사용해야 합니다.


4. Late 키워드

이 키워드는 변수를 나중에 초기화할 수 있도록 선언하는 키워드입니다.
원래는 선언과 동시에 초기화가 필요한 Dart의 null safety로, nullable이 아닌 변수라면 초기화가 필요합니다.

late String description;

void main() {
  description = 'Hello, Dart!';
  print(description);
}

이렇게 되면 처음 사용할 당시 초기화를 하고 변수를 사용할 수 있습니다.

late는 무거운 객체일 경우 프로그램의 메모리 사용을 효율적으로 하거나,
먼저 초기화되어야 하는 변수가 있을 경우 주로 사용하게 됩니다.

하지만 역시 초기화하지 않고 사용하면 에러뜨니 주의해야 합니다.


5. Final과 Const

Dart에서 변경할 수 없는 변수는 final 또는 const로 선언합니다.
final 변수는 한 번만 값을 설정할 수 있으며, const 변수는 컴파일 타임 상수입니다.

5.1. Final

final 키워드는 변수를 한 번만 초기화할 수 있게 만들어 줍니다.
즉, final로 선언된 변수는 프로그램 실행 중 한 번만 값을 설정할 수 있고, 이후에는 값을 변경할 수 없습니다.

final name = 'Bob'; // 런타임에 할당된 값 //변경 불가

하지만 변경이 가능한 경우도 있습니다.

final 변수는 객체의 참조를 고정하지만, 객체 내부의 속성은 변경할 수 있습니다.
리스트를 final로 선언하면 리스트 자체는 다른 리스트로 변경할 수 없지만,
리스트 내부의 요소는 변경할 수 있습니다.

final List<int> numbers = [1, 2, 3];
numbers[0] = 10; // 가능
// numbers = [4, 5, 6]; // 다른 객체로 변경하는 것은 불가능

5.2. Const

const 키워드는 변수를 컴파일 타임 상수로 만들어 줍니다.
즉, const로 선언된 변수는 프로그램이 컴파일되는 시점에 이미 그 값이 결정됩니다.
const로 선언된 변수는 언제나 같은 값을 가지며, 어떤 상황에서도 변경할 수 없습니다.

const int age = 30; // 컴파일 타임에 고정된 값 // 변경은 아예 불가능

5.3. Final과 Const 차이점

둘은 비슷하면서도 약간의 차이가 있습니다.

  • 초기화 시점: final은 런타임에 초기화되며, const는 컴파일 타임에 초기화됩니다.
  • 객체 내부 수정: final은 객체 참조만 고정하고, 객체 내부 값은 수정할 수 있지만, const는 객체 자체를 불변으로 만듭니다.

– 예시코드

final name = 'Alice';  // 프로그램 실행 중에 값 할당 가능
const int age = 30;    // 컴파일 시점에 값 고정

// final 객체의 속성 변경 가능
final List<int> scores = [90, 80, 70];
scores[0] = 100; // 가능

// const 객체는 불변
const List<int> fixedScores = [90, 80, 70];
// fixedScores[0] = 100; // 불가능

오늘은 flutter에서 사용하는 Dart의 기본 변수에 대해서 알아보았습니다.

다음시간에는 오퍼레이터에 대해서 배울 것 입니다.

강좌를 보다가 조금이라도 궁금한 것이나 이상한 점이 있다면 꼭 댓글을 남겨주시기 바랍니다.
그 외에도 강좌에 관련된 것이라면 어떠한 것도 질문해 주셔도 상관 없습니다. 
생각해 볼 문제도 정 모르겠다면 댓글을 달아주세요.

이 게시글이 얼마나 유용했습니까?

평점을 매겨주세요!

평균 별점 4.5 / 5. 투표 수 : 23

가장 먼저, 게시물을 평가 해보세요.

Leave a Comment

우클릭이 불가능 합니다.