Tech Blog of Pinomaker

1. 들어가기 전

2022년 하반기에 신용보증재단과 구로청년이룸에서 개최한 모두가 하드캐리 3기에 나는 서버 개발자로 참여하였고, Nest js를 이용하여 버들 시장 활성화 방안인, 스탬프 지도 서비스의 서버를 구축하였었고 그 때 배정된 멘토님이 Flutter 개발자셨고, 그 때 Flutter에 대한 관심이 생겼었다. 

 

그리고 노마드코더와 같은 개발 유튜버들을 통하여 Flutter에 대해서 좀 더 알게되었고, 어플리케이션 개발을 React Native만 사용하던 나에게서 그와 자주 비교되는 Flutter는 학습을 하고 싶은 대상이였다. 이번에 졸업하는 학교 후배들을 대상으로 사이드 프로젝트를 기회주는 활동을 하면서 Flutter에 대한 학습을 하게 되어 학습을 시작한다.

 

2. Dart의 변수

Dart에서 변수를 선언하는 방법은 두가지가 있다. 하나는 키워드 var를 이용하여 변수를 선언하는 것이며, 다른 하나는 자료의 타입을 지정하여 선언하는 방법이 있다.

void main() {
    var name = "김인후"; // var 사용
    String job = "developer"; // 타입 지정
}

var를 이용하면 Dart가 들어간 데이터에 따라서 타입 추론을 하는 데, 여기서 중요한 것은 var를 이용하여 변수를 선언한다고 하더라도 타입을 변경하여 값을 재할당할 수 없다. 이것은 name에는 문자열이 들어가있기에, 앞으로 문자열만 들어가야한다는 것이다.

 

관습적으로 var는 함수나 메서드 내부에서 지역 변수로 사용하고, 타입 지정은 Class 내부에서 변수를 선언하거나 속성을 지정할 때 사용한다. 

 

(1) Dynamic

위에 적힌 것을 보면 Dart는 Java나 Typescriipt와 같이 타입을 절대적으로 지켜야하는 것 같지만 JSON과 같이 사용을 할 떄 등의 상황을 위해 타입을 지키지 않아도 되는 Dynamic 타입이 있다.

// var 이용
void main() {
  var name; // 변수를 선언만 하고 할당 X
  name = "김인후";
  name = 100;
}

// dynamic 이용
void main() {
  dynamic name;
  name = "김인후";
  name = 100;
}

Dynamic을 사용하는 방법을 위와 같이 var를 이용하는 방법과 dynamic 타입을 이용하는 두가지 방법이 있다.

 

var를 이용하여 변수는 선언하지만, 초기에 값을 할당하지 않으면, 해당 변수는 dynamic 타입이 되어서 문자열을 넣은 후 숫자를 넣을 수도 있는 등 타입 지정에 있어서 자유롭다.

 

그리고 선언을 dynamic으로 선언을 하게 된다면 이도 마찬가지로 타입에 있어서 자유롭게 사용을 할 수 있다.

 

(2) Null

Dart에서는 Null에 대한 처리를 확실하게 해야하는 것이 Null이 들어가면, 서비스에 문제가 있는 런타임 에러를 발생하게 되기 때문에 Null에 대한 처리를 확실하게 해줘야한다.

bool isEmpty(String string) => string.length == 0;

main() {
  isEmpty(null);
}

 

위의 예시에서는 null에 대한 처리가 되어있지 않은 코드이기에, 런타임 에러가 발생한다. 

 

Dart에서 null을 처리하는 방법을 비교적 간단하고 Typescript랑 어떻게 보면 비슷하게 '?'를 이용하면 된다.

void main() {
  String? name = "김인후";
  name = null; // null도 허용
  
  name?.isEmpty;
}

 

위의 예시를 보면 변수를 선언할 때 키워드에 '?'를 붙이는 것을 볼 수 있고, 해당 변수의 메서드를 사용할 때도 '?'를 사용하는 것을 볼 수 있는 데 이는 name이 null이 아닐 경우에만 실행하도록 하는 설정이다.

 

(3) 상수 선언 방법, final

Javascript의 const나 Java의 final와 같이 값을 수정할 수 없는 상수를 선언 하는 방법은 final을 이용하는 것이다.

void main() {
  final name = "인후";
  name = "민우"; // Error
}

 

위와 같이 Javascript에서 const를 사용하는 것처럼 final이라는 키워드를 사용하여 상수를 선언할 수 있으며 아래와 같이 타입을 직접 지정하여 사용 하는 것도 가능하다.

 

void main() {
 final String name = "김인후";
}

 

(4) late

late는 상수를 선언할 때 바로 값을 할당 하는 것이 아닌 나중에 할당을 할 수 있게 하는 것이다. Java의 final이나 Javascript의 const는 선언을 할 떄 값을 반드시 할당을 해야하지만, late를 사용하면 그 상황을 방지 할 수 있으며 데이터를 통신할 때 주로 사용한다.

 

void main() {
  late final String name;
  name = "인후";
}

 

 

profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!