void main() {
int number1 = 10;
int number2 = -10;
print(number1 + number2);
print(number1 - number2);
print(number1 / number2);
print(number2 * number1);
}
0
20
-1
-100
void main() {
// 실수
// double
double number1 = 2.5;
double number2 = 0.5;
print(number1 + number2);
print(number1 - number2);
print(number1 / number2);
print(number1 * number2);
}
3
2
5
1.25
true / false 2가지 값만 있음
void main() {
// 참/ 거짓
// Boolean
bool isTrue = true;
bool isFalse = false;
print(isTrue);
print(isFalse);
}
true
false
String 첫 글자는 무조건 대문자로 선언해줘야 함
String 값도 덧셈 가능함, 뺄셈, 나누기, 곱하기는 안됨.
띄어쓰기는 ' '(따옴표 안에 띄어쓰기)
void main() {
// 글자
// Stirng
String name = '레드벨벳';
String name2 = '코드팩토리';
print(name + ' '+ name2);
}
레드벨벳 코드팩토리
'${변수}' 변수 자체를 삽입하기
void main() {
// 글자
// Stirng
String name = '레드벨벳';
String name2 = '코드팩토리';
print(name + ' '+ name2);
print('${name} ${name2}') ; //띄어쓰기 바로 가능
print('$name $name2'); // 변수 자체 하나만 쓰는 경우 {} 생략가능, 단, 함수 사용 불가
}
레드벨벳 코드팩토리
레드벨벳 코드팩토리
레드벨벳 코드팩토리
'$name'에 괄호 없이 바로 함수를 사용하는 경우 ↓

var vs. String 차이는?

dynamic은 var과 비슷하듯이 오른쪽 변수의 타입을 자동식별함
코드
dynamic name = '코드팩토리';
print(name.runtimeType);
var name2 = '블랙핑크';
print(name2.runtimeType);
결과
String
String
차이점은,
dynamic은 오른쪽 값을 변경할 때 변수타입 변경이 가능함. (eg, String -> int)
var은 처음 선언해줬던 변수타입 그대로 고정되어 같은 타입에 한해 값 변경이 가능함. (eg, String -> String)

변수타입(String, int, boolean 등등) 뒤에 물음표를 붙이면 null까지 선언 가능.
void main() {
// nullable - null이 될 수 있다.
// non-nullable - null이 될 수 없다.
// null - 아무런 값도 있지 않다.
String name = '코드팩토리';
print(name); // 코드팩토리
name = null; // 에러남
String? name2 = '블랙핑크';
name2 = null;
print(name2); // null
}
변수 뒤에 !를 붙이면 '현재 이 값은 null이 될 수 없다'라는 것을 뜻함
void main() {
// nullable - null이 될 수 있다.
// non-nullable - null이 될 수 없다.
// null - 아무런 값도 있지 않다.
String? name2 = '블랙핑크';
print(name2!); // 변수 뒤에 !를 붙이면 '현재 이 값은 null이 될 수 없다'라는 것을 뜻함
}
void main() {
final String name = '코드팩토리';
print(name);
name = '블랙핑크'; // 에러 뜸
}
void main() {
const String name2 = '블랙핑크';
print(name2);
name2 ='레드벨벳'; // 에러 뜸
}
코드
void main() {
final name = '코드팩토리';
print(name);
const name2 = '블랙핑크';
print(name2);
}
결과
코드팩토리
블랙핑크
void main() {
final DateTime now = DateTime.now();
print(now);
// final 변수선언에는 빌드타임을 몰라도 됨
// DateTime.now() 함수는 코드가 실행될 때 시간을 돌려줌
const DateTime now2 = DateTime.now();
// const 변수선언에는 빌드타임이 절대적으로 필요함
// 따라서 위처럼 작성하면 에러가 남
}
1씩 더하기/빼기 한 후, 기존 변수에 재저장
void main() {
int number = 2;
print(number + 2);
print(number - 2);
print(number / 2);
print(number * 2);
print('--------------------------');
print(number % 2);
print(number % 3);
// % 는 나머지를 뜻함
print(number);
// number값은 여전히 2
print('--------------------------');
number ++;
print(number);
// ++는 1을 더하고 number에 저장해 줌
// 2+1=3
number --;
print(number);
// --는 1을 빼고 number에 저장해 줌
// 3-1=2
}
원하는 값 만큼 더하기/빼기/곱하기/나누기 한 후 기존 변수에 재저장
코드:
void main() {
double number = 4.0;
print(number);
number += 1;
print(number);
number -= 1;
print(number);
number *=2;
print(number);
number /=2;
print(number);
}
결과:
4
5
4
8
4
??= 은 변수가 null이면 오른쪽 값으로 저장되는 기능임.
코드:
void main() {
// null 값이 허용되는 변순 선언
double? number = 4.0;
print(number);
number = 2.0;
print(number);
number = null;
print(number);
number ??= 3.0;
print(number);
// ??= 은 변수가 null 이면 오른쪽 값으로 저장되는 기능임.
}
결과:
4
2
null
3
null 값이 아니면 원래 값을 돌려줌.
코드:
void main() {
// null 값이 허용되는 변순 선언
double? number = 4.0;
print(number);
number = 2.0;
print(number);
number ??= 3.0;
print(number);
// ??= 은 변수가 null 이면 오른쪽 값으로 저장되는 기능임.
}
결과:
4
2
2


and는 모두 다 true여야 true
or은 한 개라도 true이면 true

void main() {
// List 리스트
List<String> blackPink = ['제니', '지수', '로제', '리사'];
List<int> numbers = [1,2,3,4,5,6];
print(blackPink);
print(numbers);
}

