int
bool
double
String
...
var타입은 우리가 선언할 때 그 타입으로 fix된다. 즉, 데이터 타입이 선언 당시에 결정되고, 이는 변경이 불가하다.
ex) var v1 = '레드벨벳'
v1 = 5 ----> 에러
에러코드
A value of type 'int' can't be assigned to variable of type 'String'.
Try changing the type of the variable or casting the right-hand type to 'String'.
'Int' 형식의 값은 'String' 형식의 변수에 할당할 수 없습니다.
변수 유형을 변경하거나 오른쪽 유형을 'String'으로 캐스팅합니다.
var v1 = '레드벨벳' 이라고 선언하는 당시, 변수 v1의 데이터 타입은 String으로 고정되고, 고정된 이후에는 String 값 이외의 유형을 캐스팅하거나 값을 넣을 수 없음.
이와 달리 dynamic은 선언 당시의 데이터 타입이 고정적이지 않고 유동적이다.
dynamic d1 = '레드벨벳';
...
d1 = 5;
에러 x
1.nullable - null이 될 수 있다
2. non-nullable - null이 될 수 없다
3.null - 아무런 값도 있지 않다
ex)
String name = '코드팩토리';
print(name);
//name = null;
// 어떠한 데이터 타입 뒤에도 '?' (물음표)만 들어가면 nullable, null이 될 수도 있는 상태를 의미하는 것이다 .
// 변수타입에 ?가 들어가있는 변수명 뒤에 느낌표 ! 가 들어가면, 절대로 null 이 아니다 라는 것을 의미하는 것이다 .
// 예를 들어 String? hello = 'world';이고
// print(hello!); 이면
// hello는 절대로 null이 아니다라는 의미이다. 즉 ?가 선행되어야 하고, 그 다음 ?가 붙어있는 변수 뒤에 !가 따라오는 것이다 .
String? name2 = '블랙핑크';
print(name2);
String name3 = '하이';
print(name3);
하나 더 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이 나오는 것이다.
final a = '코드팩토리';
const b = '블랙핑크';
const는 컴파일 때 변수가 초기화. final은 런타임때 변수가 초기화.
final DateTime now = DateTime.now(); -> 1)
const DateTime now2 = DateTime.now(); -> 2)
1)은 정상. DateTime 자체가 런타임때 값을 저장하는 변수이고, final 또한 런타임때 초기화 하기 때문에 사용해도 상관x.
그러나 2)는 에러. 왜냐하면 const는 런타임이 아닌 컴파일 때 값을 초기화하기 때문에 각각이 변수를 초기화 하는 시점이 달라 에러발생.
// List
// 리스트
List<String> blackPink = ['제니', '지수', '로제', '리사'];
List<int> numbers = [1,2,3,4,5,6];
print(blackPink.length);
print(numbers);
blackPink.add('코드팩토리');
print(blackPink);
blackPink.remove('코드팩토리');
print(blackPink);
print(blackPink.indexOf('로제'));
// Map
// Key / Value
Map<String, String> dictionary = {
'Harry Porter':'해리포터',
'Ron Weasley' : '론 위즐리',
'Hermione Granger' : '헤르미온느 그레인져',
};
print(dictionary);
Map<String, bool> isHarryPorter = {
'Harry Porter': true,
'Ron Weasley' : true,
'Hermione Granger' : true,
'Iron Man' : false,
};
print(isHarryPorter);
isHarryPorter.addAll({
'SpdierMan' : false,
});
print(isHarryPorter);
print(isHarryPorter);
print(isHarryPorter['Iron Man']);
isHarryPorter['Hulk'] = false;
print(isHarryPorter);
isHarryPorter['Hulk'] = true;
print(isHarryPorter);
print(isHarryPorter.keys);
isHarryPorter.remove('Harry Porter');
print(isHarryPorter);
print(isHarryPorter.keys);
// Set
final Set<String> names = {
'Code Factory',
'Flutter',
'Black Pink',
'Flutter',
};
print(names);
names.add('Jenny');
print(names);
names.remove('Jenny');
print(names);
print(names.contains('Jenny'));
print(names.contains('Flutter'));