Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
158 changes: 158 additions & 0 deletions 1주차.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# 1. 데이터 타입
c와 같다 = int, double

## String
문자열
스트링의 맨앞은 S 대문자입니다.

큰따옴표 작은따옴표 둘다 사용가능이지만 작은따옴표가 표준.

## bool
참 거짓을 나타내는 불리언 타입

## num
못보던 타입.

int와 double을 포함하는 타입.

num n1 = 44;

num n2 = 23.12;

int, double로 선언한 변수를 num 타입에 담을 수 있습니다.

## var
type을 직접 명시하지 않고, var로 대체할 수 있음

## const, final
값이 변하지 않는 경우는 상수 사용. 선언시 final을 제일 앞에 붙이면 값이 수정되지 않음. 타입 생략 가능.

# 2. 변수와 연산자
c와 비슷. 다른점만 살펴보면

~/ : 몫

문자열 결합 가능 ("a" + "b")

# 3. 반복문과 조건문
## 반복문
```dart
for (var i = 0; i < 10 ; i++){
print(i);
}
```
## 조건문

삼항연산
[조건] ? [참일 때] : [거짓일 때]
```dart
var number = a%2 ? a++ : a--
```
이 외에 c와 비슷하여 pass

# 4. 배열(리스트)과 맵
```dart
//1-1 크기고정리스트
var my_list = new List(3); // 크기 3짜리 리스트를 만듦
var your_list = List<int>.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<int>.filled(5, 0, growable: true);

//1-3 리스트 원소접근
var my_list5 = List<int>.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 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();
}
```

## 상속
클래스는 다른 클래스를 상속(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와 다르게

주석 시작 : /**

주석 끝 : **/

으로 나타냄

128 changes: 128 additions & 0 deletions 2주차.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# 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 (extension name) on (type) {(member definition)*}

```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>{
T getTest(T i);
void setTest(T i);
}
```
기본적으로 타입마다 지정해야 될 수 있었던 상황을 제네릭으로 코드의 중복을 막을 수 있다.
```dart
void main() {
var list1 = <int>[1,2,3];
var list2 = List<int>();
var map1 = <int,int>{
1 : 1,
2 : 2,
3 : 3
};
var map2 = Map<int,int>();
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 콜백 함수를 함수 이름(포인터)으로 전달한다. (괄호를 붙이지 않음)
11 changes: 11 additions & 0 deletions 3주차.md
Original file line number Diff line number Diff line change
@@ -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)
안드로이드 스튜디오 기본적인 설정 중에 에러발생

과제 : 에러 해결하기 ...
60 changes: 60 additions & 0 deletions 5주차.md
Original file line number Diff line number Diff line change
@@ -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 코드를 얻을수 있다.
3 changes: 3 additions & 0 deletions print hello world
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
void main() {
print("Hello, world!");
}