책 정보: Flutter in Action / 에릭 윈드밀 지음, 우정은 옮김 / 한빛미디어
플러터는 구글에서 개발, 다트(DART)라는 자바와 비슷한 OOP이자 강타입인 언어를 기반으로 한다. 이번 글에서는 자바와 다른 특징적인 문법들만 기록해보았다.
1. 변수
동적 형식 지정자: dynamic, var
String, int와 같이 직접 타입을 지정하지 않아도 되도록 해준다. 동적 형식 지정자가 필요한 경우는 JSON처럼 Map 타입을 사용할 때이다. JSON은 key값은 String이지만 value는 다른 형식이 될 수 있기 때문이다. 그러나 꼭 필요한 경우가 아니라면 형식을 제한하는 것이 기본이다.
Map<String, dynamic> json;
var와 dynamic의 다른점은 var는 변수의 형식을 제한할 때만 사용할 수 있다는 것이다.
Map<String, var> json; //사용 불가한 문법
또한 var는 한 번 어떤 타입으로 추론되고나면 다른 형식의 데이터를 재할당할 수 없으나, dynamic은 재할당이 가능하다.
null 인지(null aware) 연산자
if문으로 nullable check을 하는게 아니라 특수한 operator를 사용한다.
?. 연산자
if(user != null) {
this.userAge = user.age;
}
//null operator 적용
this.userAge = user?.age;
?? 연산자
coalesce문법에서 값이 존재하지 않는 경우 지정할 값을 작성해주는 것처럼, ?? 연산자 뒤에 해당 값이 null 일때 대체할 값을 지정할 수 있다.
this.userAge = user.age ?? 17
2. 함수
이름 지정 파라미터(Named parameters)
함수를 호출할 때 들어가는 인자값을 이름을 지정하여 작성할 지를 설정해준다.
void debugger({String message, int errorCode}) {
//이런 식으로 중괄호를 넣어서 파라미터를 작성해주면
}
debugger(message: 'Hi!', errorCode: 0023)
//이렇게 함수의 인자값에 이름(message, errorCode)을 지정할 수 있다. 다만 이는 강제사항이 아니다.
void debugger({@required String message, ... }) {
//@required를 사용하여 함수 호출 시 반드시 이름을 지정하도록 만들어 줄 수 있다.
}
@required 애너테이션을 추가하려면 다트의 meta 라이브러리를 추가해야한다.
선택형 파라미터(optional parameter)
Optional한 파라미터를 입력하거나, default 값을 줄 수 있다. 대괄호 []를 사용하면 된다.
int addNums(int x, int y, [int z]) {
//대괄호 []를 이용하여 선택형 파라미터를 지정해줄 수 있다.
}
addSomeNums(5, 7) //가능
addSomeNums(5, 7, 1) //가능
int addNums(int x, int y, [int z = 1]) {
// = 연산자로 기본값을 지정할 수 있다. 호출 시 인자값이 안들어왔을 때 해당 값으로 자동 지정된다.
}
3. 클래스
new 키워드
new 키워드를 사용하지 않는게 관례다!
Book harryPotter = Book();
생성자(Constructor)
argument 생략
축약적으로 사용할 수 있다. 다만 인자의 위치가 지정되기 때문에 클래스 생성 시 순서대로 입력해주어야 한다. Person("Tomas", 30, "male")
class Person {
String name = 'John';
int age;
String sex;
// Person(String name, int age, String sex) {
// this.name = name;
// this.age = age;
// this.sex = sex;
// }
Person(this.name, this.age, this.sex);
}
이름지정 선택형 파라미터(named optional parameter)
중괄호 {}를 사용한다. 생성자를 불러올 때 이름을 지정하여 불러와야한다. 플러터에서 위젯 클래스(여기서는 WeatherScreen 클래스)를 불러올 때 각 인자값(key, weatherData)을 이름을 지정하여 줄 수 있도록 해준다.
//선언할 때
class WeatherScreen extends StatefulWidget {
dynamic weatherData;
WeatherScreen({Key? key, this.weatherData}) : super(key: key);
}
//불러올 때(생성할 때)
WeatherScreen(
key: UniqueKey('ggg'),
weatherData: dataFromJson
)
Flutter에서는 Nullable named parameter를 통해 class의 instance를 만들고 그 파라미터들을 인자로 받는 형식으로 만들어놨다. 예를 들어 Scaffold 위젯(클래스)는 클래스 파일에 들어가보면 다음과 같이 많은 파라미터들을 named parameter로 정의해놓았다.
실제 사용자가 Scaffold 인스턴스를 호출할 때는 이 중 필요한 인자값들만 정의하여 사용한다.
named nullable parameter
중괄호 ({}, curly bracket)처리하여 named paramter로 생성자를 만들 수 있다. 이 때는 인스턴스 생성 시 파라미터명을 입력해주어야 한다. 그리고 NullSafety로 동작하는 경우 인자 앞에 required를 붙여줘야한다.
class Person{
String name;
int age;
Person({required this.name, required this.age});
}
Person p1 = Person(name: "Tomas", age: 30);
만약 nullable하게 사용하고 싶다면 member 변수의 타입 뒤에 ?를 붙여주면 된다.
class Person {
String? name;
int? age;
...
}
named constructor
이름을 지정한 constructor를 만들 수 있다.
class Person{
String name;
int age;
Person.basic(this.name, this.age);
}
Person p1 = Person.basic("Tomas", 30);
추가 정보
Dartpad에 들어가서 웹 상에서 코딩을 하고 문법을 점검해볼 수 있다.
DartPad
dartpad.dev
'Programming-[CrossPlatform] > Flutter' 카테고리의 다른 글
Flutter 기본-5. Navigator, pushNamed method (0) | 2023.01.15 |
---|---|
Flutter 기본-4. Container, Column, Row 복습 (0) | 2023.01.15 |
Flutter 기본-3. SnackBar, BuildContext, Toast (0) | 2023.01.15 |
Flutter 기본-2. Button, Drawer (0) | 2023.01.14 |
Flutter 기본-1. flutter 프로젝트, main.dart의 기본구조와 간단한 속성들 (0) | 2023.01.14 |