From 26d9502bc6729bc39977c96ff4ad059f76119b6b Mon Sep 17 00:00:00 2001 From: Junwon Lee <63298243+cpprhtn@users.noreply.github.com> Date: Thu, 6 Oct 2022 11:05:28 +0900 Subject: [PATCH 1/9] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 03d8aa7..ec91b97 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,5 +1,5 @@ ## PR Checklist -#### Please refer to the guidelines document https://github.com/GDSC-DONGA/GDSC-DAU-GitGuide/README.md. +#### Please refer to the guidelines document [https://github.com/GDSC-DONGA/GDSC-DAU-GitGuide/README.md](https://github.com/GDSC-DONGA/GDSC-DAU-GitGuide/blob/main/README.md). #### If you agree, make [ ] below [x]. - [ ] Checked the guideline document and follow the rules. From b4fad556e338132241ee4606d4baf8cf6fd061b9 Mon Sep 17 00:00:00 2001 From: syeony Date: Tue, 1 Nov 2022 23:30:32 +0900 Subject: [PATCH 2/9] Create print hello world --- print hello world | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 print hello world diff --git a/print hello world b/print hello world new file mode 100644 index 0000000..0b2119d --- /dev/null +++ b/print hello world @@ -0,0 +1,3 @@ +void main() { + print("Hello, world!"); +} From e6195eb97b3c6a2d6d82fb1219d833700aa2cf77 Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 02:15:03 +0900 Subject: [PATCH 3/9] =?UTF-8?q?Create=201=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "1\354\243\274\354\260\250.md" | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "1\354\243\274\354\260\250.md" diff --git "a/1\354\243\274\354\260\250.md" "b/1\354\243\274\354\260\250.md" new file mode 100644 index 0000000..08ee6d0 --- /dev/null +++ "b/1\354\243\274\354\260\250.md" @@ -0,0 +1,63 @@ +# 1. 데이터 타입 +## int +정수형 + +555, 1, 3, ... + +int a = 555; + +## double +실수형 + +0.0001 ... + +double b = 11.1; + +## String +문자열 +스트링의 맨앞은 S 대문자입니다. + +String str1 = "BlockDMask"; + +String str2 = 'BlockDMask'; + +큰따옴표 작은따옴표 둘다 사용가능이지만 작은따옴표가 표준이라고 함. + +## bool +참 거짓을 나타내는 불리언 타입 + +true, false + +bool c = false; + +## num +못보던 타입. + +int와 double을 포함하는 타입 입니다. + +num n1 = 44; + +num n2 = 23.12; + +int, double로 선언한 변수를 num 타입에 담을 수 있습니다. + +int a = 10; + +num n = a; //가능 + +# 2. 변수와 연산자 +c와 비슷. 다른점만 살펴보면 + +~/ : 몫 + +문자열 결합 가능 ("a" + "b") + +## 그 외 신기했던 것 +c와 다르게 + +주석 시작 : /** + +주석 끝 : **/ + +으로 나타냄 + From d6190509c0e1363a5ec17952e4f36bae6a9bf92e Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 13:33:12 +0900 Subject: [PATCH 4/9] =?UTF-8?q?Update=201=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "1\354\243\274\354\260\250.md" | 144 +++++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 25 deletions(-) diff --git "a/1\354\243\274\354\260\250.md" "b/1\354\243\274\354\260\250.md" index 08ee6d0..397d5a9 100644 --- "a/1\354\243\274\354\260\250.md" +++ "b/1\354\243\274\354\260\250.md" @@ -1,39 +1,19 @@ # 1. 데이터 타입 -## int -정수형 - -555, 1, 3, ... - -int a = 555; - -## double -실수형 - -0.0001 ... - -double b = 11.1; +c와 같다 = int, double ## String 문자열 스트링의 맨앞은 S 대문자입니다. -String str1 = "BlockDMask"; - -String str2 = 'BlockDMask'; - -큰따옴표 작은따옴표 둘다 사용가능이지만 작은따옴표가 표준이라고 함. +큰따옴표 작은따옴표 둘다 사용가능이지만 작은따옴표가 표준. ## bool 참 거짓을 나타내는 불리언 타입 -true, false - -bool c = false; - ## num 못보던 타입. -int와 double을 포함하는 타입 입니다. +int와 double을 포함하는 타입. num n1 = 44; @@ -41,9 +21,11 @@ num n2 = 23.12; int, double로 선언한 변수를 num 타입에 담을 수 있습니다. -int a = 10; +## var +type을 직접 명시하지 않고, var로 대체할 수 있음 -num n = a; //가능 +## const, final +값이 변하지 않는 경우는 상수 사용. 선언시 final을 제일 앞에 붙이면 값이 수정되지 않음. 타입 생략 가능. # 2. 변수와 연산자 c와 비슷. 다른점만 살펴보면 @@ -52,6 +34,118 @@ c와 비슷. 다른점만 살펴보면 문자열 결합 가능 ("a" + "b") +# 3. 반복문과 조건문 +## 반복문 +```dart +for (var i = 0; i < 10 ; i++){ + print(i); +} +``` +## 조건문 +if else문 +```dart +int a = 10; + +if (a % 2 == 0) {~} +else if (a % 3 == 0) {~} +else {~} +``` + +삼항연산 +[조건] ? [참일 때] : [거짓일 때] +```dart +var number = a%2 ? a++ : a-- +``` + +# 4. 배열(리스트)과 맵 +```dart +//1-1 크기고정리스트 +var my_list = new List(3); // 크기 3짜리 리스트를 만듦 +var your_list = List.filled(5, 0); // 모든 원소가 0으로 초기화된 크기 5짜리 리스트를 만듦 + +//1-2 가변리스트 +var my_list2 = [1, 2, 3]; // 값과 함께 리스트를 초기화함 +var my_list3 = new List(); // 길이가 0인 리스트를 만듦 +var my_list4 = new List.empty(growable: true); +var my_list5 = List.filled(5, 0, growable: true); + +//1-3 리스트 원소접근 +var my_list5 = List.filled(5, 0, growable: true); +my_list5[0] = 1; +my_list5[4] = 5; +print(my_list5[2]); // 0 +print(my_list5.first); // 1 +print(my_list5.last); // 5 + +//1-4 리스트 원소삽입 +my_list5.addAll([6, 7, 8]); +my_list5.add(9); +my_list5.insert(3, 3); //특정위치에 삽입하고 싶을때 +my_list5.insertAll(1, [1, 2]); + +//1-5 리스트 원소삭제 +my_list5.remove(0); //제일 먼저 등장하는 0 삭제 +my_list5.removeAt(3); // 3번 인덱스의 값을 지운다. +my_list5.removeLast(); +my_list5.removeRange(1, 3);// 1번부터 3번 인덱스 전까지, 즉 1번과 2번 2개의 원소를 삭제한다. +my_list5.clear(); //전체삭제 +``` + +# 5. 함수와 클래스, 클래스의 상속 +## 함수 + +```dart + +String name = "이순신"; +int age = 20; + +void main(){ + print('$name은 $age살 입니다.'); + print("$name은 ${name.length}글자 입니다."); +} +``` + +## 클래스 + +객체 object : 저장 공간에 할당되어 값을 가지거나 식별자에 의해 참조되는 공간. + +```dart +class Person{ + String name; + int age; +} + +var person = new Person(); +var person2 = Person(); //new 생략 가능 +``` + +## 상속 +클래스는 다른 클래스를 상속(Inheritance)받을 수 있습니다. + +상속 받을 때에는 extends라는 키워드를 사용합니다. Dart에서는 하나의 클래스만 상속이 가능하며, 부모 클래스에 접근하기 위해서는 super 키워드를 사용합니다. +```dart +class Food { + String? name; + + Food(String name) : this.name = name; + + void printName() { + print('My name is ${this.name}!'); + } +} + +//상속 +class Fruit extends Food { + // Call parent constructor + Fruit(String name) : super(name); + + void printFruit() { + print('${this.name} is Fruit!'); + } +} +``` + + ## 그 외 신기했던 것 c와 다르게 From 90f20dc864980fae882ecef909a89d808ecd9aa8 Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 13:38:30 +0900 Subject: [PATCH 5/9] =?UTF-8?q?Update=201=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "1\354\243\274\354\260\250.md" | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git "a/1\354\243\274\354\260\250.md" "b/1\354\243\274\354\260\250.md" index 397d5a9..0c4f167 100644 --- "a/1\354\243\274\354\260\250.md" +++ "b/1\354\243\274\354\260\250.md" @@ -42,20 +42,13 @@ for (var i = 0; i < 10 ; i++){ } ``` ## 조건문 -if else문 -```dart -int a = 10; - -if (a % 2 == 0) {~} -else if (a % 3 == 0) {~} -else {~} -``` 삼항연산 [조건] ? [참일 때] : [거짓일 때] ```dart var number = a%2 ? a++ : a-- ``` +이 외에 c와 비슷하여 pass # 4. 배열(리스트)과 맵 ```dart @@ -110,13 +103,21 @@ void main(){ 객체 object : 저장 공간에 할당되어 값을 가지거나 식별자에 의해 참조되는 공간. ```dart -class Person{ - String name; - int age; +class Fruit { + String name = 'Apple'; + + void printName() { + print('My name is ${this.name}!'); + } +} + +void main() { +//클래스 멤버 변수와 함수는 . 으로 접근가능 + Fruit fruit = new Fruit(); + fruit.printName(); + fruit.name = 'Banana'; + fruit.printName(); } - -var person = new Person(); -var person2 = Person(); //new 생략 가능 ``` ## 상속 From e7e0267f9001535ad9c38678c143211e4d36475e Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 13:49:27 +0900 Subject: [PATCH 6/9] =?UTF-8?q?Create=202=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "2\354\243\274\354\260\250.md" | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "2\354\243\274\354\260\250.md" diff --git "a/2\354\243\274\354\260\250.md" "b/2\354\243\274\354\260\250.md" new file mode 100644 index 0000000..9b0d5b4 --- /dev/null +++ "b/2\354\243\274\354\260\250.md" @@ -0,0 +1,58 @@ +# 1. 인터페이스 +클래스를 정의할때 반드시 들어가야 하는 변수와 함수를 지정할 때 사용. + +강제성을 띄운다. + +abstract class로 선언 + +implements 키워드 사용! +```dart +abstract class Food{ + String name; + void sayName(); +} + +class Pizza implements Food{ + String name = "pizza"; + void sayName(){ //일종의 overiding + print("이 음식은 피자입니다"); + } +} +``` + +# 2. 확장 +사용방법 : extension on { ()* } + +```dart +// 확장함수 +extension NumberParsing on String { + int parseInt() { + return int.parse(this); + } + // ··· +} + + +// 아래와 같이 사용할 수 있다 +import 'string_apis.dart'; +... +print('42'.padLeft(5)); // Use a String method. + +int.parse('42') +print('42'.parseInt()); // 위와 같지만 이처럼 String 확장함수로 사용 가능 +``` + +# 3. 제너릭 +< >으로 타입을 지정할 수 있다. +```dart + abstract class StringTest{ + String getTest(String i); + void setTest(String i); +} +abstract class Test{ + T getTest(T i); + void setTest(T i); +} +``` +기본적으로 타입마다 지정해야 될 수 있었던 상황을 제네릭으로 코드의 중복을 막을 수 있다. + From 28cc50c1fbaf7d1735099c118f5a6f6a50818577 Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 14:05:04 +0900 Subject: [PATCH 7/9] =?UTF-8?q?Update=202=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "2\354\243\274\354\260\250.md" | 72 +++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git "a/2\354\243\274\354\260\250.md" "b/2\354\243\274\354\260\250.md" index 9b0d5b4..d52408f 100644 --- "a/2\354\243\274\354\260\250.md" +++ "b/2\354\243\274\354\260\250.md" @@ -21,7 +21,8 @@ class Pizza implements Food{ ``` # 2. 확장 -사용방법 : extension on { ()* } + +사용방법 : extension (extension name) on (type) {(member definition)*} ```dart // 확장함수 @@ -55,4 +56,73 @@ abstract class Test{ } ``` 기본적으로 타입마다 지정해야 될 수 있었던 상황을 제네릭으로 코드의 중복을 막을 수 있다. +```dart + void main() { + var list1 = [1,2,3]; + var list2 = List(); + var map1 = { + 1 : 1, + 2 : 2, + 3 : 3 + }; + var map2 = Map(); + print(list1.toString()+list2.toString()+map1.toString()+map2.toString()); +``` + +# 4. 콜백 및 고차함수 +## 고차함수 +함수를 인자(argument)로 받거나 함수를 리턴하는 함수 +```dart +void printNumsPlus10(int num){ + print(num + 10); +} + +nums.forEach(printNumsPlus10); +``` + +주요 고차함수 메소드 +forEach, +map(), +toList(), +where(), +reduce(), +toSet(), +any(), +every() +## 콜백함수 +이 때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수 + +콜백함수 정의 및 전달 +```dart +import 'dart:math'; + +class MyWidget { + // 콜백함수 대입 받는 변수 선언 + final int Function(int, int) callback; + + // 생성자로 콜백함수 대입 + MyWidget({required this.callback}); + + int run() { + var rng = Random(); + // 호출 받은 함수(callee)에서 콜백함수 호출 + return callback(rng.nextInt(100), rng.nextInt(100)); + } +} + +// 콜백함수 정의 +int sum(int a, int b) { + return a + b; +} + +void main() { + // 생성자로 콜백함수 넘겨주기 + var w = MyWidget(callback: sum); + print('My Widget Result: ${w.run()}'); // My Widget Result: 23 +} +``` +sum() 콜백 함수를 정의한다. + +MyWidget 클래스에 콜백함수를 대입 받는 변수를 final 반환데이터타입 Function(매개변수목록) 변수; 형식으로 선언한다. +MyWidget 인스턴스를 생성할 때 생성자로 sum 콜백 함수를 함수 이름(포인터)으로 전달한다. (괄호를 붙이지 않음) From e97161bb4d107a732d2957b5aa62acd2260fa798 Mon Sep 17 00:00:00 2001 From: syeony Date: Sat, 26 Nov 2022 15:26:37 +0900 Subject: [PATCH 8/9] =?UTF-8?q?Create=203=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "3\354\243\274\354\260\250.md" | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 "3\354\243\274\354\260\250.md" diff --git "a/3\354\243\274\354\260\250.md" "b/3\354\243\274\354\260\250.md" new file mode 100644 index 0000000..70fc48f --- /dev/null +++ "b/3\354\243\274\354\260\250.md" @@ -0,0 +1,11 @@ +# 1. 플러터 개발환경 구축 +참고: https://docs.flutter.dev/get-started/install +플러터 3.3.9버전 깔아줌 +![image](https://user-images.githubusercontent.com/101008357/204075422-99e21c82-c268-4526-86e2-67406e7c3cdb.png) + +안드로이드 스튜디오도 같이 깔아줌 + +![image](https://user-images.githubusercontent.com/101008357/204075390-7f550cf7-78ed-4687-98f0-35703aaae708.png) +안드로이드 스튜디오 기본적인 설정 중에 에러발생 + +과제 : 에러 해결하기 ... From 9cef37e0ff55d78922b9570ad5f0775556621b0e Mon Sep 17 00:00:00 2001 From: syeony Date: Thu, 5 Jan 2023 20:10:26 +0900 Subject: [PATCH 9/9] =?UTF-8?q?Create=205=EC=A3=BC=EC=B0=A8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "5\354\243\274\354\260\250.md" | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 "5\354\243\274\354\260\250.md" diff --git "a/5\354\243\274\354\260\250.md" "b/5\354\243\274\354\260\250.md" new file mode 100644 index 0000000..ccd127e --- /dev/null +++ "b/5\354\243\274\354\260\250.md" @@ -0,0 +1,60 @@ +# 1. 페이지 간 이동 방법, 다른 페이지 만드는 방법 알아보기(Navigator) + +플러터에서는 Navigator을 통해 페이지간 이동을 다룰 수 있다. + +페이지이동을 스택구조로 관리하여 Push와 Pop을 명령을 통해 페이지를 이동한다. + +1. 이전페이지 이동 : 현재 페이지를 스택에서 제거하여 이전 페이지로 이동한다. 스택에 페이지가 남아있다면 해당 페이지가 표시되고, 없다면 앱이 종료된다. +```dart +Navigator.pop(context); +``` +2. 다음페이지 이동 : 현재 페이지를 스택에 남겨놓고 NextPage라는 이름을 가진 페이지로 이동한다. 이 경우 다음 페이지에서 Pop을 하면 현재 페이지로 돌아올 수 있다. +```dart +Navigator.push( + context, MaterialPageRoute(builder: (context) => NextPage()), +); +``` +3. 새로운 페이지로 시작 : 지금까지 모든 페이지를 스택에서 삭제하고 NewPage라는 이름을 가진 페이지로 이동한다. 이 경우 NewPage가 가장 첫 페이지가 된다. +```dart +Navigator.pushNamedAndRemoveUntil(context, '/', (_) => false); +Navigator.push(context, MaterialPageRoute(builder: (context) => NewPage()),); +``` + +# 2. 페이지 간에 데이터 넘겨주는 방법 +1. 데이터 넘겨주기 : Get.to를 이용하여 데이터를 넘겨줄 때는 arguments를 이용한다. +```dart +Get.to(()=>-nextScreen(),arguments:arg1); +``` +2. 여러개의 데이터 넘겨주기 : arguments를 리스트 형식으로 넘겨줄 수 있다. 타입 상관없이 데이터를 넘겨줄 수 있다. +```dart +Get.to(()=>-nextScreen(),arguments:[arg1,arg2]); +``` +3. 넘어온 데이터 사용하기 : 넘어간 페이지에서 Get.arguments를 이용하여 데이터 값들을 받아올 수 있다. +```dart +//리스트 타입일 경우 +String word; +int num; +word=Get.arguments[0]; +num=Get.arguments[1]; + +//하나만 넘겨준 경우 +String word; +word=Get.arguments; +``` + +# 3. 외부 리소스 가져오는 방법 +보통 이미지나 글꼴, pubspec.yaml의 asset에 등록 + +예를 들어 애플리케이션 my_icons이 다음과 같은 디렉토리 구조를 가진 이라는 패키지에 의존한다고 가정 +```dart + .../pubspec.yaml + .../icons/heart.png + .../icons/1.5x/heart.png + .../icons/2.0x/heart.png + ...etc. + ``` +이미지 로드 +```dart + AssetImage('icons/heart.png', package: 'my_icons') + ``` + cupertino_icons : 다양한 아이콘을 원하는 색상과 크기로 사용할 수 있도록 다양한 기본 아이콘들을 제공해준다. 여기서 원하는 아이콘을 선택해서 내려받으면, 아이콘 리소스가 깔끔하게 분리된 dart 코드를 얻을수 있다.