데이터란?
데이터는 정보를 나타내는 단순한 값 또는 사실의 집합입니다. 컴퓨터 과학에서 데이터는 컴퓨터가 처리할 수 있는 형식으로 표현된 정보를 말합니다
변수 vs 상수
변수란 data를 보관할 수 있는 메모리 저장 공간이며 변하는 값(단순한 수치)이기도 합니다.
상수란 data를 보관할 수 있는 메모리 저장 공간이며 한번 초기화되면 변경할 수 없는 값(단순한 수치)이기도 합니다.
자료 구조
Object
|
|__ String
|
|__ num
| |
| |__ int
| |
| |__ double
|
|__ bool
|
|__ List
|
|__ Map
|
|__ Set
|
|__ Runes
| …
Data Type
|
Keyword
|
설명
|
숫자
|
int, double, num
|
숫자 값을 나타냅니다.
|
문자열
|
String
|
일련의 문자를 나타냅니다.
|
논리형
|
bool
|
부울 값 true 및 false를 나타냅니다.
|
자료형
|
List
|
정렬된 항목 그룹입니다.
|
자료형
|
Map
|
값 집합을 키-값 쌍으로 나타냅니다.
|
자료형
|
Set
|
동일한 유형의 고유한 값의 정렬되지 않은 목록입니다.
|
Runes
|
runes
|
문자열의 유니코드 값을 나타냅니다.
|
Null
|
null
|
null 값을 나타냅니다.
|
…
|
…
|
…
|
0. 데이터 타입 추론 - runtimeType()
runtimeType 을 활용하여 변수에 데이터 타입을 확인할 수 있다.
var n = 1;
print(n.runtimeType)
1. 기본 데이터 타입
int , double , bool , String 데이터 타입이 있다.
int n1 = 1;
double d1 = 10.1;
bool b1 = true;
String s1 = '홍길동';
2. var 와 dynamic
flutter 에서는 var 와 dynamic 을 사용할 수 있는데
var는 한번 정의된 타입은 바꿀수 없지만, dynamic 타입은 다른 어떠한 타입으로도 변경이 가능하다.
3. 산술 연산자
// 산술 연산자
// 더하기
print(" 3 + 2 = ${3 + 2}");
// 빼기
print(" 3 - 2 = ${3 - 2}");
// 곱하기
print(" 3 * 2 = ${3 * 2}");
// 나누기
print(" 3 / 2 = ${3 / 2}");
// 나머지
print(" 3 % 2 = ${3 % 2}");
// 몫 구하기
print(" 3 ~/ 2 = ${3 ~/ 2}");
4. 비교연산자
// ==
print("2 == 3 -> ${2 == 3}");
// !=
print("${2 != 3}");
// > , < , <= , >=
print("${2 < 3}");
5. 논리연산자
// 논리 연산자 (부정 , 그리고 , 또는)
// 부정
print(!true);
// 그리고
print(true && false);
// 또는
print(true || false);
빠른 평가
만약 true || false 라면 앞의 의미가 true 이기 때문에 뒤의 false는 연산할 필요가 없어진다.
밑의 예제는 앞의 (n1 = 100) > 50 이 true 이기때문에 뒤의 연산은 사용되지 않는다.
var n1 = 0;
var n2 = 10;
print((n1 = 100) > 50 || (n2 = 200) < 100);
print("현재 시점에 n1에 값은 ${n1}");
print("현재 시점에 n2에 값은 ${n2}");
// 콘솔창
현재 시점에 n1에 값은 100
현재 시점에 n2에 값은 10
6. 제어문
- if ~ else if문
- 삼항연산자
- switch문
- 등등
7. NULL Safety
1. dart Null Safety 이란 뭘까?
널 세이프티(Null Safety)는 개발자가 널 에러를 피할 수 있도록 도와주는 다트 프로그래밍 언어의 기능입니다. 이 기능은 사운드 널 세이프티 인 다트(Sound Null Safety in dart)라고 불리며, 이를 통해 개발자는 코드 작성 시점에 널 에러를 잡을 수 있습니다.
Sound Null Safety in dart 이란 (Sound Type System)
런타임 중에 null 포인터 예외를 방지하기 위해 Dart 컴파일러가 코드를 분석하고 컴파일할 때 타입 시스템에서 엄격한 규칙을 적용하는 것을 의미합니다.
Dart Null Safety의 개념
- Null Safety는 변수에 null 값을 할당하는 것을 엄격하게 제한합니다.
- 변수를 null 또는 non-null로 선언할 수 있습니다.
- Non-null 변수는 null을 가질 수 없으며, null 변수는 null만을 가질 수 있습니다.
- Null Safety는 Dart 2.12 버전부터 기본으로 활성화되었습니다.
2. Null check 연산자와 Null 대체 연산자
null check 연산자
Dart 언어에서 null 체크 연산자 (?)는 null 값일 수 있는 객체의 속성이나 메서드에 안전하게 접근하는 데 사용됩니다. 이 연산자는 null 참조 오류를 방지하고 코드를 더 견고하게 만듭니다. Dart에서 null 체크 연산자의 주요 두 가지 사용법이 있습니다 (속성과 메서드)
null 병합(대체) 연산자
Dart 언어에서 null 병합 연산자 (??)는 null 값 처리에 유용한 연산자입니다. 이 연산자를 사용하면 변수나 표현식의 값이 null인 경우에 대체 값을 지정할 수 있습니다. null 병합 연산자를 사용하여 코드를 더 간결하고 안전하게 작성할 수 있습니다.
dart에서는 기본적으로 null 값을 허용하지 않습니다.
null 값을 사용하고자 한다면 nullable을 사용하여야 합니다.
따라서 데이터타입? 또는 ?? 로 대체로 nullable을 사용할 수 있습니다.
// null 대체 연산자 - 널 세이프티 기능 제공
// String? <-- null 값이 들어 올 수 있다.
String name = "Jhon"; // 이 변수는 null 이 아닌 문자열만 가질 수 있다.
int age = 30; // null 이 아닌 정수값만 가질 수 있다.
String? nullableName; // 이 변수는 문자열 또는 null을 가질 수 있다.
int? nullableAge; // 이 변수는 null 또는 정수값을 가질 수 있다.
// dart에서는 기본적으로 null 값을 허용하지 않는다
// null 값을 사용하고자 한다면 nullable을 사용하여야 합니다.
print(username ?? "홍길동");
이런식으로도 사용이 가능합니다.
void main() {
// 1. null 속성 접근 방법 ? , ??
String? maybeName = "가나다라마바사";
// null 아니면 문자열 길이를 반환 , null --> 0을 반환
int resultLength = maybeName?.length ?? 0;
print(resultLength);
// 2. null 에 안전한 객체 메서드 접근
String? name = getName(); // null 또는 문자열을 담을 수 있다.
String? returnName = name?.toLowerCase() ?? "홍길동";
}
// 전역함수
String? getName() {
return null;
}
8. dart 함수와 메서드
함수란
특정 작업을 수행하는 코드 블록입니다. 반복적인 작업을 함수로 정의해서 사용 가능하며 코드의 재사용성 및 가독성을 높여 줍니다.
returntype functionName(parameter1,parameter2, ...){
// function body
}
리턴타입 함수이름(매개변수1, 매개변수) {
// 수행 할 코드를 작성
}
함수 (Function):
- 함수는 어떤 작업을 수행하는 코드 블록을 말합니다.
- Dart에서 함수는 Function 타입의 객체입니다.(일급객체지원)
- Dart에서는 main() 함수처럼 별도의 클래스에 속하지 않은 독립적인 함수를 생성할 수 있습니다.
메서드 (Method):
- 메서드는 객체(Object)의 특정한 동작을 나타내는 함수입니다.
- Dart에서 클래스 내에 선언된 함수를 메서드라고 부릅니다.
- 클래스 내에서 정의되며, 해당 클래스의 인스턴스에서 호출됩니다.
일반적으로 함수는 클래스와 관련 없는 독립적인 작업을 위해 사용되고, 메서드는 클래스에 속한 동작을 정의하는 데 사용됩니다. 그러나 Dart에서 함수와 메서드는 기본적으로 비슷한 구조를 가지며, 객체 지향적인 프로그래밍에서는 메서드라는 용어가 더 많이 사용됩니다.
8. 접근제어자
두가지 밖에 없다 ㅎ..
- public
- private
9. 익명함수
일반적으로 밑과 같이 쓰이나 데이터타입을 명시적으로 지정할 수도 있습니다.
javascript 의 익명 함수와 같습니다.
데이터타입 변수 = function (매개변수){
// 수행 구문
};
// function 은 생략 가능
호출은 () 를 사용한다.
변수(파라미터값 , ....)
밑은 예제문입니다.
void main() {
// 1단계 - 이름이 없는 함수를 이야기한다. (선언을 하더라도 다시 호출할 방법이 없음)
(int number) {
return 100 + number;
}; // 익명함수 마지막에 세미콜론
// 변수에 할당하지 않고 바로 익명함수를 호출하는 것은 dart 에서는 불가능
// 2단계 - 함수를 변수를 담을 수 있다(dart 는 일급 객체를 지원)
int Function(int) square = (int number) {
return number + number;
};
print("square : ${square.runtimeType}");
// 2 - 1 단계 : 명시적 타입과 (Funtion) 리턴 타입이 생략 , 파라미터 타입도 생략 가능
Function sub = (a, b) {
return a - b;
};
// 3단계 - var 키워드에 사용(타입 추론 : 자동으로 타입을 할당)
var cube = (int number) {
return number * number * number;
};
// 4단계 - 익명 함수 파라미터 생략 가능
var add = (number) {
return number + 10;
};
// 5단계
var multiply = (a, b) {
return a * b;
};
// 메서드의 호출은 괄호 이다.
print("2의 제곱은 ${square(2)} ");
}
10. 함수(화살표 함수)
화살표 함수에 대한 개념을 이해하자.
Dart에서의 화살표 함수(arrow function)는 함수를 간결하게 정의하고 사용할 수 있는 특별한 문법입니다. 다른 프로그래밍 언어에서는 람다 함수 또는 람다 표현식이라 부릅니다. 화살표 함수는 Dart 2.7 버전부터 지원되기 시작했습니다. 기존 함수 정의와 비교하면, 화살표 함수는 간단한 함수를 더 간결하게 표현할 수 있는 표현식입니다. 여기서 중요한 부분은 “화살표 함수는 == 표현식이다”라는 말에 집중해 봅시다.
returnType functionName(parameters...) => expression;
예제문
// 화살표 함수
int add (int n1 , int n2) => n1 + n2;
int sub(int n1 , int n2) => n1 - n2;
int mul(int n1 , int n2) => n1 * n2;
double div(int n1 , int n2) => n1 / n2;
/// 1. 기존 함수 정의
int add1(int n1, int n2) {
return n1 + n2;
}
int sub1(int n1, int n2) {
return n1 - n2;
}
int mul1(int n1, int n2) {
return n1 * n2;
}
double div1(int n1, int n2) {
return n1 / n2;
}
화살표 함수와 한계
화살표 함수는 단일 표현식인 경우에만 사용할 수 있습니다.
즉 더욱 복잡한 함수를 정의할 때는 기존의 Function 키워드를 사용하는 것이 적절할 수 있습니다. 화살표 함수는 주로 간단한 연산을 수행하는 경우나 콜백 함수로 사용될 때 유용하며, 코드의 가독성과 간결성을 높일 때 사용할 수 있도록 합시다.
// 불가능한 함수
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) => a * b;
11. List
dart 에서 List는 Iterable을 구현하고 있다 따라서 List는 반복 가능한 객체이다 라고 말할 수 있습니다.
예제문
void main() {
List<String> footballPlayers = ['메시', '손흥민', '김민재', '조규성'];
// 1단계. 자료구조와 익명함수
// 2단계 dart List는 Iterable 을 구현하고 있다.
// 리스트는 반복 가능한 객체 이다라고 말할 수 있다.
footballPlayers.forEach((e) {
print("축구선수 : ${e}");
});
footballPlayers.forEach((e) => print("축구선수 : ${e}"));
// 문제 forEach 문을 활용해서 list 안의 요소들에 덧셈값을 연산하고 출력하시오.
List<int> numbers = [10, 20, 30, 40, 50];
int sum1 = 0; // 익명 함수 사용
int sum2 = 0; // 화살표 함수 사용
// 1. 익명 함수 사용
numbers.forEach((e) {
sum2 += e;
});
// 2. 람다 표현식 사용
numbers.forEach((e) => sum2 += e);
}
12. dart는 OOP ( object-oriented programming) 객체 지향 프로그래밍 이다.
Example
import 'package:flutter/material.dart';
// 코드의 시작점
void main() {
// Dog d1 = new Dog(); (객체 생성 메모리에 로드 - new 생략 가능)
Dog d1 = Dog();
print('이름 : ${d1.name}');
print('나이 : ${d1.age}');
print('색깔 : ${d1.color}');
print('목마름 : ${d1.thirsty}');
} // end of main
class Dog {
String name = "Toto";
int age = 13;
String color = "white";
int thirsty = 100;
}
12. 클래스 - 단일 라인 생성자
void main() {
// Dog d1 = new Dog(); (객체 생성 메모리에 로드 - new 생략 가능)
Dog d1 = Dog('toto', 10, 'white', 100); // 메모리에 로드 객체 생성
} // end of main
class Dog {
String? name;
int? age;
String? color;
int? thirsty;
// 단일 라인 생성자 - 축약버전
Dog(this.name, this.age, this.color, this.thirsty) {
// 코드 수행 가능
}
}
12 - 2. 클래스 - 생성자 파라미터 선택적 매개 변수
Dart 언어는 오버로딩이 없습니다. 대신 더 강력한 선택적 매개변수 방식을 사용합니다. 문법은 매개변수를 {}로 감싸면 됩니다.
// 코드의 시작점
void main() {
// Dog d1 = new Dog(); (객체 생성 메모리에 로드 - new 생략 가능)
// Dog d1 = Dog('toto', 10, 'white', 100); // 메모리에 로드 객체 생성
Dog d1 = Dog(age: 10, color: 'white', thirsty: 100 , name: 'toto');
} // end of main
class Dog {
String? name;
int? age;
String? color;
int? thirsty;
// 메서드 , 함수 , 생성 --> 파라미터 설계 (단일 라인 생성자 - 생략했었음)
// 파라미터 --> 선택적 매개 변수
// 함수({}); -> 중괄호로 감싸면 된다.
// required --> 반드시 해당 매개변수를 써야한다라고 명시.
Dog({required this.name,required this.age,required this.color,required this.thirsty});
}
12 - 3. 클래스 - 생성자 파라미터 선택적 매개변수 : 기본값 설정
void main() {
Person p1 = Person(name: '홍길동');
}
class Person {
String? name;
int money;
Person({this.name, this.money = 0}); // 생성자 - 선택적 매개변수 : 기본값 설정
}
'flutter & dart' 카테고리의 다른 글
flutter & dart - flutter Devtool (0) | 2024.02.02 |
---|---|
flutter & dart - MaterailApp 과 Cupertino (0) | 2024.02.02 |
flutter & dart - assets (0) | 2024.02.02 |
flutter - Android Studio 설치 , 설정 (1) | 2024.01.30 |
flutter - Window 설치 (1) | 2024.01.30 |