This Week's Record

[Flutter] Dart 문법 요약 본문

Flutter/기초&문법

[Flutter] Dart 문법 요약

Eju 2022. 8. 27. 23:38

<목차>

I 변수

II 자료형

III 흐름 제어문

IV 함수

V 클래스

 

 

들어가기 전

main(){} : main은 Dart에서 처음 시작 시 호출하는 약속된 함수
// : 주석
print() : print의 소괄호 안쪽에 값을 넣으면 console에 값이 출력
; : Dart에서는 마지막에 세미콜론을 찍어줌

I 변수

변수 만들기

변수는 어떤 값을 담는 상자라고 생각하면 된다.

 

1. 자료형(상자가 담을 수 있는 재료의 종류)

  • var : 처음 담긴 값으로 타입지정
  • String : 문자만
  • String? : 문자 또는 null상태
  • final String : 문자를 한 번 담은 뒤 재할당 불가

2. 변수명(상자의 이름)

  • Dart의 변수명 만드는 규칙
    1. 영문, _, $, 숫자 만 사용!
    2. 숫자로 시작불가
    3. 카멜케이스(camelCase)사용

3. 변수에 담으려는 값(상자에 담기는 것)

변수 학습


II 자료형

자료형 설명 예시
String ''와 ""로 이루어진 문자열 "안녕", '집'
int
double
int = 정수
double = 실수
1, -1
1.5, -1.5
bool 참 거짓을 나타내는 자료형
비교 연산시 bool을 반환
true
false
List<T> 데이터를 가진 여러가지 배열 [1, 2, 3]
Map<K, V> 마치 사전처럼 {key : value}의 형태
key와 value에 모든 자료형이 올 수 있음
{
'name':'철수',
'age':20
}
dynamic 모든 자료형을 담을 수 있음  dynamic name = "hi";
name = 1;

예제들

String / '$'를 앞에 붙이면 변수명을 가르키는게 된다!!
int / double / 연산
bool
List - 선언, 추가, 조회, 수정, 삭제, dynamic
Map - 선언, 조회, 추가, 수정, 삭제

Map<key값이 어떤 자료형을 받을지, value값이 어떤 자료형을 받을지>

dynamic / dynamic은 모든 자료형을 품을 수 있다!


III 흐름 제어문

조건문

1. if문

: 조건에 따라 실행하고 싶은 코드를 분기할 때 사용한다.

if (bool1) {
	// bool1이 true면 실행
} else {
	// bool1이 false면 실행
}

조건문은 else if 형태로 계속 꼬리를 물 수 있다. 앞에서 부터 하나씩 비교해서 진행하면서 하나라도 true가 되어 실행되면, 뒤에 있는 조건문은 실행되지 않는다.

if문

 

2. AND 와 OR 연산자

AND = &&  : 두 값이 모두 참일때 true 반환

OR =  ||  : 두 값중에 하나라도 참이라면 true 반환

{"originWidth":1228,"originHeight":590,"style":"alignCenter","caption":"&&(AND) 와

 

반복문

1. 반복문

: 반복문은 특정한 코드를 반복해서 흐름을 제어하는 방법. (=for문)

 

2. 반복문 구성

  1. int i = 0 : i라는 변수가 0으로 시작합니다. (한 번만 실행됩니다) 
  2. i < 5 : i 의 값이 5보다 작은지 조건 확인 -> true일때는 계속진행, false일때 반복문 종료
  3. print('hello ${i+1}') : 반복해 실행하는 코드영역
  4. i++ : 코드가 1번 반복될 때마다, 1만큼 1값을 증가시키고 다음흐름으로 넘어감

위의 함수를 실행하면 이와 같다.

3. 배열과 반복문

반복문은 배역의 원소를 꺼내는 index에 적용하면 배열의 모든 원소를 쉽게 꺼낼 수 있음

배열+반복문은 이렇게!

 

IV 함수(function)

함수는 여러 코드를 묶어둔 상자

1. 함수의 호출 & 실행 순서

실행 순서 이렇다!

  • say : 함수의 이름
    • 카멜케이스 규칙(:getName 이런식으로 문자사이 첫글자 대문자쓰는 규칙)
    • getAge, say, print 와 같이 일반적으로 동사로 시작!
  • 중괄호 안{} : 함수가 가진 실행코드
  • 함수 호출 방법 : say()

 

2. 함수의 입력

2-1. 함수에 값 입력받기

void say(String a){}

 

2-2. 함수에 입력 값 여러개 받기

void say(String a, String b){}

2-3. 함수에 입력 값을 이름과 함께 전달하는 방법

함수를 호출하는 과정에서 from에 "영희"를 넣을래! 도 가능-

1. 중괄호로 묶어야함&nbsp; 2.변수를 안 받아도 되기 때문에(null이어도 되기 때문에) 반드시 String?이어야함

2-4. 이름지정 매개변수의 값을 필수로 전달하도록 만드는 방법

2-3처럼 null이 있는거 불허용! -> required 키워드!)

2-5. 이름지정 매개변수도 값을 여러개 전달할 수 있음

