플러터 (flutter)

Dart의 기본 (2) - 프로젝트1_1

CreatoMaestro 2023. 6. 11. 23:55
반응형

1. 루프문

루프문은 지정된 코드를 여러 번 돌린다. 

똑같은 코드를 반복해서 실행해야 할 경우 쓴다.

1.1 for

void main() {
  for (int i = 0; i < 5; i++) {
    print("i : $i");
  }
}

for 실행결과
실행 결과

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;
}

한줄 for 실행 결과
실행 결과

 

1.2 while

void main() {
  int number1 = 0;
  while (number1 <= 5) {
    print("number1 : $number1");
    number1++;
  }
  print("Program end");

  return;
}

while 실행 결과
실행 결과

while은 소괄호'()'안에 있는 조건식이 성립한다면 계속해서 중괄호 안에 있는 코드를 실행한다.

조건식이 성립하는 한 무한히 코드를 실행한다. 

 

1.3 do while

void main() {
  int number1 = 10;

  do {
    print("number1 : $number1");
  } while (number1 < 9);

  print("Program end");

  return;
}

do while 실행 결과
실행 결과

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 실행 결과
실행 결과

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;
}

a=2 실행 결과
a = 2인 경우
a=1 실행 결과
a = 1인 경우

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 a = 1
실행 결과 (a = 1)
Switch a = 5
실행결과 (a = 5)

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 함수를 집어넣었다.

위와 같이 함수의 파라미터를 다른 함수의 반환 값으로 주는 것도 가능하다.

 

반응형