값 추가, 값 제거, 값의 순서 가져오기
코드:
void main() {
// List 리스트
List<String> blackPink = ['제니', '지수', '로제', '리사'];
blackPink.add('코드팩토리');
print(blackPink);
blackPink.remove('코드팩토리');
print(blackPink);
print(blackPink.indexOf('로제'));
}
결과:
[제니, 지수, 로제, 리사, 코드팩토리]
[제니, 지수, 로제, 리사]
2
Map<Key타입, Value타입> 변수명 = { Key1 : Value1, Key2 : Value2 };
예시:
void main() {
// Map<Key타입, Value타입> 변수명 = { Key1 : Value1, Key2 : Value2 };
Map<String, String> dictionary = {
'Harry Potter': '해리포터',
'Ron Weasley' : '론 위즐리',
'Hermione Granger': '헤르미온느 그레인저'
};
print(dictionary);
}
{Harry Potter: 해리포터, Ron Weasley: 론 위즐리, Hermione Granger: 헤르미온느 그레인저}
boolean값도 지정 가능
예시:
void main() {
Map<String, bool> isHarryPotter = {
'Harry Potter' : true,
'Ron Weasley' : true,
'Ironman': false
};
print(isHarryPotter);
}
{Harry Potter: true, Ron Weasley: true, Ironman: false}
값 추가/변경 기능
예시:
void main() {
// 값 추가하기 방법 1
isHarryPotter.addAll({
'Spiderman' : false });
print(isHarryPotter);
// 값 추가하기 방법 2
isHarryPotter['Hulk'] = false;
print(isHarryPotter);
// index 값 확인하기
print(isHarryPotter['Ironman']);
// 값 변경
isHarryPotter['Ironman'] = true;
print(isHarryPotter);
}
{Harry Potter: true, Ron Weasley: true, Ironman: false}
{Harry Potter: true, Ron Weasley: true, Ironman: false, Spiderman: false}
{Harry Potter: true, Ron Weasley: true, Ironman: false, Spiderman: false, Hulk: false}
false
{Harry Potter: true, Ron Weasley: true, Ironman: true, Spiderman: false, Hulk: false}
값 삭제 기능
예시:
void main() {
Map<String, bool> isHarryPotter = {
'Harry Potter' : true,
'Ron Weasley' : true,
'Ironman': false
};
print(isHarryPotter);
isHarryPotter.remove('Harry Potter');
print(isHarryPotter);
}
{Ron Weasley: true, Ironman: true}
key/value 값만 가져오기
예시:
void main() {
Map<String, bool> isHarryPotter = {
'Harry Potter' : true,
'Ron Weasley' : true,
'Ironman': false
};
// key값만 가져오기
print(isHarryPotter.keys);
// value값만 가져오기
print(isHarryPotter.values);
}
(Harry Potter, Ron Weasley, Ironman)
(true, true, false)
Set<자료형> 변수명 = {a, b, c};
값 추가/제거/확인 함수
예시:
void main() {
// Set
final Set<String> names = {
'Code Factory',
'Flutter',
'Black Pink'
};
print(names);
// 값 추가 함수
names.add('Jenny');
print(names);
// 값 제거 함수
names.remove('Jenny');
print(names);
// 값이 포함되어 있는지 확인
print(names.contains('Flutter'));
}
if(조건){
조건이 true일 때 결과;
}else{
조건이 false일 때 결과;
}
// 다중 조건일 때:
if(조건1){
조건1이 true일 때 결과;
} else if(조건2){
조건2이 true일 때 결과;
}else{조건2가 false일 때 결과;
}
void main() {
// switch 문
int number = 3;
switch(number % 3){
case 0:
print('나머지가 0입니다.');
break; //switch는 조건당 break를 걸어줘야 다음 조건으로 안넘어감
case 1:
print('나머지가 1입니다.');
break;
default: // if문의 else와 같음
print('나머지가 2입니다.');
break;
}
}

void main() {
// for loop
int total = 0;
List<int> numbers = [1,2,3,4,5,6];
// length는 개수(1부터 시작), index는 순서(0부터 시작)
// numbers.length = 6
// 따라서 i = 0~5
// numbers[i]는 numbers 1번째, 2번째...6번째 인덱스를 뜻함
for(int i=0; i < numbers.length; i++){
total += numbers[i];
}
print(total);
}
21
void main() {
// for loop
int total = 0;
List<int> numbers = [1,2,3,4,5,6];
for(int i=0; i < numbers.length; i++){
total += numbers[i];
}
print(total);
total = 0;
// in 뒤에 List의 인덱스가 차례로 옴
for(int number in numbers){
total += number;
}
print(total);
}
21
21
void main() {
// while loop
int total = 0;
// while(total<-1)로 하면 total=0은 -1보다 작을 수 없기 때문에 컴퓨터가 계속 실행함.
while(total < 10){
total += 1;
}
print(total);
}
void main() {
// while loop
int total = 0;
// 조건문 -> 결과문
while(total < 10){
total += 1;
}
print(total);
total = 0;
// 결과문 -> 조건문
do{
total += 1;
} while(total < 10);
print(total);
}
void main() {
// while loop
int total = 0;
while (total < 10) {
total += 1;
if (total == 5) {
break; // total이 5이면 조건을 끝냄
}
}
print(total);
//for loop
total = 0;
for (int i = 0; i < 10; i++) {
total += 1;
if (total == 5) {
break;
}
}
print(total);
}
void main() {
// while loop
for (int i = 0; i < 10; i++) {
if(i ==5){
continue; // 현재 loop만 skip하기; break는 나머지 loop까지 모두 빠져나옴
}
print(i);
}
}




반환타입/void 함수명(파라미터1, 파라미터2...) => 함수식;



