728x90
Dart는 모든 플랫폼에서 빠른 앱을 위한 클라이언트 최적화 언어.
- UI 최적화용
- 사용자 인터페이스 생성 요구에 특화된 프로그래밍 언어로 개발
- 생산적인 개발
- 핫 리로드를 사용하여 실행 중인 앱에서 즉시 결과 확인
- 모든 플랫폼에서 빠름
- 모바일, 데스크톱 및 백엔드용 ARM 및 x64 머신 코드로 컴파일. 또는 웹용 JavaScript로 컴파일
- Flutter 프레임워크는 인기 있는 다중 플랫폼 UI 툴킷으로 Dart 플랫폼으로 구동되며 iOS, Android, macOS, Windows, Linux 및 웹에서 실행되는 UI 경험을 빌드하기 위한 도구 및 UI 라이브러리를 제공합니다.
- Dart는 유저 인터페이스 생성의 필요에 맞게 특별히 설계되고 최적화된 익숙한 구문을 갖고 있음.
- Flutter 애플리케이션을 만들 때 필요한 Dart의 모든 기능, 규칙 및 구문에 대해 정리.
- 잘 설계된 Dart 코드를 일관되게 작성하는 모범 사례를 학습하여 잘 구조화된 Flutter 애플리케이션을 구축할 수 있음.
Dart Web
- dart 코드를 javascript로 변환하는 컴파일러
Dart Native
- dart 코드를 여러 CPU의 아키텍처에 맞게 변환
- IOS,AOS,Window,MacOS 등등
JIT
- Just-in-time compiler : 개발중인 코드의 결과를 화면에 바로 보여줌
AOT
- ahead-of-time compiler : 개발이 모두 끝나고 배포하기전 컴파일러를 하면 전환
변수
- var : 일일히 변수 타입을 지정 할 필요 없음.
- dynamic :
- 여러가지 타입을 가질 수 있는 변수, 선언 되지 않는 변수, 변수가 어떤 타입인지 알수 없을때 사용
- 인터넷에서 데이터를 받았을 때 데이터 타입을 모르는경우 dynamic을 이용하여 확인
- null safety :
- 개발자가 null 값을 참조할 수 없도록 함.
- 변수가 null 값 일수도 있으면 변수뒤에 ‘?’ 사용하면됨
- nico null 이 아니라면 isNotEmpty 속성 요청
- String? nico = 'nico'; nico =null; if(nico != null) { nico.isNotEmpty; } }
- FinalVariable : final name = ‘명관’;
- 한 번 정의된 변수를 수정할 수 없게 만듬.
- Late Variable: late final String name;
- 초기 데이터 없이 변수를 선언 할 수 있음
- Api 작업에서 많이 사용.
- 변수를 먼저 만들고 데이터를 나중에 넣을 수 있고 실수를 막아줌
- data fetching을 할 때 유용
- const : const name = ‘명관’;
- compile-time constant 매우중요
- 값이 절대 바뀌지 않고 컴파일이 될 때 안다.
- 컴파일 할 때 알고 있는 값에 사용.
- 앱에 사용할 상수들 이 있을 때 사용.
- Basic Data Types : 모두 object로 이루어짐, class
- Bool
- String
- int : num으로 부터 상속
- double : num으로 부터 상속
- num : int, double 다 됨
- List : class
- var numbers = [1,2,3,4];
- collection if : Menu , Navigation bar 만드는데 user가 로그인을 했는지 안했는지
- var giveMeFive = true; var numbers = [ 1,2,3,4, if(giveMeFive) 5 ];
- String Interpolation
- var name = '명관'; var age = 23; var greeting = 'hello my name is $name and ${age+2}';
- Collection for : 코드를 단축해준다.
- void main(List<String> args) { var oldFriends = ['명관', '주헌']; var newFriends = [ '지훈', '지원', '범준', for(var friend in oldFriends) "😊 $friend", ]; print(newFriends); } [지훈, 지원, 범준, 😊 명관, 😊 주헌]
- Maps
- Map<String, Object>
- Object란 어떤 유형이도 될 수 있다.
- var을 사용해서 Map을 사용할 수 도있고
Map<int,bool> player = {}; // key : int , value: bool Map<List<int>,bool> player = {}; // key : int값을 가진 List List<Map<int, bool>> player = [ { 1: true}, { 2: true}, ];
- Map<String, Object>
- Sets
- Set에 속한 모든 아이템은 유니크하다
- 모든 요소가 유니크하다, Sequences
- Function
- fat arrow syntax
- String sayhello(String name) => "안녕하세요 $name ~!";
- String sayhello(String name) { // call api // perform cla return "안녕하세요 $name ~!"; } void main() { print(sayhello('명관')); }
- Named Parameters
- 명시적으로 required로 표시되지 않는 한 선택 사항
- 기본값을 제공하지 않거나 Named parameters를 필수로 표시하지 않으면 해당 유형은 기본값이 null이 되므로 null을 허용
- null safety 때문에 default value를 줘서 만들 수 도 있음
- named arguments
- 전달해야 되는 요소들의 위치를 기억하는 대신 함수의 정의를 보고 순서상관없이 자료형만 지켜서 적어주면 됨
- required
- parameters들을 필수적으로 가져와야 된다고 명시
- String sayHello( {required String name, required int age, required String country}) { return '안녕하세요 $name, 저는 $age, $country입니다.'; } void main() { print(sayHello(age: 12, country: 'korea', name: '명관')); }
- Optional Positional Parameters
- String sayHello(String name, int age, [String? country = 'korea']) => '안녕하세요 $name, 저는 $age, $country입니다.'; void main() { var results = sayHello('명관', 12); print(results); }
- QQ Operator
- 좌항이 null이면 우항을 return
- 좌항이 null이 아니면 좌항을 return
String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON'; void main(List<String> args) { capitalizeName('abc'); capitalizeName(null); }
- Typedef
- 자료형에 사용자가 원하는 alias를 붙일 수 있게 해준다. (자료형 이름의 별명을 만들 때 사용)
- typedef listInt = List<int>; listInt reverseListOfNumbers(listInt list) { var reversed = list.reversed; return reversed.toList(); } void main(List<String> args) { print(reverseListOfNumbers([1, 23, 45, 44])); }
- Class
- class에서 property를 선언할 떄는 타입을 선언
- Constructors
- Constructors method는 class와 이름이 같아야한다.
class Player { final String name; int xp; Player(this.name, this.xp); void sayHello() { print('안녕 내이름은 $name'); } } void main(List<String> args) { var player = Player('명관', 1500); player.sayHello(); }
728x90
'Flutter' 카테고리의 다른 글
[피플] - 이슈 수정 (git, 협업능력) (0) | 2023.02.03 |
---|---|
[Flutter 문법]StatefulWidget parameter 넘겨주기 (0) | 2023.01.20 |
인스타그램 클론코딩 (0) | 2023.01.03 |
CustomErrorMessage (0) | 2023.01.03 |
Flutter 개발 공부 정리 (0) | 2023.01.02 |