일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 유효성
- sendmail
- MYSQL
- 이메일주소
- sp_who
- 포트
- 목차만들기
- php
- 메일
- pingtest
- 리눅스
- 핑테스트
- MSSQL
- 정규표현식
- JavaScript
- 정규식
- vscode
- 문자열
- 핑
- erp
- ping
- python
- codeigniter
- js
- jquery
- 자바스크립트
- 트랜젝션
- port
- 더존ERP
- crontab
Archives
- Today
- Total
ioerror
Dart Day 01 본문
반응형
다트 공부 첫날 자료형 정리
void main() {
// 다트의 기본 자료형(Data Types)
print('Hello, World!');
print("Hello, World!");
print("한줄 주석은 // 슬래시 두번");
print("여러줄 주석은 /* */ 사용");
// 다트의 기본 자료형(Data Types)
// 1. Numbers
// - int: 정수형 (-2^63 ~ 2^63 - 1)
// * 메모리를 적게 사용하므로 정수 계산에 효율적
// * 오버플로우 주의 필요
// - double: 부동 소수점 숫자
// * 정밀한 소수점 계산 필요시 사용
// * 부동소수점 오차 발생 가능성 있음
int number = 42;
double pi = 3.14;
print('정수: $number, 실수: $pi');
// 2. Strings
// - 문자열 데이터를 저장하는 타입
// - 작은따옴표('') 또는 큰따옴표("") 사용 가능
// - 여러 줄 문자열은 ''' 또는 """ 사용
// - 문자열 보간($변수명, ${표현식})으로 동적 값 삽입 가능
// - 불변(immutable) 객체이므로 한번 생성된 문자열은 수정 불가
String name = '다트';
String message = "안녕하세요 $name!";
print(message);
// 3. Booleans
// - 조건문과 논리 연산에 사용
// - null safety 적용시 bool? 사용하여 null 허용 가능
// - 초기화하지 않으면 null 가능성 있으므로 주의
bool isTrue = true;
bool isFalse = false;
bool? isBoolNull;
print('불리언 값: $isTrue, $isFalse $isBoolNull');
// 4. Lists
// - 순서가 있는 컬렉션으로 동적 크기 조절 가능
// - 타입 지정 필수(제네릭 사용)
// - .add(), .remove() 등 다양한 메서드 제공
// - 인덱스 범위 초과시 예외 발생하므로 범위 체크 필요
List<int> numbers = [1, 2, 3, 4, 5];
print('리스트: $numbers');
print('첫번째 요소: ${numbers[0]}');
// 5. Maps
// - 키-값 쌍으로 데이터 저장
// - 키는 고유해야 하며 중복 불가
// - 키와 값의 타입을 명확히 지정하는 것이 좋음
// - 존재하지 않는 키 접근시 null 반환
Map<String, dynamic> person = {
'name': '홍길동',
'age': 20,
'isStudent': true
};
print('맵: $person');
print('이름: ${person['name']}');
// 6. Sets
// - 중복을 허용하지 않는 컬렉션
// - 순서가 중요하지 않을 때 사용
// - 데이터 존재 여부 확인에 효율적
// - .add()로 추가시 중복값은 무시됨
Set<String> fruits = {'사과', '바나나', '오렌지', '사과'};
print('세트: $fruits');
fruits.add('바나나');
fruits.add('수박');
print('추가된 세트: $fruits');
// 7. Runes
// - 유니코드 문자를 다룰 때 사용
// - 이모지 등 특수 문자 처리에 유용
// - UTF-16 인코딩 사용
// - 문자열 처리시 인코딩 주의 필요
Runes runes = Runes('안녕 👋');
print('룬스: ${String.fromCharCodes(runes)}');
// 8. Symbols
// - 컴파일 타임 상수로 사용
// - 리플렉션에서 메타데이터 접근시 활용
// - 문자열보다 비교 연산이 빠름
// - 디버깅이 어려울 수 있으므로 필요한 경우에만 사용
// MirrorSystem은 dart:mirrors 패키지의 일부로 리플렉션 기능을 제공
// 하지만 dart:mirrors는 웹과 Flutter에서는 지원되지 않아 일반적으로 사용을 피해야한다.
Symbol sym = #example;
print('심볼: ${sym.toString().substring(8, sym.toString().length - 1)}'); // "example" 출력
Symbol al = #alra;
print('심볼: ${al.toString().substring(8, al.toString().length - 1)}'); // "alra" 출력
// MirrorSystem 예시
// 주의: dart:mirrors는 웹과 Flutter에서 지원되지 않습니다
// 아래 코드는 명시적으로 dart:mirrors를 import 해야 실행 가능
/*
import 'dart:mirrors';
// 클래스 정의
class Person {
String name;
int age;
Person(this.name, this.age);
void introduce() {
print('안녕하세요, 저는 $name이고 $age살입니다.');
}
}
// MirrorSystem 사용 예시
void reflectionExample() {
Person person = Person('홍길동', 20);
// 인스턴스에 대한 미러 생성
InstanceMirror im = reflect(person);
// 클래스에 대한 미러 생성
ClassMirror cm = im.type;
// 클래스 이름 출력
print('클래스 이름: ${MirrorSystem.getName(cm.simpleName)}');
// 메서드 목록 출력
print('메서드 목록:');
cm.declarations.values.whereType<MethodMirror>().forEach((method) {
print(' - ${MirrorSystem.getName(method.simpleName)}');
});
// 필드 값 접근
print('필드 값:');
cm.declarations.values.whereType<VariableMirror>().forEach((variable) {
var name = MirrorSystem.getName(variable.simpleName);
var value = im.getField(variable.simpleName).reflectee;
print(' - $name: $value');
});
}
*/
// 9. dynamic
// - 모든 타입을 허용하는 동적 타입
// - 타입 안정성이 떨어지므로 가능한 구체적 타입 사용 권장
// - 런타임 에러 발생 가능성 높음
// - 성능상 불이익이 있을 수 있음
dynamic dynamicVar = 100;
print('동적 변수(숫자): $dynamicVar');
dynamicVar = "문자열로 변경";
print('동적 변수(문자열): $dynamicVar');
}
반응형
'Flutter & Dart' 카테고리의 다른 글
Dart Day 04 (0) | 2025.02.25 |
---|---|
Dart Day 03 (0) | 2025.02.24 |
Dart Day 02 (0) | 2025.02.23 |
Comments