#0 기본 컨셉
보아하니, 모든 변수에 대해서는
1. 처음 선언 되었을 때의 "내용"
2. 처음 선언 되었을 때의 "타입"
이 2가지가 변동되는가, 고정되는가에 대해서 각 선언문이 달라진다는 것을 알 수 있었다.
#1 dynamic
dynamic name = 1;
이렇게 선언해주면, int로 타입이 지정된다.
dynamic = 'kellog';
그 뒤에 이렇게 오버라이드 해주면 String 타입이 된다.
즉, dynamic은 타입, 내용 모두를 오버라이드 가능하다.
#2 var
var name = 1;
기본적으로 모든 타입이 처음에 부여가 가능하다.
name = 'kellog';
하지만 뒤에 이렇게 String type으로 변환하려고 하면 에러가 발생된다.
이유는, var로 선언이되면, 처음 선언된 1)타입, 2)내용 에서
1)타입은 고정이 되고
2)내용은 오버라이드 가능하다.
#3 이미 선언된 변수를 추가 선언 못한다.
// 가능한 경우
var name = 'Maximus';
name = 'trash';
// 이런 경우에는 기존의 선언에서 타입이 변하는게 아니라 내용이 변하는 것이라 가능
// 불가능한 경우
var name = 'foods';
dynamic name = 'dog';
var name = 'cat';
// 이런 경우에는 이미 var로 name이 선언 되었기 때문에 뒤에 나오는 것이
// 어떤 타입이든 상관없이 변수를 중복으로 만들 수 없다.
#4 ! 아니면 ?
String? name = 'name';
// ?를 넣게 되면, 추후에 String으로 선언된 name이 null(공백)으로 추가 선언되어도 괜찮다.
print(name!);
//이렇게 !를 넣게 되면, 이 값은 "반드시 null 값이 아니다." 라는 뜻이다.
#5 final vs const
// 공통점
final String name = 'name';
const String name2 = 'name2';
// 일때, 이후에 나오게 될 name이나 name2에 대해서는
// 타입도, 내용(여기서는 각각 'name', 'name2')를 변경시킬 수 없다.
// 활용법
// final과 const는 var 성격을 내포하고 있기 때문에
// 위에 쓴 것 처럼 내가 사용하고자 하는 타입을 선언안해줘도 된다.
final name = 'name';
const name2 = 'name2';
// 이렇게
차이점
final은 빌드되고 나서 "실행될때"의 값을 노출해준다. 즉, 실행버튼을 누르면
코드작성 - run버튼 실행 - 빌드 - 해당 시간이 저장
이 된다.
반면, const는 이미 선언 되어있을때의 시간이 저장되는 것이 아니라, 해당 코드가 작성 되었을때,
시간이 저장된다.
코드작성 - 해당시간이 저장 - run버튼 실행 - 빌드
의 과정인 것이다.
그렇기에
final은 DateTime now()의 경우를 실행할 때의 성격과 같이
코드작성 - run버튼 실행 - 빌드 - 해당 시간이 저장
되어서 문제가 없지만,
const 의 경우 DateTime now()를 할 경우는
서로 상충 되어서 작동이 안된다.
#6 ++, --, +=, *=, /=, ??=
++는
1씩 값이 증가된다.
--는
1씩 값이 감소한다.
+=는
var name = 1;
name += 5;
// 6이 나온다.
즉, 내가 += 뒤에 선언해준 값 만큼 name에 덮어진다.
-=도 원리는 마찬가지
*=는
a *= b의 경우에
a라는 변수에 a*b를 담아준다. 라는 뜻이다.
/=는
a /= b의 경우에
a라는 변수에 a/b를 담아준다.
??=
의 경우는
int number = 1;
number ??= 4;
// 결과는 1
왜 그렇냐면, ??=의 경우에는
왼쪽의 변수가 null 값이면, ??= 오른쪽 값을 채워주고,
null이 아니라면 그냥 pass해줘 라는 의미다.
// 따라서
int iam = null;
iam ??= 55;
// 결과값 55
void main() {
var mat = 4;
mat ??= 555;
print(mat);
var meet = null;
meet ??= 55;
print(meet);
}
// 결과값
// 4
// 55
#7 is, is!
void main() {
int number = 1;
// number라는 변수가 int 타입이 맞냐
print(number is int);
// true
// number는 int 타입이 아니다.
print(number is! int);
// false
}
보면 알겠지만
변수 is 타입 -> 변수가 입력된 타입이 맞아?
변수 is! 타입 -> 변수가 입력된 타입이 아니지?
'개발일지 > 임시카테고리' 카테고리의 다른 글
Dart 기본문법 switch 문 기초 (0) | 2025.03.21 |
---|---|
나를 위한 Dart 기본기 기초 문법 총모음 2 - Map, List, Set (0) | 2025.03.21 |
Flutter - 기본 변수 특징 var (0) | 2025.02.22 |
javascript 반복문 (0) | 2025.01.23 |
css flex (1) | 2025.01.20 |