[flutter] flutter/dart 변수타입 정리

popolarburr·2023년 8월 31일
0
post-thumbnail

기본타입

int
bool
double
String
...

var


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은 선언 당시의 데이터 타입이 고정적이지 않고 유동적이다.

 dynamic d1 = '레드벨벳';
 ...
 d1 = 5;
 
 에러 x

nullable / non-nullable

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 / const

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, Map, Set

// 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'));
profile
차곡차곡

0개의 댓글