Skia 엔진
컴포넌트를 만들어 두면 재사용 할 수 있다 .
위젯들의 모임은 컴포넌트라고 한다.
플러터는 네이티브 앱의 기능을 매칭시켜서 그리는게 아니라, 직접 그리기 때문에 매칭과정없이 빠르다.
AOT (Ahead of Time)
컴파일을 실행전에 하기 때문에 AOT
최종 배포할 때 사용
JIT (Just In Time)
런타임에서 실행할 수 있는 중간언어로 변환후 실시간 번역
개발 할 때만 가상머신이 필요하다. (VM이 이해할 수 있게 만 컴파일)
String? 문법
Null값을 받을 수 있게 된다. Optional과 비슷
String? username; // String과 null을 받을 수 있는 String? 타입, Optional과 비슷
JavaScript
복사
void main(List<String> args) {
username = null; // 여기서 에러가 안난다.
print(username ?? "홍길동"); // null이 들어오면 "홍길동" 을 출력한다.
}
JavaScript
복사
var a1 = (n1, n2) {
return n1 + n2 ;
};
JavaScript
복사
여러 함수를 사용할 때는 익명함수 사용
Function a2 = (n1, n2) {
return n1 + n2 ;
};
JavaScript
복사
한 줄 만 사용할 때는 람다식 사용
// 여러줄을 할때는 람다를 쓰면 안되고, 하나만 표현할 때만 사용할때
Function a3 = (n1, n2) => n1 + n2 ;
JavaScript
복사
함수의 구조
어떤 것이 들어오고, 어떻게 반환되는지 알아야된다.
클래스의 구조
클래스에서 사용하는 함수는, 메서드라 부르고 메서드를 통해서 그 객체의 상태를 변화 시킨다.
객체 지향 프로그램에서 두 개의 스레드가 거의 동시에 메서드를 실행시키게 되면, 기대하지 않는 효과가 발생할 수 있다.
이를 방지하기 위해서는 동기화시켜서 한 트랜잭션이 완료될 때까지 기다려야 된다.
변경 가능한 상태를 최대한 제거 하려고 노력한 프로그맹이 함수형 프로그래밍
선택적 매개변수 생성자
선택적 매개변수 null이 들어와도 허용.
저장 할 때, 빌더 패턴처럼 사용 가능하고, 키:밸류로 저장하기 때문에 가독성이 진짜 좋다.
선택적 매개변수 생성자를 상요하고, 필요하면 required를 붙인다.
초기화 될때 null이 가능하면 ?를 붙인다.
연습 코드
class Dog {
String name; // new될때 받기
int age; // 기본값 0
String color; // new될때 받기
int? thirsty; // 기본값 0
Dog.logic(this.name, this.age, this.color, this.thirsty) {
age = age + 10;
print("logic 실행됨"); // 로직을 추가할 수 있다.
}
Dog.select(
{required this.name, this.age = 0, required this.color, this.thirsty});
Dog(this.name, this.age, this.color, this.thirsty);
Dog.copy(Dog oldDog)
: this.name = oldDog.name,
this.age = oldDog.age,
this.color = oldDog.color,
this.thirsty = oldDog.thirsty;
}
void main() {
Dog d4 = Dog.select(name: "토토", color: "빨간색", age: 10);
print(d4.name);
print(d4.color);
print(d4.age);
print(d4.thirsty);
// Dog d1 = Dog("토토", 0, "하얀색", 0);
// Dog d2 = d1;
// Dog d3 = Dog.copy(d1);
// print(d1.hashCode);
// print(d2.hashCode);
// print(d3.hashCode);
}
JavaScript
복사
null이라면 length를 호출하지마
void main() {
String? username;
print(username?.length);
}
JavaScript
복사
? (null 대체 연산자 = .orElseThrow)
?? (null 이라면 다른 걸 출력해)
! (있으니까 가져와 = .get)
late 연산자
무조건 받아야 되는데 타이밍상 약간 지연이 발생하는 경우
Mixin 클래스
다형성의 편의성 제공 문법 숙지할 것!
mixin class Wheel {
String name = "바퀴";
}
mixin class Engine {
int power = 1000;
}
class Car with Engine, Wheel {}
void main() {
Car c = Car();
print(c.power);
print(c.name);
}
JavaScript
복사
•
통신할 때 불변을 유지를해야 다시 그리는 행위를 하지 않는다.
조건
1.
기존 데이터가 불변이어야 된다.
2.
이전 값을 알아야지 변경이 감지가 된다.