😉준비물
인프런 코드팩토리님의 강의 : https://www.inflearn.com/users/@codefactory
다트 패드 : https://dartpad.dev/
🤭변수 선언
void main() { }
모든 코드는 위 메인 함수안에서 실행 시킴
print('Hello Code Factory');
프린트 해보기
//(1)
var name = '코드팩토리';
print(name);
var name2 = '레드벨벳';
print(name2);
//(2)
var name = '플러터 프로그래밍'
print(name);
(1) var로 함수 선언이 가능합니다.
(2) 같은 이름의 함수를 2번 이상 선언하면 오류가 발생합니다.
why? 뭐가 진짜 값인지 알 수 없기 때문에
int number1 = 1
print(number1)
int number2 = -5
print (number2)
int를 이용해서 integer(정수) 선언 가능
double number1 = 2.5
print(number1)
double number2 = 3.5
print(number2)
double을 이용해서 실수 선언 가능
bool isTrue = true;
bool isFalse = false;
pritn(isTrue)
print(isFalse)
bool(Boolean)을 이용해서 참,거짓 값을 선언 가능
String name = '레드벨벳';
String name2 = '코드팩토리';
print(name);
print(name2);
String을 이용해서 문자열 선언 가능
Q. var을 쓰면 되는데 String, int를 왜 씀?
A. 코드의 가독성을 높이고 대량의 코드에서 변수를 제대로 정리하기 위해서임
String name = '레드벨벳'
String name2 = '슬기'
print(name + name2);
//레드벨벳슬기
print(name + ' ' + name2);
//레드벨벳 슬기
print('${name} ${name2}');
//레드벨벳 슬기
print('$name.runtimeType $name2');
//레드벨벳.runtimeType 슬기
스트링 출력 시,
Str + Str = StrStr
${Str} ${Str} = Str Str
로 출력된다.
var name1 = '우주소녀'
dynamic name2 = '루다'
name1 = 1 //(1)불가능
name2 = 1 //(2)가능
var는 한번 String, Integer로 결정되면 바뀌지 않는다.
dynamic은 var과 같지만 이 후에 타입 변경이 가능하다.
String? name1 = '우주소녀';
name1 = null; ( nullable )
String! name2 = '루다';
name2 = null; ( non-nullable )
?(물음표)를 붙여주면 null 값으로 변환이 가능해지고 ( nullable )
!(느낌표)를 붙여주면 null 값으로 변환이 불가능해진다 ( non-nullable )
final String name = '우주소녀'
const Stirng name = '루다'
// var은 생략 가능
final과 const 모두 해당 변수의 값이 변하지 않도록 Fix 시켜준다.
final/const var name = final/const name 으로 생략해서 사용할 수 있다.
Q. final과 const의 차이는 뭔가?
final은 buildtime의 값을 알지 못해도 사용할 수 있다.
( 깊게 이해하려고 하지 않았다. 언젠가 다시 만날 거라고 생각함 )
🧐오퍼레이터(연산자)
int number = 2;
print(number) // 2가 나온다.
print(number + 1 )
print(number + 2 )
print(number) // 2가 나온다.
일반적으로 변수 선언한 값을 print할 때 더하기 빼기를 해준다고 해서 변수값이 변환되지는 않는다.
int number = 2;
number ++;
print(number) // 3이 출력됨
하지만 '++', '--' 같은 오퍼레이터(연산자)를 사용하면 변수값을 재저장 시킬 수 있다.
dobule numver = 4.0;
number += 1;
print(number) // 5
number -= 1;
print(number) // 4
number *= 2;
print(number) // 8
오퍼레이터(연산자)를 바뀌가며 '재저장'이 가능하다.
double? number = 4.0;
print(number); // 4.0
number = 2.0;
print(number); // 2.0
number = null;
print(number); // number
number ?? = 3.0; // number가 만약에 null이라면 3.0 으로 바꿔라!
print(number); // 3.0
물음표(null-able)을 이용해서 'null'일 경우 값 지정하는 오퍼레이터를 사용 가능하다.
int number = 1;
int number = 2;
print(number1 > number2); // false
print(number1 < number2); // true
print(number1 >= number2); // false
print(number1 <= number2); // true
print(number1 == number2); // false
print(number1 != number2); // true
변수값 크기 비교
int number 1 = 1;
print(number1 is int); // true
print(number1 is String); // false
print(number1 is! int); // false
print(number1 is! String); // true
변수 타입 비교
bool result 12 > 10 && 1 > 0;
print(result);
bool result2 = 12 > 10 && 0 > 1;
print(result);
bool result3 = 12 > 10 || 1 > 0;
print(result3);
bool result4 = 12 > 10 || 0 > 1;
print(result4);
bool result5 = 12 < 10 || 0>1;
%%(and) 와 ||(or)로 공통 조건
😎리스트
List<String> blackPink = ['제니','로제','지수','리사'];
List<int> numbers = [1,2,3,4,5];
리스트 앞에 뾰족괄호를 통해서 타입을 설정 가능
print(blackPink[0],blackPink[1]) // 제니 로제
인덱스는 0 부터 할당됨
print(blackPink.length); // 4
길이를 알려주는 .length
blackPink.add('루다')
값을 추가해주는 .add
blackPink.remove('제니');
값을 지워주는 .remove
print(blackPink.indexOf('루다')); // 4
값의 위치를 알려주는 .indexOf
Map<String, String> dictionary = { 'Harry Potter' : '해리포터', 'king' : '킹', 'queen' :'퀸' };
print (dictionary);
Map<String, bool> is character = { ... };
Map 을 이용해서 딕셔너리 변수 지정 가능
character.addAll({a : c, b : d});
character[a] = b;
character.remove('a'); // 키와 값이 동시에 지워짐
print(character.keys); // 키만 가져오기
print(character.values); // 밸류만 가져오기
추가, 변경, 키값만 출력, 밸류값만 출력이 가능
final Set<String> names = {
'a',
'b',
'c',
'd'
};
names.add('e') // e가 추가됨
names.remove('d') // d가 삭제됨
print(names.contains('f')) // false (존재여부)
Set은 리스트처럼 하나의 값만 저장한다.
하지만, Set에는 중복값을 자동으로 삭제를 해준다.
🫠조건문,반복문
int number = 3;
if(number == 3){
print('a');
}else if(number == 2){
print('b');
}else{
print('c');
}
타 언어의 if 문과 다를것 없다.
switch(number % 3){
case 0:
print('나머지가 0입니다.');
break;
case 1:
print('나머지가 1입니다.');
break;
case 2:
print('나머지가 2입니다.');
break;
switch문을 이용해서 값이 나왔을 때 각각 값에 따른 출력을 지정할 수 있다.
// loof
for (int i = 0; i < 10; i++) {
print('hi')
}
for ( 변수설정, 조건설정, 증감설정 ) { 출력 } 를 이용해서 반복문을 설정
List<int> numbers = [1,2,3,4,5,6];
for (int number in numbers){
print(number); // 1 2 3 4 5 6
}
for ( 타입 변수 in 리스트 ) 를 이용해서 리스트 속 값들을 반복 시킬 수 있다.
int total = 0;
while(total < 10){
total += 1;
}
print(total);
while (조건) 을 이용해서 반복 가능
do { total += 1;
} while (total < 10)
print(total);
}
do 를 이용하면 특정 동작을 먼저 실행할 수 있지만, 아무도 쓰는걸 본적이 없다고 한다.
while ( total < 10) {
total += 1;
if (total == 4){
continue;
}
print(total); // 1,2,3,5
if (total == 5){
break;
}
break 문을 사용하면 반복문이 종료,
continue문을 사용하면 반복문이 한 번 생략 된다.
🤥이넘, 함수,파라미터
enum Status{
approved,
pending,
rejected,
}
Status status = Status.pending;
if(status == Status.approved){
print('승인입니다.');
}else if(status == Status.pending){
print('승인입니다.');
}else if(status == Status.rejected){
print('승인입니다.');
enum을 사용해서 몇가지 타입이 있다는 것을 알리고, 픽스해 둘 수 있다.
// 이 함수는 이런 함수 입니다.
addNumbers(){
print('addNumbers 실행')
}
addNumbers(); // addNumbers 실행
함수명(매개변수){출력}
함수를 지정할 수 있다.
*나와 다른 사람을 위해서 위에 주석 설명을 남겨서 어떤 함수인지 항상 남겨줄 것*
addNumbers(3, 5, 7); // 실행
//세 개의 숫자를 더하고 짝수인지 홀수인지 알려주는 함수
addNumbers(int x, int y, int z) // 괄호 안에 들어가는게 parameter
{
int sum = x + y + z;
print('x :$x');
print('y :$y');
print('z :$z');
if (sum % 2 ==0) {
print('짝수입니다.');
} else {
print('홀수입니다.');
}
함수의 꽃인 파라미터는 함수 선언 뒤 괄호에 들어간다.
현재 위 코드에 들어있는 파라미터는 'Positional Parameter'로 순서가 중요한 파라미터다.
( 순서대로 넣어줘야 하는 파라미터이기 때문 )
addNumbers(10); // 실행
addNumbers(20, 30); // 실행
addNumbers(int x, [int y, int z]) // 대괄호를 넣으면 선택가능 파라미터가된다.
int sum = x + y + z
addNumbers(int x, [int y = 30, int z = 20]) // 선택가능 파라미터는, 기본값을 설정해둘 수 있다.
int sum = x + y + z
'optional parameter' 넣지 않아도 되는 parameter값을 넣어줄 수 있다.
addNumbers( x : 10, y : 20, z : 35); // 실행
addNumbers( z : 10, x : 25, y : 32); // 변수의 순서가 바뀌어도 문제x
addNumbers(
required int x,
required int y,
required int z, ) // 이름이 있는 파라미터를 설정
int sum = x + y + z
addNumbers(
required int x,
required int y,
int z, ) // required를 지우면 'optional named parameter'가 된다.
int sum = x + y + z
'named parameter'를 이용해서 순서가 정해진 값을 넣어줄 수 있다.
void 함수(){} // return 값이 없다.
int 함수(){} // int값을 return 해야 한다.
'void'와 'int'를 이용해서 함수의 return 값을 지정 할 수 있다.
int addNumbers(x,y,z)
=> x+y+z; // 애로우 함수 바로 뒤에 오는 값을 반환한다.
애로우 펑션을 이용해서 간소화 하는 것이 가능하다.
//signature (1)
typedef Operation = int Function(int x, int y, int z);
//더하기
int add ( int x, int y, int z ) => x + y + z
//빼기
int subtract ( int x, int y, int z ) => x - y - z
//계산 (2)
int calculate ( int x, int y, int z, Operation operation ) => operation (x - y - z)
void main(){
Operation operation = add;
int result = opration(10, 20, 30);
print(result); // 60
operation = subtract;
int result2 = operation(10,20,30)
print(result2);// -40 (3)
int result3 = calculate(10,20,30,add)
print(result3); // 120
}
typedef와 시그니쳐에 대한 강의는 별도 추가 강의, 추가 정리 예정
간단히 강의 내용을 텍스트로 정리해봤습니다.
수정 필요한 부분은 언제든 댓글로 남겨주세요 :)
'코딩' 카테고리의 다른 글
[클론코딩][플러터] 개발하는남자 당근마켓 클론코딩 리뷰 (0) | 2022.09.06 |
---|---|
[다트] [오류] The argument type 'Widget' can't be assigned to the parameter type "PreferredSizeWidget?". (0) | 2022.09.04 |
[SWEA] D2 1954. 달팽이 숫자 python 풀이( 2차원 그래프에 방향 적용하기) (0) | 2022.09.03 |
[SWEA] D2 1859. 백만 장자 프로젝트 문제 풀이 (0) | 2022.09.02 |
[코딩 교육] PY4E 2022 코칭스터디 후기 (0) | 2022.08.31 |