flutter-flexer / study_log

0 stars 0 forks source link

자바 개발자를 위한 dart 소개 (from codelabs) #1

Open serin9 opened 5 years ago

serin9 commented 5 years ago

현욱이가 공유해준 페이지 "I want to learn Flutter. How to start?" 에서 소개된 codelabs 강의 "Intro to Dart for Java Developers" 가 따라해보기 좋은 것 같아서 따라하면서 정리해보겠음~

이거 잠깐 보니까 지우가 말한거 처럼 이걸 번역해서 블로그에 올려도 좋을 거 같아! 내용도 많이 어렵지 않고 그래서리 ㅎㅎ

serin9 commented 5 years ago

Intro to Dart for Java Developers

1. 서론

2. 단순한 dart 클래스 생성하기

- 결과
```bash
Bicycle: 0 mph
Bicycle: 5 mph

3. (오버로딩 대신) optional 파라메터 사용하기

class Rectangle { int width; int height; Point origin; Rectangle({this.origin = const Point(0, 0), this.width = 0, this.height = 0});

@override String toString() => 'Origin: (${origin.x}, ${origin.y}), width: $width, height: $height'; }

main() { print(Rectangle(origin: const Point(10, 20), width: 100, height: 200)); print(Rectangle(origin: const Point(10, 10))); print(Rectangle(width: 200)); print(Rectangle()); }

- 결과
```bash
Origin: (10, 20), width: 100, height: 200
Origin: (10, 10), width: 0, height: 0
Origin: (0, 0), width: 200, height: 0
Origin: (0, 0), width: 0, height: 0

4. factory 생성하기

abstract class Shape { num get area; }

class Circle implements Shape { final num radius; Circle(this.radius); num get area => pi * pow(radius, 2); }

class Square implements Shape { final num side; Square(this.side); num get area => pow(side, 2); }

main() { final circle = Circle(2); final square = Square(2); print(circle.area); print(square.area); }

- 결과
```bash
12.566370614359172
4

// main 수정 main() { final circle = shapeFactory('circle'); final square = shapeFactory('square'); print(circle.area); print(square.area); }

- 방법 2: 팩토리 생성자 생성
  - dart 의 factory 키워드로 factory 생성자를 만들 수 있음

abstract class Shape { // Shape 클래스에 추가 factory Shape(String type) { if (type == 'circle') return Circle(2); if (type == 'square') return Square(2); throw 'Can\'t create $type.'; } num get area; }

// main 수정 main() { final circle = Shape('circle'); final square = Shape('square'); print(circle.area); print(square.area); }


## 5. 인터페이스 implement 하기
- dart 는 모든 class 가 interface 로 정의되기 때문에 `interface` 라는 키워드가 없음
- CircleMock 클래스에서 완전한 implementation 을 작성하지 않아도 에러가 발생하지 않음
- 실습 코드:
```dart
import 'dart:math';

abstract class Shape {
  factory Shape(String type) {
    if (type == 'circle') return Circle(2);
    if (type == 'square') return Square(2);
    throw 'Can\'t create $type.';
  }
  num get area;
}

class Circle implements Shape {
  final num radius;
  Circle(this.radius);
  num get area => pi * pow(radius, 2);
}

class CircleMock implements Circle {
  num area;
  num radius;
}

main() {
  final circle = Shape('circle');
  print(circle.area);
}

6. dart 에서 함수형 프로그래밍하기

main() { final values = [1, 2, 3, 5, 10, 50]; for (var length in values) { print(scream(length)); } }

- 결과
```bash
Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!

main() { final values = [1, 2, 3, 5, 10, 50]; // 함수 chaining values.map(scream).forEach(print); }


- `dart:collection` 의 list 와 iterables 는 `fold`, `where`, `join`, `skip` 등을 사용할 수 있음
- `skip(1)` 은 첫 번째 값인 1 을 skip 한다는 의미
- `take(3)` 은 다음 3 개의 값인 {2, 3, 5} 만 취한다는 의미 (나머지는 skip)

## 7. 축하축하!!
- (아래 링크들은 아직 직접 보지 않음)
- 추가적으로 보면 좋을 거
  - [core libraries](https://www.dartlang.org/guides/libraries/useful-libraries)
  - [package](https://pub.dartlang.org/)
- 여기서는 다루지 못한 다음 스텝들:
  - async/await: [DartPad example](https://dartpad.dartlang.org/fae22cffa7b184b4d27cd96dd633a5af)
  - Method cascades: [method cascades in dart](http://news.dartlang.org/2012/02/method-cascades-in-dart-posted-by-gilad.html)
  - [Null aware operators](http://news.dartlang.org/2015/08/dart-112-released-with-null-aware.html)
  - [dart & flutter 와 관련된 codelabs](http://news.dartlang.org/2015/08/dart-112-released-with-null-aware.html)
    - 이거 대충 봤는데 여기있는거 실습으로 따라해봐도 좋을거 같음!!!
- (나머지 learn more 내용은 ~~귀찮아서~~ skip 함)

끝!!