다트 기본적인 문법을 설치 없이 웹에서 실행이 가능하도록 지원한다.
dynamic 사용 - 사용권장은 하지 않는 부분이지만 유용성을 위해서 알아두면 좋다정도이다.
oid main(){
//print 함수
print('hello World');
//변수 자료형이 동일하지 않아도 사용이가능하다.
//하지만 사용을 권장하지 않는다.
//자료형이 추론해서 사용하기때문이다.
dynamic car = 'benz';
car = 10;
print(car);
}
Null Safety 사용부분
- 사용이유 : null을 허용해줌
null에게서 안전한 프로그램 코드를 작성하는 것을 의미한다.
null safety를 사용하면 컴파일러에서 코드를 실행하기 전에 버그를 찾아 내 수정할 수 있다.
-개발자 실수 방지용
-코드 안정성강화
String name = 'PS';//not null
String? name2 = null; // null(값이비어진다.)
print(name2);
//널 합류 연산자(??)
String? name3 = null;
String result = name3 ?? 'PS';
late 사용
- 사용이유 : 내가 원하는 시점에 값을 할 당 할 수 있다는 장점이 있다.
//late 키워드 사용방법
// 내가 원하는 시점에 값을 할당할 수 있다는 장점이 있다.
late String name; //null 상태 초기화 되지 않은 상태
void main {
name='test'; //늦은 초기화
}
상수에 대한 내용
- final 과 const의 사용과 개념 차이 알아두기- 컴파일과 런타임의 차이에 관한 내용 알아두기
- 컴파일 소스파일이 빌드 될때
- 런타임은 프로그램이 실행될때
- 런타임 시점보다 빠른 시점이 컴파일시점
//상수 항상 같은수
void main() {
// final 키워드 - 최초에 값이 한번 할당되면 다시 할당 될수 없다.
final int testVal = 30;
//testVal = 30; //여기서 에러발생 상수 여서
//const키워드
//값을 선언과 동시에 할당해야한다.
//해당 값은 컴파일 시점에서 결정되어야한다.
}
기본연산자 및 표현식
void main() {
//산술연산자
int a = 10;
int b = 3;
//덧셈
int sum = a+b;
print(sum);
//뺄셈
int minus = a-b;
print(minus);
int product = a*b;
print(product);
double divided = a/b;
print(divided);
//몫
int mok = a ~/ b;
print(mok);
//비교연산자
bool isResult = a>b;
print(isResult);
//논리연산자
bool result1 = ( true || false); //논리합 (OR)
print(result1);
bool result2 = ( true && false); //논리곱 (and)
print(result2);
bool resul3 = !result2; //논리부정(NOT)
print(resul3);
//3. 할당연산자
int s = 10;
a += 30;
print(a);
a -= 10;
//4. 조건 연산자
int age = 30;
String ageStatus = age >= 18 ? "성인":"미성년자";
}
리스트와 Map의 사용법
//List - 순서가 있는 데이터 컬렉션, 인덱션(index)
//라는 개념을 활용해서 데이터요소에 접근할 수 있음
//리스트는 객체를 사용해서 하면 유용한점이 있고
//맵 같은 경우에는 키와 밸류가 쌍으로 있는 경우에 유용한점으로사용
//빈 리스트 생성
List<int> numbers = [];//인트형태의 데이터들만 넣는다.
// 데이터가 들어 있는 리스트
List<int> numbers2 = [
1,
2,
3,
4,
5
];
//Map - 키(Key)와 값(value)의 한 쌍으로 데이터를 저장하느 컬렉션,
//각 키는 고유하며 , 키를 따라 생성
Map<String,int> scoreMap = {}; //빈 맵 생성
//데이터가 삽입된 map생성
Map<String,int> scoreMap2 = {
'홍길동':100,
'장발산':90,
'이홍철':80,
'이홍철2':70,
}; //빈 맵 생성
void main() {
print(numbers2[1]);
// 리스트에 요소 (데이터) 추가
numbers.add(6);
print(numbers[0]);
//for문 (반복문)을 활용해서 list의 데이터들을 모두 가져오기
for(int i = 0; i<numbers2.length;i++){
print('$i ${numbers2[i]}');
}
//리스트에 요소 제거
numbers.removeAt(0); //특정 index에 접근해서 데이터 제가
//리스트에 요소 수정
numbers.add(7);
numbers[0] = 8;
print(numbers[0]);
// Map 요소에 접근
print(scoreMap2['이홍철']);
// Map에 값을 추가하거나 갱신
scoreMap['고길동'] = 88;
print(scoreMap['고길동']);
// Map의 배열 순회하여 값들 가지고오기
scoreMap2.forEach((key,value){
print('$key의 점수는 $value 입니다.');
});
}
함수와 메서드
//함수와 메소드
//함수 (Function) - 코드의 논리를 분리하고 재 사용성을 높이는데 사용합니다.
// 함수 이름, 매개 변수 (parameter) 반환 유형 (reuturn type) 으로 구성
// 재사용성이 증가
// void 리턴타입일 경우 아무런 값을 반환하지 않고 오로지 실행한다.
void main(){
// 프로그램의 출발지점인 main 함수
print(add(3,4)); // 함수 호출
setStart();
}
// 두 정수 값을 매개변수를 전달받은 것을 더한다음에 반환(return) 하는 함수
// 반환값 int
int add(int a, int b){
return a+b;
}
void setStart(){
print('시작합니다.');
}
// 메소드 (Method) - 클래스 내부에서 정의된 함수 - 설계도
// 함수와 다르게 하나의 집합체로서 체계적으로 사용이가능
class UserInf{
String? name;
int? age;
String? hobby;
void setStart(){
print('시작합니다.');
}
}
NamedParameter vs Positional Parameter의 사용방법
// positinal parameter VS named Parameter
//함수선언
//positinalparameter
void setStart(String name, int age){
print('Called set started, $name , $age');
}
// named Parameter
// {} 중괄호 사용 / 디폴트값 지정 필수
void setStart2({String name='홍길동', int age= 24}){
}
//named parameter with required
void setStart3({required String name}){
print('called set start, $name');
}
void main() {
setStart('테스트',30); //함수호출
setStart2(age:50);
setStart3(name:'홍길동');
}
클래스와 상속
//클래스 (class) - 객체를 생성하기 위하 템플릿 또는 청사진(blueprint)설계도
class Person{
//상태 - 멤버변수
String name; //이름
int age; // 나이
//생성자 (Constructor) - 함수
Person(this.name,this.age);
//행동 - 메서드(함수)
void saveHello(){
print('안녕하세요 저는 $name이고,$age살 입니다.');
}
}
void main() {
// 클래스 인스턴스 생성
Person personHong1 = Person('홍길동',30);
Person personHong2 = Person('이홍석',30);
Person personHong3 = Person('박미미',30);
personHong1.saveHello(); //함수 내의 메서드 호출
}
-상속
//클래스 (class) - 객체를 생성하기 위하 템플릿 또는 청사진(blueprint)설계도
class Person{
//상태 - 멤버변수
String name; //이름
int age; // 나이
//생성자 (Constructor) - 함수
Person(this.name,this.age);
//행동 - 메서드(함수)
void saveHello(){
print('안녕하세요 저는 $name이고,$age살 입니다.');
}
}
//상속 - 기존 클래스의 특성을 다른 클래스에서 재사용하고 확장하는 매커니즘
// 부모클래스(super class) 와 자식 클래스 (sub class) 간에 상속 관계까 형성
//상속 extends
class Man extends Person {
Man(String name,int age):super(name,age);
@override
void sayHello(){
super.saveHello(); //부모 클래스의 정의 되어 있는 함수 호출
print('\n 제 설별은 남자입니다.');
}
}
void main() {
// 클래스 인스턴스 생성
Person personHong1 = Person('홍길동',30);
Person personHong2 = Person('이홍석',30);
Person personHong3 = Person('박미미',30);
personHong1.saveHello(); //함수 내의 메서드 호출
var man = Man('홍길동',100);
man.saveHello();
}
생성자와 선택적매개변수 관련 문법
//생성자 (constructor) - 클래스의 인스턴스를 초기화하는 특별한메서드,
// 클래스를 생성할 때 가장 먼저 호출되는자
class Person{
//기본 생성자 (default Constructor)
// 클래스에서 별도의 생성자를 정의하지 않는다면 기본 생성자가 사용됨!. 생략도가능!
Person(); //있어도되고 없어도됨 기본생성자
}
class Person2 {
String name;
int age;
Person2(this.name,this.age);
}
class Person3{
String name;
int age;
Person3({this.name='홍길동',this.age= 20});
}
class Person4{
String name;
int age;
Person4({required this.name,required this.age});
}
void main(){
var person = Person(); //클래스 인스턴스 생성(메모리에 올림)
var person2 = Person2('홍길동',30);
var person3 = Person3(name:'홍동');//named Parameter
}
ENUM 타입 문법
// enum types
//enum (열거형) - 타입 정의 보통 많이 사용! 상수들의 그룹을 정의 할수 있음
// 왜 필요한지? -> 협업하는 개발자들 간에 코드를 더읽기 쉽고 이해가 위해서 사용
enum Color{
red,
green,
blue,
yellow,
}
void main(){
//enum 값을 변수에 할당
Color myColor = Color.blue;
//조건문으로 enum 값을비교
if(myColor == Color.red){
print('빨간색');
}else if(myColor == Color.green){
print('초록색');
}else if(myColor == Color.blue){
print('파란색');
}else if(myColor == Color.yellow){
print('노란색');
}
print(Color.red.index);
for (int i =0; i<Color.values.length;i++){
print(Color.values[i]);
}
}
반응형
'Flutter' 카테고리의 다른 글
[Flutter]Container, SizedBox 위젯 사용법 (0) | 2023.12.09 |
---|---|
[Flutter] Column, Row, Expanded 위젯 (0) | 2023.12.09 |
[Flutter] 위젯 및 Route 및 단축키 (2) | 2023.11.25 |
[Flutter] 웹뷰 관련 (0) | 2023.06.17 |
[Flutter] 기본위젯 (0) | 2023.05.06 |