Professional Documents
Culture Documents
가장 많이 사용되면서
가장 혼동되는 내용
다트의 타입 클래스
dartpad.dev
int? no = 10;
main() {
bool? data = no?.isEven;
no = null;
Object? obj = no;
print('$data, $no, $obj');
}
04-1 데이터 타입
문자열 표현하기
문자열 데이터를 다룰 때는 String 클래스
작은따옴표 ('hello') 나 큰따옴표 ("hello"), 또는 삼중 따옴표 ('''hello''', """hello""")
04-1 데이터 타입
문자열 표현하기
다음 코드의 결과 값은 ?
main() {
String str1 = 'hello1';
String str2 = 'hello'+'1';
print(str1==str2);
}
04-1 데이터 타입
형 변환하기
변수가 모두 객체이므로 형 변환 type casting 도 자동으로 이뤄지지 않습니다 .
04-2 상수 변수 – const, final
컴파일 타임 상수 변수 - const
컴파일 타임 상수 변수는 const 예약어로 선언
const 변수는 톱 레벨이나 함수 내에 지역 변수로 선언할 수 있지만 , 클래스에 선언할 때는 static 변수로만 선언
매우 중요 !
어렵지만 , Quick Fix 를 사용하면
쉽다 . 그러나 , 원리는 알아야 한다 .
오류의 원인은 ?
컴파일 타임에서는 final 값을 알 수
없다 .
04-3 var 와 dynamic 타입
타입 유추 - var
컴파일러가 해당 변수에 대입하는 값을 해석해 타입을 추측 초기값을 주면 타입이 고정된다 .
04-3 var 와 dynamic 타입
모든 타입 지원 - dynamic
변수에 타입 대신 dynamic 을 사용하면 모든 타입의 데이터를 대입
Type-less Language 의 특징
04-4 컬렉션 타입 – List, Set, Map
리스트 타입
List 는 데이터를 여러 개 저장하고 인덱스값으로 데이터를 이용하는 컬렉션 타입
리스트를 선언하면서 초기화할 때는 대괄호 ([]) 를 이용
Generic 이 무엇인가 ?
처음에 지정한 크기보다 많은 데이터를 저장할 수 있도록 허용하려면 filled() 생성자에 growable 매개변수를 true
로 지정
04-4 컬렉션 타입 – List, Set, Map
리스트 타입
자주 사용되기 때문에 매우 중요 !
어렵지만 , Quick Fix 를 사용하면
쉽다 . 그러나 , 원리는 알아야 한다 .
04-5 널 포인트 예외 관리하기
이런 것 없어도
널 허용과 널 불허 전혀 불편하지 않았는데
변수를 선언할 때 널 허용 (Nullable) 과 널 불허 (NonNull) 로 구분 매우 번거롭다 .
다트 언어에서 변수는 기본으로 널 불허로 선언
널 허용으로 선언하려면 타입 뒤에 물음표 ? 를 추가
04-5 널 포인트 예외 관리하기
널 불허 변수의 초기화
Stack 변수에서는
int a1; 이 가능
04-5 널 포인트 예외 관리하기
var 타입의 널 안전성
var 로 선언한 변수는 널 허용 여부도 대입하는 값에 따라 컴파일러가 자동으로 결정
따라서 , var? 은 오류 발생
OK
04-5 널 포인트 예외 관리하기
var 타입의 널 안전성
04-5 널 포인트 예외 관리하기
dynamic 타입의 널 안전성
의미가 없다고
지우라고 한다 .
04-5 널 포인트 예외 관리하기
널 안전성과 형 변환
자동형변환이 아니라
Superclass
Nullable 은 NonNull 의 상위 타입 Subclass 간의 관계
04-5 널 포인트 예외 관리하기
널 안전성과 형 변환
상속관계가
성립되는 경우에만 가능
다트에서 명시적 형 변환 연산자는 as
B1
D1 D2
B1 <-> D1
D1 <-> D2
수식 !
다음 문제를 해결하시오 .
간단 해석 :
data 가 null 인 경우에만 할당
04-6 널 안전성 연산자
값을 대입할 때 - ??= 연산자
널 허용 변수에 널이 아닌 값만 대입하고 싶다면 ??= 연산자를 사용