선언과 사용
2023. 3. 13. 22:26ㆍ앱 개발/dart
1. 정수 타입 선언
int
2. 실수 타입 선언
double
3. 문자열 타입 선언
String
- 희안하게 대문자를 사용
- 문자열의 길이 - > length 속성 사용
- 변경 불가능한 타입
void main() {
// 글자 타입 - String
String name = "John";
name = "David" // 변수에 새로운 값을 할당함
// String 타입 변수에 새로운 값을 할당하면 이전 값이 변경되는 것이 아니라
// 새로운 String 객체가 생성되고 이를 참조함
String name2 = "Ann";
print('$name $name2'); // David Ann
print('${name} ${name2}'); // David Ann
print('$name.runtimeType ${name2.runtimeType}');
// David.runtimeType String
}
4. Boolean 타입
bool
ex) bool isSunny = true;
5. 변수 선언
1. var
- 타입 추론을 지원하기 위해 사용되는 키워드
- 컴파일러가 자동으로 추론하여 결정됨
- 즉, 초기값의 데이터 타입을 기반으로 변수의 타입이 결정됨
2. dynamic
- 동적 타이핑을 지원하기 위해 사용되는 키워드
- 모든 데이터 타입을 가질 수 있다.
- 즉, 변수의 데이터 타입은 런타임 시점에 결정, 해당 변수에 대해 어떤 연산이 수행될 때마다 해당 연산의 타입 체크가 실행됨.
- 보통 다른 언어에서의 Object 타입과 비슷한 역할
void main() {
dynamic x = 10;
print(x.runtimeType); // int
x = "hello";
print(x.runtimeType); // String
var y = 20;
print(y.runtimeType); // int
y = "hi";
// line.6에서 y의 타입이 int가 되었기 때문에
// String Type "hi"를 할당하려고 하면 데이터 타입이 다르기 때문에 컴파일 에러 발생
print(y.runtimeType);
}
3. var와 dynamic의 차이
- var는 초기화 시 타입이 결정되며 다른 타입으로 재할당 시 컴파일 에러 발생(같은 타입으로만 재할당 가능)
- dynamic은 런타임 시점에 데이터 타입이 결정되기 때문에 재할당 시에도 다른 데이터 타입으로 할당 가능함.
6. nullable / non-nullable
void main() {
// nullable - null이 될 수 있다.
// non-nullable - null이 될 수 없다.
// null - 아무런 값도 있지 않다.
// non-nullable
String name = "John";
print(name); // John
// nullable - ?
String? name2 = "Ann";
print(name2!); // 현재 이 값은 null이 아니다.
name2 = null;
print(name2); // null
}
7. final / const
void main() {
final String name = "John";
print(name);
//name = "David"; // error
const name2 = "Ann";
print(name2);
//name2 = "Jully"; // error
// 초기화 시 재할당 불가능
// final과 const 모두 불변 변수를 선언할 때 사용됨
}
1. 공통점
- 값을 변경할 수 없는 불변 변수를 선언하는 데 사용
2. 차이점
- 초기화 시기
- final : 런타임 시점에 초기화
- const: 컴파일 시점에 초기화
- const는 컴파일 시점에 초기화 되기 때문에, 값으로 컴파일 타임 상수로만 사용할 수 있다.
- ex) DateTime.now()와 같은 런타임 상수를 const로 사용할 수 없음
- const는 DateTime.now()가 빌드되는 시점을 모르기 때문에 상수로 사용할 수 없다.
const DateTime x = DateTime.now();
// 컴파일 에러 발생 : DateTime.now()는 런타임 상수가 아닙니다.
8. Assignment Operator
- = : 일반적인 할당 연산자로, 변수에 값을 할당합니다.
- += : 왼쪽 변수에 오른쪽 피연산자를 더한 값을 왼쪽 변수에 할당합니다.
- -= : 왼쪽 변수에서 오른쪽 피연산자를 뺀 값을 왼쪽 변수에 할당합니다.
- *= : 왼쪽 변수에 오른쪽 피연산자를 곱한 값을 왼쪽 변수에 할당합니다.
- /= : 왼쪽 변수를 오른쪽 피연산자로 나눈 값을 왼쪽 변수에 할당합니다.
- %= : 왼쪽 변수를 오른쪽 피연산자로 나눈 나머지 값을 왼쪽 변수에 할당합니다.
- ~/= : 왼쪽 변수를 오른쪽 피연산자로 나눈 몫 값을 왼쪽 변수에 할당합니다.
- <<= : 왼쪽 변수를 오른쪽으로 시프트한 값을 왼쪽 변수에 할당합니다.
- >>= : 왼쪽 변수를 오른쪽으로 시프트한 값을 왼쪽 변수에 할당합니다.
- &= : 왼쪽 변수와 오른쪽 변수를 비트 단위 AND 연산한 결과를 왼쪽 변수에 할당합니다.
- ^= : 왼쪽 변수와 오른쪽 변수를 비트 단위 XOR 연산한 결과를 왼쪽 변수에 할당합니다.
- |= : 왼쪽 변수와 오른쪽 변수를 비트 단위 OR 연산한 결과를 왼쪽 변수에 할당합니다.
- ??= 변수가 null인 경우에만 할당하고, 그렇지 않으면 그대로 둡니다.
void main() {
double? number = 4.0;
print(number); // 4
number ??= 2.0;
print(number); // 4
number = null;
number ??= 2.0;
print(number); // 2
}
9. 값 비교
void main() {
int number = 1;
print(number is int); // true
print(number is String); // false
print(number is! String); // true is! = is not
}
10. List / Set
- List : 중복 가능
- Set : 중복 불가능
void main() {
// List - 리스트
List<String> fruit = ['사과', '배', '귤', '수박'];
List<int> numbers = [1, 2, 3, 4, 5];
print(fruit); // [사과, 배, 귤, 수박]
print(numbers); // [1, 2, 3, 4, 5]
// index - 순서
print(fruit[2]); // '귤'
print(numbers[1]); // 2
// 리스트의 길이
print(fruit.length); // 4
print(numbers.length); // 5
// 리스트 속성 추가/제거
numbers.add(6); // + 6
fruit.remove('수박'); // - '수박'
print(fruit); // [사과, 배, 감귤]
print(numbers); // [1, 2, 3, 4, 5, 6]
// 리스트의 값이 인덱스의 몇번째 인지 리턴
print(fruit.indexOf('사과')); // 0
}
void main() {
// Set
// 중복 삭제 처리
final Set<String> names = {'John', 'David', 'Ann', 'Garry', 'John'};
print(names); // {John, David, Ann, Garry}
// 초기화 시 John이 두개 들어갔지만 print에서는 하나만 있음(중복 삭제)
print(names.contains('Ann')); // 값이 존재하는지 확인하는 멤버 함수(constains) - true
}
11. Map
void main() {
// Map
// Key / Value
Map<String, bool> avengers = {'캡틴 아메리카': true, '아이언맨': true, '헐크': true};
print(avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true}
avengers.addAll({'토르': true, '배트맨': false}); // avengers에 추가
print(
avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true, 배트맨: false}
avengers.remove('배트맨'); // avengers에서 삭제
print(avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true}
print(avengers['아이언맨']); // 키 값을 기반으로 value를 가져온다. true
avengers['블랙 위도우'] = true; // == avengers.addAll({'블랙 위도우': true})
print(
avengers); // {캡틴 아메리카: true, 아이언맨: true, 헐크: true, 토르: true, 블랙 위도우: true}
print(avengers.keys); // (캡틴 아메리카, 아이언맨, 헐크, 토르, 블랙 위도우)
print(avengers.values); // (true, true, true, true, true)
}
'앱 개발 > dart' 카테고리의 다른 글
| enum, 함수, posional/optional/named parameter, Operation (0) | 2023.03.13 |
|---|