Dart 언어 기본

semin Ryu·2023년 11월 21일
2

플러터를 하기 전에 알아야할 Dart언어

Dart는 구글이 개발한 프로그래밍 언어로써 Flutter에 사용됩니다.

기본적으로 Main() method는 필수

var 타입

  • 자동 타입, 처음 선언 타입으로 고정
    함수, 메소드안에서 지역변수 선언할 때 보통 var 사용

  • class에 사용될 때는 주로 구체화 ex) int, String

print(‘${name.runtimeType}); // 변수타입 프린트

dynamic 타입

  • 자동 타입, 타입 계속 변경 가능, 정말 필요할 때만 사용

nullable

  • null이 될 수도 있다. - ?로 – type뒤에 ?
Ex) 
String? name; // null로 지정이 가능하다
name?.inNotEmpty // name? 을 if(name != null)처럼 사용 가능

non-nullable

  • null이 될 수 없다. 기본적으로 모든 변수가 다 null이 될수없음. - !로
Ex) 
print(name2!); //name2는 null이 아니다

final

  • 한번 지정한 변수 값 변경 불가능, 빌드 타임의 값을 몰라도 됨

const

  • 한번 지정한 변수 값 변경 불가능, 빌드 타임의 값을 알아야 함 (const 자주 사용됨)

ex)

final String name = ‘asd’;
name = ‘zxc’; // error

const String name = ‘asd’;
name = ‘zxc’; // error

변수 타입 생략 가능
final String name = ‘asd’;
const String name = ‘asd’;

//DateTime.now(); //실행되는 순간의 시간

final DateTime now = DateTime.now(); // 가능
const DateTime now2 = DateTime.now(); //불가능, 빌드타임 모름

late

  • 초기 데이터 없이 변수 선언가능, fianl, const 앞에 사용
  • late 사용하여 선언한 데이터의 값이 없으면 접근 불가능

중간정리

  • final: 값을 재할당하지 못하는 변수를 만듦
  • dynamic type: 어떤 타입의 데이터가 들어올 지 모를 때 사용함
  • const: 컴파일 할 때 값을 알고 있는 변수
  • final: 런타임 중에 만들어질 수 있는 변수
  • late: final, var, String같은 것들 앞에 써줄 수 있는 수식어로서 어떤 데이터가 올 지 모를 때 사용한다.

.
.
.
.
.
.
자료형 모두 클래스

List, Map, Set 모두 var로 선언 가능

List

  • 대괄호[] 사용
List<int> numbers =[1,2,3,4]; // var numbers = [1,2,3,4]; 와 같음, 보통 var 사용을 선호
  • List method - first, last, add() ...

List의 collection if (중요)

var giveMeFive = true ;
var numbers = [1, 2, 3, 4, if(giveMeFive) 5]; // == numbers.add(5); 와 동일

print(‘$name and ${age+1}’);
프린트할 때 변수 넣으려면 $뒤에 변수
계산하려면 ${변수 + 1}

List의 collection for (중요)

for (var '새로운변수' in '추가할 리스트') "$'새로운변수' ",
Ex)
var olds = [‘a’,‘b’];
var news = [
	‘c’,
	‘d’,
	for(var friend in old) “good $friend”, // 새로운변수 friend
];

print(news); //[c, d, good a, good b];

Map

  • Map<int, bool> - int형 key, bool형 value

Set

  • 중괄호{}
Set<int> numbers = {1,2,3,4};// var numbers ={1,2,3,4};

fat arrow syntax // return 과 같은 기능

Name argument //파라미터 중괄호{}로 감싸기

Ex)
String sayHello({String name, int age}){
	return “$name, $age”;
}

void main(){
	print(sayHello(
		age: 11,
		name: ‘Son’,
	));
}

required // 필수값으로 지정, null safety 때문에
// 예로 사용자가 name없이 호출 할 경우 방지

Ex)
String sayHello({
	required String name.
	required int age,
})
	return “$name, $age”;
}

혹은 default value 설정해주기

Ex)
String sayHello({
	String name = ‘none’,
	int age =99,
})
	return “$name, $age”;
}

