개발/Dart & Flutter

[Dart] Dart 언어 가이드 살펴보기

devhooney 2025. 1. 24. 15:05
728x90

플러터를 이용해 앱개발을 할 수 있는데, 플러터는 dart 언어로 개발해야한다.

기초를 알아보자!

 

 

1. Basic Dart Program

void studyPrint(int num) {
	print('이것은 $num'); // 콘솔 출력
}

void main() {
	var num = 111;
    studyPrint(num);
}

 

다른 언어와 매우매우매우 비슷하다.

 

 

void는 return해줄 값이 없는 경우 사용.

int는 정수를 나타내는 자료형

print는 콘솔에 내용을 출력할 때 사용.

main은 앱이 시작되기 위한 최상위 함수이다.

var는 자료형을 지정하지 않고 변수를 선언하는 방법이다. 

 

거의 java나 javascript와 유사하다.

 

 

 

 

2. Keywords

abstract 
else
import
show 
as 
enum
in
static 
assert
export 
interface 
super
async 
extends
is
switch
await 
extension 
late 
sync 
break
external 
library 
this
case
factory 
mixin 
throw
catch
false
new
true
class
final
null
try
const
finally
on 
typedef 
continue
for
operator 
var
covariant 
Function 
part 
void
default
get 
required 
while
deferred 
hide 
rethrow
with
do
if
return
yield 
dynamic 
implements 
set 

이 단어들은 Dart에서 사용중이기 때문에 변수명으로 쓸 수 없다.

 

 

 

 

3. Variables

Dart에서 변수는 타입을 지정할 수도 있고 안할 수도 있다. 스타일 가이드 권장사항에서는 타입을 지정해주는 대신 var를 이용한다.(https://dart.dev/effective-dart/design#types)

 

 

 

 

728x90

 

 

 

 

 

- Default value

nullable 타입인 초기화되지 않은 변수의 초기 값은 null이다. (null safety 타입이 아닌 경우 모든 변수에는 nullable 타입이 있다.) number 타입의 변수도 처음에는 null이다. 왜냐하면 number 타입은 Dart의 다른 모든 것과 마찬가지로 객체(Object)이기 때문이다.

int? ttest;
assert(ttest == null);

 

이 경우 프로덕션 코드는 assert() 호출을 무시한다. 반면에 개발하는 동안 assert(condition)은 조건이 거짓이면 예외를 던진다.

 

null safety 타입의 경우 변수 값을 사용하기 전에 초기화해야 한다.

int ttest = 0;

 

선언된 지역 변수를 초기화할 필요는 없지만 사용하기 전에 값을 할당해야 한다. 예를 들어 다음 코드는 Dart가 print()에 전달할 때 lineCount가 null이 아님을 확인할 수 있기 때문에 유효하다.

int ttest;

if (qtest) {
  ttest = ctest();
} else {
  ttest = 0;
}

print(ttest);

 

최상위 및 클래스 변수는 초기화 코드는 변수가 처음 사용될 때 실행되는 lazily initialized 이다.

 

 

 

- Late variables

Dart는 late키워드를 사용해서 초기화를 나중에 하는 방법이 있다.

late String ttest;

void main() {
  ttest = 'dddd!';
  print(ttest);
}

 

late 변수가 초기화에 실패하면 런타임 오류가 발생하므로 참고 !

 

 

- Final and const

변수를 수정하지 않으려면 var 대신 또는 타입에 final 또는 const를 추가하여 사용한다.

final 변수는 한 번만 초기화 할 수 있다.

const 변수는 컴파일 타임 상수.

final ttest = 'ttt'; // 타입 없이 초기화
final String qtest = 'qqq';


// final 변수의 값은 변경할 수 없다.
ttest = 'aaaa';

 

컴파일 타임 상수가 될 변수에는 const를 사용.

const 변수가 클래스 레벨에 있으면 static const로 표시.

변수를 선언할 때, 값을 number 또는 문자열 리터럴, const 변수 또는 상수 숫자에 대한 산술 연산 결과와 같은 컴파일 타임 상수로 설정한다.

const bar = 1000000;
const double atm = 1.01325 * bar; // 표준 대기

 

const 키워드는 상수 변수를 선언하기 위한 것만이 아니다. 상수 값을 생성하는 생성자를 선언할 수도 있다. 모든 변수는 상수 값을 가질 수 있다.

var foo = const [];
final bar = const [];
const baz = []; // `const []`와 동일


// const 값으로 초기화 했어도 final 또는 const 가 아니라 변수의 값을 변경할 수 있습니다.
foo = [1, 2, 3]; // Was const []

// const 변수의 값은 변경할 수 없습니다.
baz = [42]; // 에: 상수 변수에 값을 할당할 수 없습니다.

 

 

 

 

4. Build-in types

Numbers (int, double)
Strings (String)
Booleans (bool)
Lists (List, 배열이라고도 함.)
Sets (Set)
Maps (Map)
Runes (Runes; 보통 characters API로 대체됨.)
Symbols (Symbol)
null 값 (Null)

 

 

 

 

 

5. Functions

Dart는 객체 지향 언어이므로 함수도 객체이며 Function이라는 타입을 갖는다. 즉, 함수를 변수에 할당하거나 다른 함수에 인자로 전달할 수 있다. 또한 Dart 클래스의 인스턴스를 마치 함수처럼 호출할 수도 있다. 

 

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

 

타입은 생략이 가능하다.

Dart에서는 private public protected 같은 접근제한자가 없다.

_로 시작하는 함수인 경우 private으로 생각하면 된다.

 

 

 

 

 

 

- 출처

https://dart.dev/effective-dart/design#types

https://judongseok.gitbook.io/dartlang

728x90