|
Dart 프로그램 언어 기본적인 종합 실습입니다.
주로 선언부 입니다.
소스코드 같이 올려 봅니다... 설명은 소스코드에 다 설명되어 있으니 보시면서 실습하시면 될겁니다.
갑자기 많이 하는거 보단 중단없이 찬찬히 끈기있게 공부하시는 게 중요합니다.
실습 항모들을 직접 실습 해보기고 내용들을 프린터하시어 최소 하루에 한번정도 휴대하시어 이동중에도
눈으로라도 대충 흩어보시기 바랍니다.
태어 날때부터 잘하는 사람은 없습니다.. 즉 태어나면서 부터 프로그램 고수는 없는 겁니다.
모두 다 후천적으로 노력에 산물인 겁니다.
공부할때 고통스럽더라도 그 열매는 달 겁니다.
어렵게 공부해서 영광의 미래를 누리시길 바랍니다...
여러분들 한텐 길이 열려 있습니다...
이를 재취하면 .... 여러분 이래는 밝을 겁니다...
개발환경 부분은 제가 별도로 연재하도록하겠습니다.
강의자료 포함하여...
일단 소스 보시죠...
void main() {
// 출력하기
print("hello");
//A. 변수타입
// A-1. string type
String name = "송명규";
String name2 = "SMG";
print(name);
print(name2);
// var = 변수타입을 오른쪽 값으로 자동으로 유출할 수 있음
var k = "코드팩토리";
var ph = 1234;
print(k.runtimeType); //runtimeType = 실행시 변수 타입을 알려 줌
print(ph.runtimeType);
print(name + name2); // 문자열이 합침 = 문자열 덧샘
print(name + ' ' + name2); // 글자간 띠어쓰기
// S{이 안에 변수를 넣을 수 있음}
// ${} ${} == 변수와 변수사이 공백표시
// ${} 생략가능 == "$name $name2"
print('${name} ${name2}');
print("$name $name2");
print('${name.runtimeType} ${name2}'); // 변수 타입알아내기. 내장함수나 시스템 함수, 속성 사용시 이용
print("$name.runtimeType $name2"); // runtimeType는 글자로인식함
print(k);
k = "song";
print(k);
// A-2. 정수타입
int num1 = 100;
print(num1);
int num2 = -50;
print(num2);
int num3 = 2;
int num4 = 4;
print(num3 + num4);
print(num3 - num4);
print(num3 / num4);
print(num3 * num4);
// A-3, 실수타입
double num5 = 2.5;
double num6 = 0.5;
print(num5 + num6);
print(num5 - num6);
print(num5 / num6);
print(num5 * num6);
// A-4. 불리안(Boolean) 변수 = 맞다(T) 틀리다(F)
bool k1 = true;
bool k2 = false;
print(k1);
print(k2);
// A-5. 다이나믹 타입
dynamic nk = "송명규"; // 어떤 타입이든지 다 사용할 수(넣을 수) 있음, 일종의 var 타입과 비숫
dynamic nk2 = 1000;
print(nk);
print(nk2);
var gh = "접니다";
print(gh);
// 타입확인 확인
print(nk.runtimeType);
print(gh.runtimeType);
// 차이점 확인
// var type : 허락안됨, var 타입은 최조 string 타입으로 선언되어 있으므로 정수형으로 못 바꿈
//gh = 200; // var type = error 표시
// dynamic : 허락됨 = 어던 type이든지 사용할 수 있다. C에서 일종에 공용체 형식
nk = 1234;
nk = true;
print(nk);
// A-6. null Type
// null = 아무런 값도 같고있지 않다.
// nullable ==>> null이 될 수 있다. ==>> ? : null이 들어갈 수 있다.
// non-nullable ==>> null이 될 수 없다. ==> ! : null이 들어갈 수 없다.
String nk3 = "song"; // ?가 없으므로 null 값을 넣을 수 없다.
print(nk3);
//nk3 = null; // error 발생 = null값을 지정할 수 없는데 string 타입 인데
//null을 지정해서 error 발생
// 변수 타입은 크게 2가지로 구분된다.
// 1. 변수 타입만 들어가는 경우
// 2. 변수 타입하고 null까지 들어가는 경우
String? nk4 = "smg"; // 어떤 타입이든 변수타입 되에 ?를 붇이면 null값가지 들어갈 수 있는 변수 타입니다.
int? kk = null;
print(nk4);
nk4 = null; // null 값 지정
print(nk4); // sting 타입 null값 표시
print(kk); // int 타입 null값 표시
// null 값이 들어갈 수 없다, 즉 현재 nk4는 절대 null 값이 아니다. 라고 선언 할 수 있음
// 단 !은 ?으로 선언한 변수 타입에서만 적용됨 = 즉 현재 이 값은 null 값이 아니다.
// 어떤 함수로 값을 넘길때 그 함수가 null 값을 받을 수 없을때 사용
// 변수 타입은 반드시 ?로 해서 null값까지 받을수 있는 변수에만 적용 됨
// null 취급 변수에 !를 붙이면 null값이 아니오가 된다.
//print(nk4!); // 실행하면 error 남 = 사용할 구문이 없어
// A-7. final, const 키워드 == C언어 상수개념 = 변수 값을 변경할 수 없다.
// 변수 선언시 맨 앞에다가 선언 해 줌
// 1. final
// final로 선언시 변수값을 절대로 변경할 수 없다. 일종의 C에서 상수개념
final String nk5 = "song, m,g";
print(nk5);
//nk5 = "abc"; // error 발생 = final 로 선언 되었으므로
// 2. const
// 변수 선언시 맨 앞에다가 선언 해 줌
// const로 선언시 변수값을 절대로 변경할 수 없다. 일종의 C에서 상수개념
const String nk6 = "smg";
print(nk6);
// nk6 = "my"; // error 발생
// final 이나 Const로 선언하면 변수 타입을 생략할 수 있다. 즉 var로 선언하는거와 같음
final nk7 = "song";
const nk8 = "1234";
print(nk7 + ' ' + nk8);
// DataTime 클래스 = 현재 시간과 날자를 변수에 저장할 수있는 datatime 클래스
// DateTime은 실행버튼을 누른 후 코드가 실행되는 순간의 타임이다.
DateTime now = DateTime.now();
print(now);
// final 하고 const 차이점
// final는 빌드타입 값을 우리가 알고있지 않아도 된다. 즉 값은 변경할 수 없으나 갱신할수는 있다.
final DateTime now1 = DateTime.now(); // 정상동작 함
print(now1);
// const는 빌드타입 값을 우리가 알고 있어야 한다.
// 즉 빌드한 후 프로그램 소스코드가 실행되는 순간의 값을 반드시 알고 있어야 하다.
// 그러나 우린는 알 수 없으므로 const는 사용할 수 없다. = 갱신은 안됨 = 그러나 값은 변경할 수 없다.
// const DateTime now2 = DateTime.now(); // error 발생 됨
// print(now2);
// B. 오퍼레이트 기능 = 재저장 기능
// B-1. ++, -- ==> C문법과 동일
// B-2. +=, -=, /=, *= ==>> C문법과 동일
// B-3. null 조건 오퍼레이트
double? nk9 = 4.0;
print(nk9);
nk9 = null;
print(nk9);
nk9 ??= 3.0; // ??= : nk9값이 null일경우에는 오른쪽 값으로 바꾸어라
print(nk9);
// B-4. 값을 서로 비교하는 오퍼레이트 ==> C언어의 관계 연산자 임
int pk = 1, pk1 = 2;
print(pk > pk1);
print(pk < pk1);
print(pk >= pk1);
print(pk <= pk1);
print(pk == pk1);
print(pk != pk1);
// B-5. 변수 타입을 비교하는 오퍼레이터
int pk2 = 23;
print(pk2 is int); //trus
print(pk2 is String); //false
// ! 반대, 즉 아니오가 됨
print(pk2 is! int); //false
print(pk2 is! String); //true
// B-6. 논리 오퍼레이터 == C언어 논리 연산자와 같음
// && : and 조건
// || : or 조건
bool pk3 = 12 > 10 && 1 > 0; //true
print(pk3);
bool pk4 = 12 > 10 && 1 < 0; //false
print(pk4);
bool pk5 = 12 > 10 || 1 > 0; //true
print(pk5);
bool pk6 = 12 > 10 || 0 > 1; //true
print(pk6);
bool pk7 = 12 < 10 || 0 > 1; //false
print(pk7);
// B-7. 다항 연산자
int k = 3;
(k == 3) ? k =4 : k =5;
print(k);
// C. LIST 클래스 ==>> C에서 배열과 같음
// 여러개의 값들을 한개의 LIST로 저장할 수 있다.
// 인덱스 데이터 하나하나가 개별의 값이다.
// <> == 재너릭이라고 함
List<String> pk9 = ["smg", '박은주', '송준협','송윤석'];
List<int> ak = [1, 2, 3, 4, 5];
int? ak1 = null;
print(pk9);
print(ak);
// index = 순서
// index는 0부터 시작한다.
print(pk9[0]); // smg
print(pk9[1]); // 박은주
print(pk9[2]);
print(pk9[3]);
// 전체 List 길이를 알아내기
print(pk9.length); // 길이알아내기 = 길이는 0부터 시작하지 않는다.
// List에 값을 넣어보기(추가하기)
pk9.add("송왕규"); // 송왕규 추가
print(pk9);
// List에 값을 넣어보기(추가하기)
pk9.remove("송왕규"); // 송왕규 추가
print(pk9);
// 인텍스 값도 가져올수 있음 = 즉 어떤값이 어떤 인덱스냐...
print(pk9.indexOf("송준협"));
// 특정 인덱스 값 변경하기
pk9[1] = "송하순";
print(pk9);
// 특정 인덱스값 읽어오기
ak1 = ak[2];
print(ak1);
// D. Map 클래스
// Key / Value 의 값을 넣어라.
// Key / Value 의 짝으로 구성된다.
// Key를 가지고 Value값을 찾는다.
// 왼쪽이 Key 값이고 오른쪽이 Value 값이다.
// Map은 Key를 같고 Value 값을 찾는데 사용한다.
// 내용물 추가시 ,로 구분하여 추가한다.
// Key 하고 Value의 구분은 : 으로 한다.
// 데이터 타입은 임의로 지정할 수 있다.
// 타입과 다른값이 드러가면 Error 발생 함
// Key에 해당되는 Valse 값을 가져오기로 사용 됨
// Value에 해당되는 Key 값은 가져올 수 없다.
Map<String, String>kgy = { // 왼쪽 String = Key, 오른쪽 String은 Value 갑이다.
"SMG" : "송명규",
"Phg" : "박은주",
"sjh" : "송준협",
"sos" : "송윤석"
};
print(kgy);
Map<String, bool> wg = {
"SMG" : true,
"phg" : true,
"sjh" : false
};
print(wg);
// Map 에다 값을 추가할 수 있는 방법
wg.addAll({
"sos" : false
});
print(wg);
// Key 에 해당되는 Value 값을 rkwudhrl
print(wg["sos"]);
// 임의적으로 값을 추가하기
wg['kkk'] = false;
print(wg);
// 값을 바꿀때
wg['SMG'] = false;
print(wg);
// key와 value값을 삭제하는 방법
wg.remove('SMG');
print(wg);
// key 값을 모두 가져오기
print(wg.keys);
// value 값을 모두 가져오기
print(wg.values);
// E. Set == List 와 거의비숫 하나 중복값을 걸러낸다.
// List 처럼 하나의 값민 저장할 수 있는 형태다.
// List 와 Set 의 차이는 List는 중복값이 들어갈 수 있고, Set은 중복값이 들어갈 수 없다.
// Set은 중복값이 들어갈 수 없으므로 중복값을 자동으로 처리해주는 장점이 있다.
// Set은 중복값을 알아서 처리해 준다.
final Set<String> wg1 = {
"smg1",
'aaa',
'bbb',
"ccc",
'aaa' // 'aaa' 는 중복되므로 Set에서는 하나만 표시된다.
};
print(wg1);
// 값을 추가하기
wg1.add('ddd');
print(wg1);
// 값을 지울때
wg1.remove('ddd');
print(wg1);
// 값이 Set에 있는지, 없는지 체크할때
print(wg1.contains('ccc'));
}
|