//required와 default value 설정은 상황에 맞게 사용

Optional

  • 특정 파마미터는 required 하지 않게하려면

  • 대괄호[]와 ?(nullable), default value 가 있어야 함

  • 잘 사용되지 않음

Ex)
String sayHello(
	String name.
	int age,
	[String? country = ‘korea’])=>
	“$name, $age, $country”;
}

void main(){
	var results = sayHello(‘Son’, 12);
}

QQ Operator

  • fat arrow

  • ??

    	left ?? right - 왼쪽이 null이라면 오른쪽 return, 아니라면 왼쪽 return
  • ??=

    	number ??= 1 -  왼쪽 값(number)가 null이라면 오른쪽 값으로 변경 
  • typedef 변수 = 자료형

Ex) typedef ListOfInt = List<int>;

★Class★

  • 클래스에서는 타입을 명시, var 사용 X
  • 생성자 앞에 new 안붙혀도 됨 Ex) var player = Player();
  • 이름이 겹치지 않는 이상 this 사용할 필요 없음

Class 변수

  • 클래스 변수 앞 late 사용하여 나중에 값 받아올 수도 있음

Class 생성자 //객체 생성

Ex)
Player(this.name, this.age); // 아래의 코드와 동일, 짧게 사용가능

Player(String name, int age){
	this.name = name;
	this.age = age;
}

Named Constructor Parameters //중괄호{}로 감싸기

  • Name argument와 유사(method Parameter)
  • 플러터에서 매우 많이 사용
Ex)
class Player	
	final String name;
	int age;

	Player({this.name, this.age});
}

void main(){

	var player = Player(
		age: 11,
		name: ‘Son’,	//마지막 콤마(,) 넣어줘야함, 코드 포맷팅용
	);
	// 플러터에는 이런 방식이 많음

}
  • null 값 방지를위해 각 파라미터 앞 required 키워드
  class Player	
	final String name;
	int age;

	Player({required this.name, 
		required this.age,
	});
}

Named Constructors // 자주 사용

  • 클래스 초기화, 특정값만 받아서 초기화
  • 콜론(:) 사용함으로써 Player 객체 초기화
Player.creatBluePlayer({
	required String name, 
	required int age
}) :	this.age = age,		//입력받은 값
	this.name = name,	//입력받은 값
	this.team = ‘blue’,	//기본 값
	this,xp = 0;		//기본 값
Cascade Notation //객체 내 변수 변경
// 세미클론 ; 없애고, ..추가
  
  
Ex)
var son = Player(name: ‘Son’, age: 30, team: tot)// 세미클론; 없애고
	..name = ‘Kim’ //son.name = ‘Kim’과 같음
	..age = 25; // son.age = 25; 와 같음, 마지막에 ;붙이기

//	..sayHello();// 메소드 사용도 가능

Enums // (자주 사용)

Ex)
enum Team { red, blue } // “ ”, ‘ ’ 사용하지 않음
// String team =’red‘; -> Team team = Team.red;

Abstract Classes // 추상 클래스

  • 플러터에서는 자주 사용하지 않음
Ex)
abstract class Human{	//추상 클래스
	void walk();
}

class Player extends Human{	//상속 extend
	void walk(){
		print(“walking”); // 추상클래스의 메소드 구현
	}
}

Inheritance (상속)

  • 플러터에서는 자주 사용하지 않음 But 중요한 개념
  • Java super과 유사
  • : 과 super
Ex)
class Human{
	final String team;
	String name;

	void say Hello(){
		print(“Hi”);
	}

}

class Player extends Human{
	Player({
		required this.team
		required String name
	}) : super(name);// 부모클래스 생성자에 name 전달
	
	
	void say Hello(){
		super.sayHello(); // 부모클래스 메소드사용
		print(“Hello”); //오버라이딩
	}
	
}

Mixin

  • 생성자가 없는 클래스

  • 플러터에서 자주 사용됨

  • extends 가 아닌 with 사용

  • 상속아님, Mixin 내부 프로퍼티, 메소드 가져오는 것, 여러클래스에 재사용 가능



감사합니다.

profile
류세민님의 개발블로그 입니다

0개의 댓글