다트코드는 여러 CPU의 아키텍처에 맞게 변화시켜줌

요거 따라하고 extension 깔면 알아서 vscode에서 적용된다
Dart는 객체지향언어임
모든건 class로 되어있음
main 함수는 모든 다트 프로그램의 엔트리포인트
반드시 main함수를 작성해야하고 그 함수에서 쓴코드가 호출이 됨
세미콜론을 잊지말고 꼭 닫아줘야 함 다트는 자동으로 닫아주는 기능이 없음
왜냐하면 일부러 세미콜론을 쓰지 않을때가 있기 때문에 꼭 유념해서 코드를 작성해야 함
var 로 변수 선언type 을 통해 변수 선언String name = '선영'
var name; // dynamic type
dynamic name;
if(name is String) { // 타입확인
// string 관한 함수들을 사용할 수 있음
}
개발자가 null 값을 참조할 수 없도록 하는 것
어떤 변수가 null 이 될 수 있음을 정확히 표시해야 함
null safety는 어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 걸 말한다.
String? seonyeong = 'seonyeong' //null 일수도 있음을 명시
if(seonyeong != null) {
// null이 아닐 때
}
dart의 변수는 기본적으로 nullable이 아니다.
정의된 변수를 수정할 수 없게 할 때 쓰는 final 변수 선언자
final name = 'seonyeong`
초기 데이터 없이 변수를 선언할 수 있게 해준다.
late final String name;
// do something, go toapi
complit-time constant를 만들어준다.
dart의 타입들은 object로 이루어져있다
Type: List<int>
void main() {
var numbers = [1, 2, 3, 4, 5];
}
void main() {
List<int> numbers = [1, 2, 3, 4, 5];
}
두개는 동일하게 동작한다.

타입들은 class로 정의되어있다.
void main() {
var giveMeFive = true;
var numbers = [
1,
2,
3,
4,
if(giveMeFive) 5, // giveMeFive가 true면 List에 5가 추가 됨
];
}
string imterpolation
text에 변수를 추가하는 방법
void main() {
var name = 'seonyeong';
var greeting = 'hello $name'; // 변수 추가
}
$ 뒤에는 변수 사용void main() {
var name = 'seonyeong';
var age = 10;
var greeting = 'hello $name , ${age + 2}'; // 변수에 값 더하기
print(greeting);
}
for을 이용한 계산
void main() {
var oldFrineds = ['local', 'heeZzang'];
var newFriends = [
'go_hard',
'bibi',
for (var firend in oldFrineds) "💞 $firend"
];
print(newFriends);
}
// Type : Map<String, Object>
// Object는 typescript의 any라고 볼 수 있다.
void main(){
var palyer = {
'name': 'Messi',
'age': 33,
'club': 'Barcelona',
}
}
void main(){
Map<int,bool> player= {
1: true,
2: false,
}
Map<List<int> , bool> player = {
[1,2,3,4,5] : true,
}
}
모두 유니크 한 값
var numbers= {1,2,3,4};
set<int> numbers = {1,2,3,4}
// 아무것도 리턴하지 않는 함수
void sayHello(String name) {
print("Hello $name");
}
//string type을 리턴하는 함수
String sayHello_string(String name) {
return "Hello $name";
}
// 바로 리턴
String sayHello_string_arrow(String name) => "Hello $name";
name argument를 파라미터로 받아서 쓸 때,
String sayHello({String name, int age, String country}) {
return "Hello $name, you are $age, and you come from $country";
}
void main () {
print(sayHello(
age : 12,
country :"",
name :""
)
)
}
사용할 때는 소괄호를 쓰지 않음,
만약 옵셔널로 값이 들어가게 될 때 방지하고자
1. 정의한 함수에 기본 디폴트 값을 넣어주기 default Value
2. required 사용하기
String sayHello({
required String name
}) {
//,,,
}
객체의 값을 변겯ㅇ하고 싶을 때 아래와 같은 syntax sugar 적용 가능
// 같은 객체에 대해 여러 작업을 수행할 수 있도록 하는 표기법
void func() {
var seonyeong = Player(name: 'seonyeong', xp: 100, team: 'red');
seonyeong
..name = 'seonyeong' // 점 하나는 선언한 변수를 의마한다.
..xp = 100
..team = 'red';
seonyeong.name = 'seonyeong';
seonyeong.xp = 100;
seonyeong.team = 'red';
}
enum Team { red, blue }
class Player {
String name;
int xp;
Team team;
Player({
required this.name,
required this.xp,
required this.team,
});
}
// 같은 객체에 대해 여러 작업을 수행할 수 있도록 하는 표기법
void func() {
var seonyeong = Player(name: 'seonyeong', xp: 100, team: Team.red);
seonyeong
..name = 'seonyeong'
..xp = 100
..team = Team.blue;
}
abstract class Human {
void walk();
}
class Player extends Human {
String name;
int xp;
Team team;
Player({
required this.name,
required this.xp,
required this.team,
});
void walk() {
print('$name is walking');
}
}
// 이런식으로 상속받고 또 다른 동작을 하는 클래스를 만들 수 있다.
class Coach extends Human {
void walk() {
print('coach is walking');
}
}
class Human {
final String name;
Human({required this.name});
void sayHello() {
print('Hello, $name');
}
}
enum Team { red, blue }
class Player extends Human {
final Team team;
Player({
required this.team,
required String name, // 필수요소를 받겠다고 정의
}) : super(name: name);
//Player 생성자에서 온 name은 그 즉시 super 생성자로 전달 된다.
// 부모클래스의 메소드를 재정의
void sayHello() {
super.sayHello(); // 부모클래스의 sayHello() 메소드를 호출
// 확장한 부모 클래스의 프로퍼티에 접근하게 하거나 메소드를 호출하게 하려면 super라는 키워드를 사용한다.
print('My team is ${team}');
}
}
mixin Strong {
final double strengthLevel = 1500.99;
}
mixin QuickRunner {
void runQuick() {
print("ruuuuuuuun!");
}
}
mixin Tall {
final double height = 1.99;
}
enum Team { red, blue }
class Player with QuickRunner, Tall {
final Team team;
Player({
required this.team,
});
}
class Horse with Strong, QuickRunner {}
class kid with QuickRunner {}
객체지향언어에 대한 공부를 따로 한적이 없었는데, 이번에 좋은 기회로 객체지향 언어를 사용하게 되었다.
이론적인 부분이지만 강의를 통해서 클래스에 대해 좀 더 알게 된거같은데,,
실전을 통해 더 많은 개념을 익혀야겠다는 생각이 ..ㅎ.ㅎ..