1. 루프문
루프문은 지정된 코드를 여러 번 돌린다.
똑같은 코드를 반복해서 실행해야 할 경우 쓴다.
1.1 for
void main() {
for (int i = 0; i < 5; i++) {
print("i : $i");
}
}
Dart의 for문은 다음과 같이 이루어져 있다.
for( 초기화; 조건식; 연산식) {
//실행할 코드
}
초기화에서는 for문 안의 조건식에 사용할 변수를 초기화시킨다.
위 예제에서는 'int i = 0' 부분에 해당한다.
조건식은 for문 안에 있는 코드를 계속 실행할 지 결정하는 코드이다.
조건이 맞다면 중괄호 안에 있는 코드를 계속 실행한다.
연산식은 한 번 실행하고 나서 초기화에서 초기화시킨 변수에 변화를 주는 부분이다.
for문이 돌아가는 순서는 다음과 같다.
1) 초기화를 하고 조건식을 확인한다.
2) 조건식에 부합하면 중괄호 안에 있는 코드를 돌린다.
3) 코드를 다 돌리면 연산식을 실행하고, 조건에 부합하는 지 다시 확인한다.
4) 조건에 부합하면 (2)로 다시 돌아간다. 부합하지 않으면 for 문에서 나온다.
만약 위의 예제처럼 실행해야 할 코드가 한 줄이라면 중괄호 없이 사용해도 무방하다.
void main() {
for (int i = 0; i < 5; i++) print("i : $i");
return;
}
1.2 while
void main() {
int number1 = 0;
while (number1 <= 5) {
print("number1 : $number1");
number1++;
}
print("Program end");
return;
}
while은 소괄호'()'안에 있는 조건식이 성립한다면 계속해서 중괄호 안에 있는 코드를 실행한다.
조건식이 성립하는 한 무한히 코드를 실행한다.
1.3 do while
void main() {
int number1 = 10;
do {
print("number1 : $number1");
} while (number1 < 9);
print("Program end");
return;
}
do-while문은 중괄호 안에 있는 코드를 적어도 한 번 실행한다.
위의 예제를 보면 number1에 저장된 수가 10으로 while의 조건식인 number1 < 9에 성립하지 않는다.
그러나 프로그램을 실행해보면 number1이 print된다.
이는 do-while을 사용했기 때문에 적어도 한 번 실행하기 때문이다.
2. if 와 switch
2.1 if 문
void main() {
int a = 1;
print("Try 1");
if (a == 1) {
print("a is 1");
}
a = 2;
print("\nTry 2");
if (a == 1) {
print("a is 1");
}
return;
}
if문은 소괄호'()'안에 있는 조건 식이 참인지 판단하고, 만약 참이면 중괄호 안에 있는 코드를 실행한다.
위의 예제에서 a = 1로 초기화되었고, 첫 번째 if 문에서 a==1는 참이기 때문에 코드를 실행했다.
a = 2로 바뀐 뒤에는 a==1이 false 이기 때문에 중괄호 안에 있는 코드가 실행되지 않는다.
2.2 if-else
void main() {
int a = 1;
if (a == 1) {
print("a is 1");
} else {
print("a is not 1");
}
return;
}
if-else 문은 소괄호 안에 있는 조건식이 참이면 if 안에 있는 코드를 실행하고, 거짓이면 else 안에 있는 코드를 실행한다.
예제에서 a 안에 1을 넣으면 'a is 1'이라는 문자가 표시되고, 1이 아닌 값을 넣으면 'a is not 1'이라는 문자가 표시된다.
2.3 switch
void main() {
int a = 1;
switch (a) {
case 1:
print("a is 1");
break;
case 2:
print("a is 2");
break;
case 3:
print("a is 3");
break;
default:
print("default");
break;
}
return;
}
switch 문은 if-else를 하나로 합친 구문이라고 생각하면 된다.
소괄호 안에 있는 변수에 있는 값을 보고, 그에 맞는 case를 찾아 코드를 실행한다.
예제에서 a = 1이면 case 1에 해당하는 코드를 실행한다.
default는 어떤 case에도 맞지 않을 경우 실행되는 코드이다.
만약 a = 5라면 default에 해당하는 코드가 실행된다.
3. 함수
함수는 코드 다른 값에 따라 여러 번 코드를 반복해야 할 때 많이 쓰인다.
다음의 코드를 보자
void main() {
// List 선언
List<int> a = [1, 2, 3, 4, 5];
List<int> b = [2, 3, 4, 5, 6];
List<int> c = [3, 4, 5, 6, 7];
int temp1 = 0;
for (int i = 0; i < a.length; i++) {
temp1 = temp1 + a[i];
}
print(temp1);
int temp2 = 0;
for (int i = 0; i < b.length; i++) {
temp2 = temp2 + b[i];
}
print(temp2);
int temp3 = 0;
for (int i = 0; i < c.length; i++) {
temp3 = temp3 + c[i];
}
print(temp3);
}
위의 코드는 list에 있는 요소들의 합을 구하는 코드이다.
List 이름 뒤에 붙은 '.length'는 리스트의 길이를 의미한다.
이에 대해서는 나중에 좀 더 살펴본다.
이 코드는 for문을 이용해 요소를 하나씩 더하여 총 합을 구한다.
때문에 list가 3개 있으면 for문도 3개를 써야 한다.
만약 list가 10개가 있으면? 혹은 20개가 있으면?
똑같은 코드를 여러번 쓰면 굉장히 불편하고 무슨 코드인지 알아보기도 힘들다.
그렇기에 우리는 함수를 써서 이 문제를 해결한다.
위 코드에 함수를 적용하기 전에 함수에 대해 자세히 살펴본다.
//함수의 구조
'반환할 데이터의 타입' '함수 이름' ('파라미터') {
//실행할 코드
return '반환할 값'
}
//Example
int sum (int a, int b) {
return a + b;
}
위 코드는 함수의 구조를 보여준다.
함수의 선언 부분은 반환할 데이터의 타입, 함수 이름, 파라미터로 구성된다.
각각의 부분은 다음과 같은 역할을 한다.
- 반환할 데이터의 타입은 함수가 반환할 값이 어떤 타입인지 알려준다.
- 만약 반환할 값이 없으면 void를 적으면 된다.
- 함수 이름은 함수가 다른 함수와 구분되게 한다.
- 파라미터는 함수가 이용할 데이터를 함수에 전해준다.
밑의 example에서 int가 반환할 값의 타입을 나타내고,
sum이 함수의 이름이다.
이 함수는 int 타입의 a, b 파라미터를 사용한다.
파라미터는 그 타입을 적어주어야 한다.
'return'은 반환할 데이터를 그 뒤에 적는다.
값을 전달하고 함수를 끝낸다.
위의 예제에서는 a + b의 값을 반환했다.
이제 배운 내용을 이용해 앞의 코드를 수정한다.
void main() {
// List 선언
List<int> a = [1, 2, 3, 4, 5];
List<int> b = [2, 3, 4, 5, 6];
List<int> c = [3, 4, 5, 6, 7];
int temp1 = list_sum(a);
int temp2 = list_sum(b);
int temp3 = list_sum(c);
print(temp1);
print(temp2);
print(temp3);
}
//함수
int list_sum(List<int> list) {
int temp = 0;
for (int i = 0; i < list.length; i++) {
temp = temp + list[i];
}
return temp;
}
void main 바깥에 존재하는 int로 시작하는 코드가 함수이다.
이 함수는 int 타입의 데이터를 반환하고, 이름은 'list_sum'이다.
파라미터로는 List<int>타입의 데이터를 받는다.
중괄호 안에 코드를 적어주고, temp를 반환한다.
함수를 사용함으로써 코드가 처음보다 보기 쉬워졌다.
더욱 간단하게 하려면 다음과 같이 할 수도 있다.
void main() {
// List 선언
List<int> a = [1, 2, 3, 4, 5];
List<int> b = [2, 3, 4, 5, 6];
List<int> c = [3, 4, 5, 6, 7];
print(list_sum(a));
print(list_sum(b));
print(list_sum(c));
}
int list_sum(List<int> list) {
int temp = 0;
for (int i = 0; i < list.length; i++) {
temp = temp + list[i];
}
return temp;
}
위의 예제에서는 print라는 함수에 list_sum 함수를 집어넣었다.
위와 같이 함수의 파라미터를 다른 함수의 반환 값으로 주는 것도 가능하다.
'플러터 (flutter)' 카테고리의 다른 글
Dart의 동기와 비동기 코딩 (0) | 2023.06.16 |
---|---|
Dart 클래스 (2) - 프로젝트1_1 (0) | 2023.06.16 |
Dart Class - 프로젝트1_1 (0) | 2023.06.14 |
Dart의 기본 (1) - 프로젝트1_1 (2) | 2023.06.09 |
프로젝트 1. 목표 및 일정 관리 어플 초기 버전 제작 (0) | 2023.06.07 |