Dart 01

rO_Or·2024년 3월 8일

Dart 그리고 Flutter

목록 보기
1/19

시작

  1. dart는 main 함수가 엔트리 함수 역할을 한다. => Kotlin에서의 fun main과 같은 듯.
    main 함수가 없다면 프로그램을 시작할 수 없다.
  2. kotlin이나 JS에서는 세미콜론을 작성하지 않아도 됐지만, dart는 자바처럼 반드시 작성해야 된다.

변수

선언 및 초기화

void main() {
  var name = 'name';
  name = 'name2';
  
  String name2 = 'name2';
  name2 = 2; // error
}
  1. var 변수 이름 = 넣을 값;으로 번수를 선언할 수 있다.
    이 경우, 컴파일러가 타입을 추론해준다.
  2. 값을 변경할 경우 같은 타입의 값만 변경할 수 있다.
  3. 직접 타입을 명시하여 변수를 선언할 수 있다. => int number = 1;
  4. var의 경우는 함수나 메소드 내부의 지역 변수를 선언할 경우 사용할 것을 권장하고 있다.
  5. 타입을 명시하는 변수 선언은 class에서의 변수나 프로퍼티를 선언할 때 사용할 것을 권장하고 있다.

dynamic

void main() {
	var test;
    test = 1
    test = '1';
    test = true;
    
    dynamic test2;
    if(test2 is String) {
    	// String일 경우 처리
        // ...
    }
}
  1. JSON 등 데이터를 받아왔을 때 어떤 타입인지 알 수 없을 경우 사용할 수 있다.
    타입스크립트에서의 any와 같은 역할을 하는 것 같다.
  2. 타입스크립트에서 any 사용을 최대한 자제하듯, dynamic 또한 자제하는 것이 좋아보인다.

null safety

개발자가 null 값을 참조했을 경우, 컴파일러 상에서는 오류가 없지만
유저가 사용하는 런타임에서 에러가 발생할 수 있다.

이를 방지하고자 있는 것이 여러 언어에서 제공하는 null safety이다.

void main() {
	String? name = 'name';
    name = null;
    if(name != null) {
    	// String 메소드를 사용할 수 있다.
    }
    name?.isNotEmpty; // null이 아닐 경우 isNotEmpty 실행 값 반환.
}
  1. 타입에 ?를 붙여서 이 변수는 null 값을 가질 수 있다고 명시해야한다.
  2. 그 이후 null인지 확인해야 한다.
  3. API를 이용해서 데이터를 받아왔을 때, 못 받아왔을 경우가 null일 테니 사용하는 것 같다.

final

한 번 선언된 변수는 수정할 수 없도록 상수 변수를 선언하는 것이다.
JS에서의 const 역할과 똑같다.

void main() {
	final name = 'name';
    name = 'name2'; // error!
    
    final String name = 'name2';
    // 타입을 명시할 수도 있다.
    // 컴파일러가 타입을 추론하니 굳이 명시할 필요는 없다.
}

late

선언만 미리 해두고 할당은 나중에 하는 것.
API로 데이터를 다 받아온 후에 값을 할당하는 식으로 주로 쓰는 것 같다.

void main() {
	late final String name;
    name = 'name';
    
    late final String name2;
    print(name2); // error!
}
  1. 선언한 뒤, 값을 할당하지 않고 사용할 수 없다.

const

상수 역할을 하지만 JS에서의 const와는 다른 개념이다.
컴파일 전에 알 수 있는 값이어야 한다.

void main() {
	const name = 'name';
    name = 'name2'; // error!
}

final과 const

둘 다, 한 번 할당되면 값을 변경할 수 없는 것은 똑같다.

final

  • 실행 중에 값이 결정된다.
  • 프로그램이 실행될 때, 해당 위치에서 값이 결정된다.
  • 시간 로그를 담을 때, 담을 수 있다. => 실행 시에 값이 결정되기 때문.

const

  • 컴파일 시 값이 결정된다.
  • 프로그램을 컴파일할 때 값이 결정된다.
  • 시간 로그를 담을 때, 담을 수 없다 => 실행은 컴파일 시 하는 게 아님.
profile
즐거워지고 싶다.

0개의 댓글