
Dart의 기본타입에는
자주 사용되는 변수는
int : 정수
bool : true 또는 false 을 나타냄
double : 실수
String : 문자형
var 타입은 선언할때 그 타입으로 고정(fix)된다.
즉, 데이터 타입이 선언 되는 즉시 결정되고 변경이 불가하다.
ex) var v1 = '그니'; //선언
v1= 5; //에러
모든 프로그래밍 언어는 위에서부터 아래로 출력하기 때문에
var v1= '그니' 라고 첫째줄에서 선언하고 변수 v1은 String으로 고정 되었으므로
이후에 String 값 이외의 변수 값을 넣을 수 없음.
var 타입과 달리 dynamic은 선언 당시의 데이터 타입이 고정적이지 않고 유동적이다.
dynamic k1 = '그니';
k1 = '2'; //에러가 나지 않음
-List 변수는 다른 프로그래밍 언어에서 배열(Array)로 불리우는 타입의 변수이다.
선언방식은 아래와 같이 []로 해준다.
var List = [그니,자니,지니,고니];
선언 후에 값을 변경하지 못하게 하려면 선언 시, const 선언을 해준다.
var List = const[그니,자니,지니,고니];
List 변수에 대한 제어는 아래와 같이 이루어진다.
List를 출력할 때 순서대로 출력
print(List);
List에 몇개가 있는지 그에 대한 길이를 출력할때 (4개면4출력,8개면8출력)
print(List.length);List의 선택된 값을 출력할 때, List[0]은 그니가 출력되고 List[3]은 고니가 출력됨
print(List[0]); //그니 출력
print(List[3]); //고니 출력
List에 값을 추가 하고 싶을때
List.add(주니);
//List에서 특정값을 제거하고 싶을 때
List.remove(그니);
List에서 특정 위치의 값을 제거하고자 할때, [0]은 List의 첫번째 값인 그니값이 제거
List.removeAt(0);
각 값의 변수 타입을 적어주면 된다.
Map<key타입, Value타입> 변수명 = {
key1 : Value1,
key2 : Value2,
...
};
예시로 한번 알아보자
Map<String, String> dictionary = {
'Harry Potter' : '해리포터',
'Ron Weasley' : '론 위즐리',
'Hermione Granger' : '헤르미온느 그레인저',
};
print(dicionary);
출력 문 : {Harry Potter : 해리포터, Ron Weasley: 론 위즐리, Hermione Granger: 헤르미온느 그레인저}
Map<String, bool> isHarryPotter ={
'Harry Potter' : true,
'Ron Weasley' : true,
'Ironman' : false,
};
print(isHarryPotter);
출력문: {Harry Potter: true, Ron Weasley:true, Ironman: false}
변수명.addAll({
key:Value,
});
예시 isHarryPotter.addAll({
'Spiderman' : false,
});
print(isHarryPotter);
출력문: {Harry Potter:true, Ron Weasley: true, Ironman: false, Spiderman: false}
변수명['새로운 key 값'] = 새로운 Value;
isHarryPotter['Hulk'] = false;
print(isHarryPotter);
출력문: {Harry Potter:true, Ron Weasley: true, Ironman: false, Spiderman: false, Hulk: false}
변수명 ['변경할 key 값 '] = 새로운 Value;
isHarryPotter['Spiderman']= true;
print(isHarryPotter);
출력문: {Harry Potter:true, Ron Weasley: true, Ironman: false, Spiderman: true, Hulk: false}
변수명.remove('삭제할 key 값');
isHarryPotter.remove('Spiderman');
print(isHarryPotter);
출력문: {Harry Potter:true, Ron Weasley: true, Ironman: false, Hulk: false}
변수명.keys;
변수명.Values;
print(isHarryPotter.keys);
출력문: (Harry Potter, Ron Weasley, Ironman, Hulk)
print(isHarryPotter.Values);
출력문: (true,true,false,false)
var 대신 final 키워드를 사용하여 변수를 만들게 되면 이 변수는 업데이트 할 수 없습니다. 자바스크립트에서 사용하는 const와 비슷한 역할을 합니다.
final 키워드를 이용하여 변수를 선언합니다.
final name = '그니';
print(name);
final 키워드를 이용하여 선언한 변수는 업데이트 될 수 없습니다.
final name = '그니';
name = '지니'; //에러 발생
print (name);
Dart에서 final 변수와 const 변수 비교
final 변수: 선언과 동시에 값을 할당하면 이후에는 값을 변경할 수 없습니다.
const 변수 : 선언과 동시에 값을 할당하면 이후에는 값을 변경할 수 없으며, 컴파일 타임에 값을 계산합니다.
--Dart에서는 final 변수는 프로그램의 안정성을 높일 수 있고
const 변수는 컴파일 타임에 값을 계산하여 런타임 성능을 향상시킨다.
final Set<변수타입 > 변수명 ={
값1,
값2,
값3,
...
};
final Set<String> names = {
'그니'
'지니'
'주니'
};
print(name);
출력문: {그니,지니,주니}
변수명.add(값);
names.add('혀니');
print(names);
출력문: {그니,지니,주니,혀니}
변수명,remove('그니');
print(names);
출력문: {지니,주니,혀니}
변수명.contains(확인하고자 하는 값);
print (names.contains('혀니'));
출력문: true
null은 빈상자이다.
0이 아니라 아무것도 존재하지 않는 상태라는 것이다.
쉽게 말해 휴지를 다쓰고 휴지곽만 있는 상태는 0 이지만
휴지곽도 없는 상태가 바로 null이다.
데이터 타입 뒤에 붙이는 '?'
String name;
String? name;
Dart는 기본적으로 위와 같이 선언하면, Null을 허용하지 않는 변수로 본다.
쉽게 설명하면 다음과 같다.
String name;
Non-nullable variable. Null 허용하지 않고, 값이 꼭 들어가 있어야한다.
값을 넣어주지 않고 변수를 사용하면 Null 에러 발생
String? name;
Nullable variable. Null을 허용하고, 선언하는 순간 바로 Null이 초기값으로 들어간다.
ex) String name ='그니';
print(name);
//name = null;
-어떠한 데이터 타입 뒤에도 '?'만 들어가면 nullable, null이 될 수도 있는 상태를 의미한다.
-변수타입에 ?가 들어가 있는 변수명 뒤에 느낌표 '!'가 들어가면, 절대로 null이 아니다 라는 것을 의미한다는 것이다.
ex) String? hello = '그니';
print(hello!) 이면
hello는 절대로 null이 아니다 라는 의미이다.
-즉, '?'가 선행되어야 하고, 그 다음'?'가 붙어있는 변수 뒤에 '!'가 따라온다.
null관련 예시를 한가지 알아보자
double? number = 4.0; 1)
print(number); --> 4.0
number = 2.0; 2)
print(number); --> 2.0
number = null; 3)
print(number); --> null;
number ??= 3.0; 4)
print(number); --> 3.0
'??' 라는 연산자는 왼쪽(변수)에 있는 값이 null이면 오른쪽 값을 넣어서 대입한다.
즉, 3번에서 number에 null값을 넣고, 확인해보면 현재 상태는 null값이니까
number ??=3.0 이라고 선언하면 3.0으로 값이 대입되기에 출력시 3.0이 나온다.
이상으로 Dart변수에 대해서 알아보았습니다.