차례 :
- 2.1 기본문법
- 2.1.1 Statement(문장)
- 2.1.2 변수
- 2.1.3 타입 추론 (var 사용)
- 2.1.4 상수 (final, const 사용)
- 2.1.5 타입 검사 (is, is! 키워드)
- 2.2. 함수
- 2.2.1 함수 형태
- 2.2.2 함수와 메서드
- 2.2.3 print 함수
- 2.2.4 익명함수
- 2.3. 객체 지향 프로그래밍
- 2.3.1 클래스
- 2.3.2 접근 지정자
- 2.3.3 생성자
- 2.3.4 게터(Getter), 세터(Setter) 메소드
- 2.3.5 상속
- 2.4 추상 클래스
- 2.5 믹스인
- 2.6 컬랙션
- 2.6.1 List
- 2.6.2 스프레드 연산자(...)
- 2.6.3 Map
- 2.6.4 Set
- 2.7 함수형 프로그래밍
- 2.7.1 일급 객체
- 2.7.2 for 문과 forEach() 함수
- 2.7.3 where
- 2.7.4 map
- 2.7.5 toList
- 2.7.6 toSet
- 2.7.7 any
- 2.7.8 reduce
- 2.8. 기타 유용한 기법들
- 2.8.1 계단식 표기법 ..연산자
- 2.8.2 null 처리에 관한 기능
2.1 기본문법
2.1.1 Statement(문장) :
print("Hello, World!");
- 문장 끝에 세미콜론(;)으로 표시함.
2.1.2 변수 :
변수는 데이터 값을 담는 상자입니다. 변수의 종류를 타입 또는 자료형이라고 합니다.
기본 타입 :
- String : 문자열
- int : 정수
- double : 실수(소수점 )
- bool : 참 또는 거짓 값을 갖는 타입
String name;
name = “이재홍"
bool a = true;
bool b = i < 10;
num a = 10;
num b = 20.0
int와 double은 num 타입에 포함된다.
2.1.3 타입 추론 (var 사용)
var i =10; // int 타입
var d = 10.0; // double 타입
var i =10; // int 타입
var d = 10.0; // double 타입
2.1.4 상수 (final, const 사용)
2.1.5 타입 검사 (is, is! 키워드)
- is : 같은 타입이면 true
- is! : 다른 타입이면 true
int a = 10;
if( a is int){
print(‘정수');
}
2.2. 함수
함수는 코드의 묶음 단위이다.
2.2.1 함수 형태 :
함수는 값을 반환할 때는 return 키워드를 사용합니다. 입력 받은 분자를 parameter (매개변수)라고 부르고 반환 되는 값을 return (반환) 값이라고 부릅니다.
double addNumber(double num1, double num2){
return num1 + num2;
}
void main() {
double result = addNumbers(2, 3.3);
print(result); // 5.3
}
함수명: addNumber
매개변수(parameters) : (double) num1, num2
함수에서도 변수와 마찬가지로 타입 추론 가능.
greeting(){
return "hello"; // String 타입으로 알아서 지정됨.
}
2.2.2 함수와 메서드
최상위 함수 : 클래스 밖에 작성하는 함수를 최상위 함수라고 한다.
메소드 : 클래스 내부에 작성하는 함수를 메서드라고 부른다.
static 키워드가 붙은 함수는 최상위 함수처럼 사용가능
자바와 비슷해서 생략....
2.2.3 print 함수
print() 함수는 반환값이 void다.
print('$_name은 ${_name.length} 글자 입니다.');
- 변수 앞에 $기호를 부여 문자열 내에 변수를 삽입할 수 있습니다.
- $ 기호 뒤에 {}를 사용하면 각종 표현식을 사용 가능합니다.
2.2.4 익명함수
(인수명) {동작 또는 반환값}
var function1 = (num){
return num+3;
};
2.3 객체 지향 프로그래밍
2. 3. 1 클래스
객체는 저장공간에 할당되어 값을 가지거나 식별자에 의해 참조되는 공간을 말한다.
이러한 객체를 메모리에 작석하는 것을 인스턴스화 한다. 인스턴스화하기 위해서는 설계도가 필요한데 설계도 역할을 하는 것이 클래스다.
겍체가 될수 있는 것들 :
- 변수
- 자료구조
- 함수
- 메서드
class Person {
String? name;
int? age;
Person(this.name, this.age);
Person.veryOld(this.name){
age = 60;
}
}
void main(){
var person1 = Person("Tom", 20);
var person2 = Person("Bob", 10);
person2.name = "Bob";
person2.age = 10;
}
2.3.2 접근 지정자
변수명 앞에 _기호를 붙이면 자바에서 private을 사용한것 처럼 외부에서 접근이 불가능하다. Getter Setter 메소드를 사용해서 접근해야한다.
2.3.3 생성자
자바와 마찬가지로 default 생성자가 제공된다. 새로운 생성자가 추가되면 기본 생성자는 사용 할수 없게 된다. 하지만 선택 매개 변수를 사용하면 기본 default 생성자도 아용할수 있다.
2.3.4 게터(Getter), 세터(Setter) 메소드
class Person {
String? name;
int? _age;
int? get age => _age;
set age(num value) => age = value;
}
2.3.5 상속
상속을 받는 서브 클래스(또는 자식클래스)가 슈퍼클래스(또는 부모클래스)의 기능을 그대로 가져다 쓰거나 추가하고 변경을 통해 중복된 코드를 줄일 수 있고, 유지 보수가 쉬우며, 통일성이 있고 다형성을 구현할 수 있는 등의 장점이 있다.
class Hero{
String name = '영웅';
void run(){
print("Hero-run");
}
}
class SuperHero extends Hero{
void run(){
super.run(); // 부모(Hero) run 실행
this.fly(); // fly() 실행
}
void fly(){
print("SuperHero-fly");
}
}
void main() {
var hero = SuperHero();
hero.run();
}
2.4 추상 클래스
추상 클래스는 추상 메서드를 반드시 하나 이상 포함하는 클래스입니다. 추상 메서드는 메서드 선언부만 있고 정의가 없는 메서드입니다.
abstract class Monster {
void attack();
}
abstract class Flyable {
void fly();
}
class Bat implements Monster, Flyable {
@override
void attack() {
print("공격");
}
@override
void fly(){
print("비행");
}
}
2.5 믹스인
with 키워드를 사용하면 상속하지 않고 다른 클래스의 기능을 가져오거나 오버라이드 할수 있다
class Bat implements Monster, Flyable {
@override
void attack() {
print("공격");
}
@override
void fly(){
print("비행");
}
}
class DartBat extends Bat with Monster {
}
2.6 컬랙션
다트는 List, Map, Set 등의 컬랙션을 제공합니다
- List : 같은 타입의 자료를 여러 개 담을 있고 특정 index로 접근할 수 있습니다.
- Map: 키와 값을 쌍으로 저장할 수 있고, 키를 통해 값을 얻을 수 있습니다.
- Set: 중복이 허용되지 않고, 찾는 값이 있는지 없는지 판단하고자 할 때 사용합니다.
2.6.1 List
List<String> items = ['다트', '자바', '파이썬'];
var items = ['다트', '자바', '파이썬'];
print(items[0]); //다트
dynamic
모든 타입을 대변하는 dynamic이라는 특수한 타입이 있습니다. 여러 타입을 한 리스트에 넣거나 일반 변수를 선언할 때도 사용할 수 있습니다. 이때도 명시적으로 List<dynamic>을 쓰는 대신 var를 사용할 수 있습니다.
var list = [1,2,3, ‘안녕'];
List<dynamic> list = [1,2,3, ‘안녕'];
2.6.2 스프레드 연산자(...)
…연산자는 컬렉션을 펼쳐주는 연산자로 스프레드(spread) 연산자라고 합니다.
var items =['다트', '자바', '파이썬'];
var items2 = [‘코틀린', …items, ‘루비']; // [코틀린, 다트, 자바, 파이썬, 루비]
2.6.3 Map
key - value를 사용한 빠른 자료구조 컬렉션입니다. 만약 요청한 키에 해당하는 값이 없다면 null을 반환합니다.
var cityMap = {
'한국' : '서울',
'미국' : '뉴욕',
'영국' : '런던'
};
print(cityMap['한국']); // 서울
print(cityMap['중국']); // null
2.6.4 Set
집합을 표현하는 자료구조 컬렉션입니다.
Set 메소드들
- add() : 추가
- remove() : 삭제
- contains() : 포함한지 안하는지 (bool 반환)
var numSet = {1,2,3,4,5,6};
numSet.add(7);
numSet.remove(1);
print(numSet); // {2, 3, 4, 5, 6, 7}
print(numSet.contains(3)); // true
print(numSet.contains(1)); // false
2.7 함수형 프로그래밍
다트는 객체 지향 프로그래밍과 함수형 프로그래밍의 특징을 모두 제공합니다.
함수형 프로그래밍(functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하는 프로그래밍 패러다임입니다. 다트의 컬렉션은 함수형 프로그래밍을 지원하는 다양한 함수를 제공합니다.
2.7.1 일급 객체
다트에서는 함수를 값으로 취급할 수 있습니다. 다른 변수에 함수를 대입할 수 있습니다.
void greeting(String text) {
print(text);
}
var fun = greeting;
fun('hi~'); // hi~
2.7.2 for 문과 forEach() 함수
final items = [1,2,3,4,5];
for(int i=0; i<items.length; i++){
print(items[i]);
}
items.forEach(print); // 1,2,3,4,5
items.forEach((e) {
print(e);
});
items.forEach((e) => print(e));
2.7.3 where
- 조건을 필터링할 때 사용하는 함수입니다.
final items = [1,2,3,4,5];
items.where((e) => e%2 == 0).forEach(print); //2,4
2.7.4 map
- map() 함수는 반복되는 값을 다른 형태로 변환하는 방법을 제공하는 함수입니다.
items.where((e) => e % 2 == 0).map((e) => '숫자 $e').forEach(print); // 숫자 2 숫자 4
2.7.5 toList
- 결과를 list로 저장
final result = items.where((e) => e % 2 == 0).toList();
print(result); // [2, 4]
2.7.6 toSet
- 결과를 set으로 저장
final items = [1,2,2,3,4,5];
final result = items.where((e) => e % 2 == 0).toSet();
print(result); // {2, 4}
2.7.7 any
- any() 함수는 리스트에 특정 조건을 충족하는 요소가 있는지 없는지 검사할때 사용. (있으면 true, 없으면 false)
print(items.any((e) => e % 2 == 0)); // true
2.7.8 reduce
- reduce() 함수는 반복 요소를 줄여가면서 결과를 만들 때 사용합니다.
- max나 min을 사용하기 위해서는 import dart:math 를 이용해야한다.
print(items.reduce((e,v) => max(e,v))); // 5
2.8. 기타 유용한 기법들
2.8.1 계단식 표기법 ..연산자
- add() 메소드는 void를 반환하고, remove() 메소드는 bool을 반환하지만 ..를 이용하면 메소드 객체를 참조해서 반환합니다.
final items = [1,2,3,4,5];
print(items.runtimeType); // JSArray<int>
print((items..add(2)).runtimeType); // JSArray<int>
print((items.remove(3)).runtimeType); // void
print((items..remove(3)).runtimeType); // JSArray<int>
2.8.2 null 처리에 관한 기능
- null 에러를 유발하기 쉽다.
String name = null; // 에러 발생 Error: The value 'null' can't be assigned to …….
String? name = null; // ok
print(name?.length);
'Flutter 학습 > 오준석의 플러터 생존코딩 학습 및 요약' 카테고리의 다른 글
5. 기본 위젯 -2 (0) | 2023.02.20 |
---|---|
4. 기본 위젯 - 1 (0) | 2023.02.20 |
3. 프로젝트 구조와 앱 구조 (0) | 2023.02.20 |
1. Flutter 란? (0) | 2023.02.20 |