이름을 지정하지 않으면 매개변수의 순서가 매우~ 중요하지만, 이름 지정하면 순서 중요하지 않음

3. 함수의 출력

return : 출력한다~ -> 반환하는 값 앞에 붙여준다.
위 아래 함수 값음

 

4. 입출력 예제

 


V 클래스(Class)

클래스는 변수와 함수를 모아둔 틀

1. 클래스 생김새

class 클래스이름 {

}

클래스 이름 : 파스칼케이스(PascalCase)를 따름 (카멜케이스에서 첫 문자도 대문자로!)

ThisIsClass

 

2. 클래스의 구성 요소

  • 속성(Property) : 클래스 내의 변수
  • 메소드(Method) : 클래스 내의 함수
  • 생성자(Constructor) : 클래스 명과 동일한 함수
  • 즉, 변수함수로 이루어져 있음!
  • 클래스는 미리 코드들, 속성들을 미리 묶어두고 쉽게쉽게 복제하고 쓸 수 있게 하는 것. (개인적으로 약간 템플릿 느낌!)

2-1. 속성(Property) : 클래스 내의 변수를 속성이라 부릅니다.

class Bread {

	// Bread 클래스가 가진 content 속성
	String content = "팥";
	
}

-> 왜 속성일까요? : 

 

2-2. 메소드(Method) : 클래스 내의 함수를 메소드라 부릅니다.

class Bread {

	String content = "팥";

	// Bread 클래스가 가진 getDescription 메소드
	String getDescription() {
    return "맛있는 $content빵입니다."; // 맛있는 팥빵입니다.
  }
}

 

2-3. 생성자(Constructor) : 클래스명과 동일한 함수를 생성자(constructor)라 부릅니다.

class Bread {

	// 생성자
	Bread() {
	}

}

//------------------------ 중괄호 생략가능(아래) ------------------------

class Bread {

	// 생성자
	Bread();

}

//----------------- 생성자 함수에 입력값을 전달 받아 속성에 넣을 수 있음 -----------------

class Bread {
	String? content;

	// 생성자 호출시 core를 전달 받습니다.
	Bread(String core) {
		content = core; // 전달 받은 core를 content에 넣어줍니다.
	}
}

 

 

3. 인스턴스(Istance)

/// Copyright 2022. ⓒ DevStory.co.kr All rights reserved.

void main() {
  // 인스턴스(instance) 만들기
  Bread bread1 = Bread('팥'); // 클래스의 생성자를 호출하여 인스턴스(instance)를 만듭니다.
  Bread bread2 = Bread('크림');
  
  // 속성 호출
  print(bread1.content); // 팥
  print(bread2.content); // 크림
  
  // 메소드 호출
  print(bread1.getDescription()); // 맛있는 팥빵입니다.
  print(bread2.getDescription()); // 맛있는 크림빵입니다.
}

class Bread {
  String? content; // 클래스 속 변수를 속성(property)라고 부릅니다.
  
  Bread(String core) { // 클래스명과 동일한 이 함수를 생성자(constructor)라고 부릅니다.
    content = core;
  }
  
  String getDescription() { // 클래스 속 함수를 메소드(method)라고 부릅니다.
    return "맛있는 $content빵입니다.";
  }
}

Bread라는 클래스가 있음 - 이 클래스는 content라는 속성이 있음

(이 속성은 언제 정해지냐? : 생성자가 호출될 때 정해짐,) -> content

(생성자는? 이 클래스를 통해서 인스턴스를 만들어낼때 호출되는 함수) -> 위의 함수에서는 Bread(String core)

 

 

4. 상속(extends)

/// Copyright 2022. ⓒ DevStory.co.kr All rights reserved.

void main() {
  Bread bread = Bread();
  Cookie cookie = Cookie();
  
  print(bread.madeBy); // TousLesJours
  print(cookie.madeBy); // TousLesJours
}

// 빵 : TousLesJours를 상속받음(=변수와 함수를 그대로 전달받음)
class Bread extends TousLesJours {
 
}

// 쿠키 : TousLesJours를 상속받음(=변수와 함수를 그대로 전달받음)
class Cookie extends TousLesJours {
  
}

// 뚜레쥬르
class TousLesJours {
  String madeBy = "TousLesJours";
}
  • class 클래스A extends 클래스B : 클래스B의 변수와 함수를 클래스A에서 그대로 사용 가능 (=클래스A 가 클래스B를 상속함)
    • 변수와 함수를 물려받은 클래스A : 자식(child)
    • 기능을 물려준 클래스B : 부모(super)
  • extends <클래스>  -> "아 저 클래스가 가진 변수와 함수를 물려받아 그대로 쓸 수 있구나!"

 

5. Dart의 모든 것은 Class

자료형도 모두 Class로 구성되어있다!

공식문서에 Constructor(생성자) / Properties(속성) / Methods(메소드)가 뭘 의미하는지 이제는 알 수 있을거다~

-> https://dart.dev/guides/language/language-tour

'Flutter > 기초&문법' 카테고리의 다른 글

Dart 기초  (0) 2023.07.07