Open serin9 opened 5 years ago
class Bicycle {
int cadence;
int _speed = 0;
int get speed => _speed;
int gear;
Bicycle(this.cadence, this.gear);
void applyBrake(int decrement) {
_speed -= decrement;
}
void speedUp(int increment) {
_speed += increment;
}
@override
String toString() => 'Bicycle: $_speed mph';
}
void main() {
var bike = Bicycle(2, 1);
print(bike);
bike.speedUp(5);
print(bike);
}
- 결과
```bash
Bicycle: 0 mph
Bicycle: 5 mph
main()
. 그리고 자바와 달리 top level 에 위치함this.{멤버변수명}
을 입력하는 것으로 파라메터로 입력된 값을 멤버변수에 할당함public, private, protected
키워드가 없음
_
) 를 붙이면 private 변수가 됨var
로 만들 수 있음final
을 사용
import 'dart:math';
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
{}
) 안에 있으면 optional 파라메터
import 'dart:math';
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
dart.math
는 dart 의 코어 라이브러리 중 하나
dart:core
, dart:async
, dart:convert
, dart:collection
// 팩토리 추가
Shape shapeFactory(String type)
{
if (type == 'circle') return Circle(2);
if (type == 'square') return Square(2);
throw 'Can\'t create $type.';
}
// 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);
}
String scream(int length) => "A${'a' * length}h!";
main() { final values = [1, 2, 3, 5, 10, 50]; for (var length in values) { print(scream(length)); } }
- 결과
```bash
Aah!
Aaah!
Aaaah!
Aaaaaah!
Aaaaaaaaaaah!
Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah!
String scream(int length) => "A${'a' * length}h!";
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 함)
끝!!
현욱이가 공유해준 페이지 "I want to learn Flutter. How to start?" 에서 소개된 codelabs 강의 "Intro to Dart for Java Developers" 가 따라해보기 좋은 것 같아서 따라하면서 정리해보겠음~
이거 잠깐 보니까 지우가 말한거 처럼 이걸 번역해서 블로그에 올려도 좋을 거 같아! 내용도 많이 어렵지 않고 그래서리 ㅎㅎ