Search

#003

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.
이전 값을 알아야지 변경이 감지가 된다.