Flutter

Flutter 기본 문법

Stater 2023. 10. 21. 07:08

다트 기본적인 문법을 설치 없이 웹에서 실행이 가능하도록  지원한다.

 

https://dartpad.dev/?

 

DartPad

 

dartpad.dev

 

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