반응형

늘 그렇듯이 글 시작이 허전해서 주워온 이미지

이번 스터디는 다른 언어들에도 있는 반복문.

For, While, Do While 반복문에 대해서 다뤄보려 한다.

 

이제와서 얘기하는거지만, 이 Dart 포스팅들은 강의 내용을 보고 나만의 정리이기 때문에

혹시나 공부용으로 보시는 분들은 헷갈릴 수 있다.

 

아무것도 모르는 왕초보가 진짜 제대로된 강의를 듣고자 한다면, 또는 다른언어를 사용중이지만

Dart를 배워보고자 하는 개발자라면 내가 정리한 포스팅보다 아래 포스팅에 써둔 추천강의(유튜브)를

보는게 더 이득일거라 생각된다. (하단 링크첨부)

 

Flutter개발을 위한 Dart언어 왕초보 강의

Flutter를 이용한 앱개발을 위해 Dart강의를 찾던 중 유튜브에서 기가막힌 강의를 찾아냈다. (혹시 Dart언어에 대해 빠르고 간략하게 기초를 쌓고 싶으신 분에게 추천드림..) 정말 마음에 드는점은

masswhale.tistory.com


그럼 스터디 시작.

단순하게 0부터 9까지 출력하는 반복문을 만들어보고자 한다.

여태 스터디한 내용들을 전부 기억한다면 아래 for구문도 이해할 수 있다.

void main() {
  for(int i=0; i <10;i++){
      print(i);
  }
  
}

상세설명

1. for는 괄호안에 조건에 따라 중괄호 영역에 있는 구문을 수행하는 반복문이다.

2. 소괄호안에 int i라는 변수를 선언과 동시에 초기화한다(기본값 선언)

3. 변수 i는 10을 초과할 수 없다.

4. 변수i는 10을 초과하기 전까지 증가한다.

5. 소괄호안에 있는 조건이 맞지 않을때까지 중괄호 안의 구문은 실행된다.

 

for라는 반복문을 사용하기 위해선 위와같이 작성해야 한다.

그러니깐 위의 소스는 i가 0부터 9까지 1씩 증가하면서 변수 i를 print하라는 반복문이다.

실행결과는 아래와 같다.

0
1
2
3
4
5
6
7
8
9

단순한거 같지만, 처음에 쓰려면 헷갈릴 수 있다.

방법은 자주 사용하는수 밖에.


이번에는 List타입의 변수를 선언하여 연산해보자.

아래와 같은 List타입의 변수에 값들이 있다고 하자.

  List numbers = [
    1,
    1,
    2,
    3,
    5,
    8
  ];

반복문을 모르는 상태에서 numbers의 값들을 모두 더하라고 하면 아마 아래와 같이 표현할 것이다.

int total = numbers[0] + numbers[1] + numbers[2]....

6개만 들어있어서 그렇지 수십,수백개가 들어있으면....어휴..

하지만 for라는 반복문을 사용하면 , 보다 간단하게 numbers의 값들을 합산할 수 있다.

void main() {
    List numbers = [
    1,
    1,
    2,
    3,
    5,
    8
  ];
  
  int number = 0;
  
  for(int i= 0; i < numbers.length; i++){
    //print(numbers[i]);
    number += numbers[i];
  }
  
  print(number);
  
}

i값을 List의 Index로 활용한 것이며, 시작은 반드시 0이라는 것을 잊지말자.

헷갈리면 아래 포스팅 참고.

 

Dart언어공부-07.List 타입

지난 스터디에서 공부해본 변수선언 타입들과는(var, dynamic, String, int) 다른 형태인 List에 대해서 알아보고자 한다. (아래 소스 첨부함) 혹시나..이 글을 읽고 공부를 하고 있다면, 아래 첨부한 소

masswhale.tistory.com


다시 돌아와서, 위 반복문의 실행결과 값을 보면 간단한 반복문으로 원하는 합산결과가 나타났음을 확인할 수 있다.

20

그런데 for문은 위와 같이 사용할 수 있지만, 다른방법으로 Index를 활용하지 않고도 내부의 값들을 합산할수 있다.

void main() {
    List numbers = [
    1,
    1,
    2,
    3,
    5,
    8
  ];
  
  int total = 0;
  
  for(int _number in numbers){
    total += _number;
  }
  
  print(total);
  
}

바로 numbers에 들어있는 값들을 _number라는 변수에 할당하고, 다음값으로 넘어가면서 += 연산을 하여 구할수 있다.

실행결과는 같지만, Index를 활용하지 않고 값만 가지고 활용할 때 사용할 수 있다.

20

이번에는 while과 do while반복문에 대해서 알아보자.

while은 for보다 간단하게 true false조건을 넣어 수행시킬 수 있다.

void main() {
  int numbers1 = 10;
  
  while(numbers1 < 20){
    print(numbers1);
    numbers1 ++;
  }
}

while소괄호 안 numbers1이라는 변수가 20보다 작다면 중괄호 영역에 있는 기능이 수행된다.

10
11
12
13
14
15
16
17
18
19

조건에서 20미만일때만 동작하도록 정의되어 있기때문에 19까지만 출력된다.

만약 위에서 numbers1++가 없다면, numbers1의 값은 증가하지 않고 계속 10일것이며

조건에서는 numbers1이 20이 되지 않기때문에 무한히 기능을 수행하도록 한다. = 무한루프

for문도 마찬가지지만, while문에서 종종하는 실수들이니, 주의해서 사용하자.


주어진 조건이 만족하는 내에서 동작하는 while을 알아봤다면 이번에는 선 실행 후, 조건을 체크하는 반복문인

do while에 대해 알아보자.

바로 소스로.

void main() {
  int numbers2 = 10;
  
  do{
    print(numbers2);
    numbers2 ++;
  }while(numbers2 < 20);
}

numbers2라는 변수에 10이 할당되어 있다. do영역에서 먼저 print한 후, 1을 증가시킨 다음에 20미만인지를 

체크한다. 실행결과는 아래와 같다.

10
11
12
13
14
15
16
17
18
19

단순히 여기까지만 봤을때, while과 do while의 차이를 잘 못 느낄수도 있다.

하지만 while과 do while은 분명히 다르다. 그에 대한 증명은 아래 소스로 확인해보자.

void main() {
  
  int numbers1 = 10;
  
  while(num < 10){
    print(num);
    numbers1 ++;
  }
  //위 코드는 실행되지 않는다. 왜냐면 이미 시작조건인 10미만일때만 실행되기 때문이다.
  
  do{
    print(num);
    num ++;
  }while(num < 10);
  
  //10이 정상적으로 출력된다. do while에서는 먼저 수행 후, 조건만족여부를 체크하기 때문이다.
  //이로써 기능 수행 전 조건확인, 기능 수행 후 조건확인이 증명된다.
}

실행결과

10

마지막으로 break와 continue에 대한 간단한 정리.

void main() {
  
  int num2 = 10;
  
  //1. num2를 1씩 증가시키면서 20미만이면 기능을 수행하는 while문이 있다.
  while(num2 < 20){
    print(num2);
    num2 ++;
    
    //2. 하지만, 이 변수 num2가 수행도중 15값이 되면?
    if(num2 == 15){
      //3. 더이상의 반복문 수행을 멈추고 탈출한다.  를 의미한다.
      break;
    }
  }
  //기능 실행시 15까지 출력 후, 그 이후 값은 출력하지 않고 나오는것을 볼수 있다.
  
  //for에서도 가능하다.
  //1. while문과 마찬가지로 조건을 부여한 후
  for(int x = 0; x < 10; x++){        
    //2. x의 값이 1씩 증가하면서 5가 되는 순간
    if(x == 5){
      //3. 해당 반복문을 탈출한다. 를 의미한다.
      break;
    }
    print(x);
  }
  
  //continue?
  //continue를 쓰면 보통은 기능 수행 후 이어가는것이라고 생각하는 사람들이 있다.
  //아래 변수x가 1씩증가될때마다 print하는 반복문을 살펴보자.
  for(int x = 0; x < 10; x++){        
    //1. 변수x의 값이 5가 되는 순간, 반복문은 탈출하지 않지만 이후 기능은 수행하지않고
    // 다음 반복단계로 넘어간다.
    //따라서 실제 수행해보면 0부터 9까지 출력은 되지만, 값 5만 출력되지 않은것을 확인할 수 있다.
    if(x == 5){
      continue;
    }
    print(x);
  }
  
}

 

실행결과

10
11
12
13
14
0
1
2
3
4
0
1
2
3
4
6
7
8
9

 

강의를 들으면 이미 아는 내용이라서 가볍게 넘겼던 것들을 블로그로 정리하려니깐 

생각보다 양도 많아지고, 시간도 오래 걸리는 듯 하다.

하지만 기억에는 잘 남을듯?

반응형
반응형

구글 검색해서 주워왔는데 문제될꺼 없겠지?

자바, C, 스크립트 모든 언어에 반드시 있는 조건문.

Dart에도 조건문이 존재한다. 이번에는 조건문 If와 Switch에 대해 다뤄보려 한다.

주어진 조건에 대해 결정을 내리는 역할을 하며, 결정된 내용(정의된 기능)을 수행토록 한다.

소스로 알아보도록 하고, 준비물인 웹컴파일러는 아래 포스팅에 포함되어 있다.

 

Dart언어공부-01.Hello World

Flutter가 요즘 핫하게 올라오면서, Flutter의 주력 언어(다른언어도 가능함)인 Dart를 공부해보려 한다. 간단하게 Flutter란? Google에서 개발하고 Mobile World Congress 2018에서 최초 베타..

masswhale.tistory.com


1. if(조건){수행할 내용}

void main() {
  int number=20;
  
  //number라는 변수를 4로 나누었을때, 나머지가 0인지를 if괄호안에 조건을 
  //작성한다. true가 반환되면서 중괄호 안의 기능이 수행된다.
  if(number % 4 == 0){
    print('4의배수 맞음');
  }  
}

실행결과

4의배수 맞음

2. if(조건){수행할 내용}else if(다른 조건){수행할 내용}

void main() {
  int number=20;
  
  //number라는 변수를 4로 나누었을때, 나머지가 0인지를 if괄호안에 조건을 
  //작성한다. true가 반환되면서 중괄호 안의 기능이 수행된다.
  if(number % 4 == 0){
    print('4의배수 맞음');
  }  
  
  //첫번째 조건이 맞지 않을 수도 있을때, 추가적인 조건을 질의할 수 있다.
  //말로 풀자면, 2곱하기2는 5야? 아니야? 그럼 2곱하기2는 4야?? 이런식으로 되묻는다고 생각하자.
  //위의 예제를 이어서 작성.
  if(number % 4 == 1){
    print('나머지는 1');
  }else if(number % 4 == 0){
    print('4의배수 맞음');
  }
}

실행결과

4의배수 맞음
4의배수 맞음

3. if(조건){수행할 내용}else if(다른 조건){수행할 내용}else{위 조건들에 해당안될때 수행할 내용}

void main() {
  int numbers=21;
  int _number=21;
  
  //아래 소스로 얘기하고 싶은건, 첫번째 조건이 아닌 경우 다음조건으로 이동한다는 점과
  //만족하는 조건이 찾아졌을땐, 그 다음 로직(if나 else)을 수행하지않는다.
  //또한 else에서는 if, else if의 조건들이 하나도 만족하지 않을때만 수행한다.
  if(numbers % 4 == 0){
    print('4의배수 맞음');
  }else if(numbers % 4 == 1){
    print('나머지는 1');
  }else if(_number % 4 == 2){
    print('나머지는2');    
  }else{
    print('어떠한 조건에도 해당안됨.');
  }
  
  //조건을 단순하게 예를들어 도출될 결과값이 두개밖에 없다면, 
  //if, else if가 아닌
  //if else로 사용해도 된다.
}

 

실행결과

나머지는 1

4. Switch

기본적으로 if문과 성격은 같다. 하지만 주어진 조건이 성립할때, 기능이 수행되지만

if else if...처럼 다중 조건에서는 사용에 불편함이 있다. 대신 속도는 if보다 빠르다.

void main() {
  int sNumber=20;
  switch(sNumber % 4){
    case 0 : 
      print('4의 배수입니다.');
      break;
    case 1:
      print('나머지가 1입니다');
      break;
    case 2 : 
      print('나머지가 2');
      break;
    default : 
      print('해당되는 값 없음');
      break;
  }
  
  //설명에도 써놓았지만, 위에서의 조건은 4로 나눈 나머지의 값만 가지고
  //찾아가지만, 3으로,2로 등 여러값으로 나누었을때의 대한 다중 조건은 사용할 수가 없다. 
  if(sNumber % 4 == 0){
    print('4의배수입니다.');
  }else if(sNumber % 3 ==0){
    print('3의배수입니다.');
  }else if(sNumber % 2 ==0){
    print('2의배수입니다.');
   }
  
  
}

실행결과

4의 배수입니다.
4의배수입니다.

 

Dart의 조건문 if, Switch 스터디 끝.

(다시 기초부터 훑으려니깐 지루하네....그냥 건너뛸까...)

 

반응형
반응형

이번 스터디에서는 연산자를 알아보려고 한다.

우리가 익히 알고 있는 사칙연산(+,-,*,/)와 프로그램에서 사용하는 대소(크기)비교,

논리연산 등을 다뤄보려 한다.

자세한건 소스를 실행하면서 알아보고, 준비물인 웹컴파일러는 아래 포스팅에 포함되어 있다.

 

Dart언어공부-01.Hello World

Flutter가 요즘 핫하게 올라오면서, Flutter의 주력 언어(다른언어도 가능함)인 Dart를 공부해보려 한다. 간단하게 Flutter란? Google에서 개발하고 Mobile World Congress 2018에서 최초 베타..

masswhale.tistory.com


1. 기본 사칙연산

void main() {
	//기본 사칙연산
    //int(정수형)타입의 number라는 이름의 변수 선언 및 2라는 값으로 초기화
    int number = 2;
    
    //사칙연산을 실행하여 결과를 알아보자
    print(number + 2);
    print(number - 2);
    print(number * 2);
    print(number / 2);

}

실행결과

4
0
4
1

2. 사칙연산 중 나누기에서는 몫만 존재하는 것이 아닌, 나머지도 존재한다. 

void main() {
	int number = 2;
    //해당 변수를 특정값으로 나누었을때, 나머지를 알고싶다면 % 연산자(기호)를 사용한다.
    //결과값이 0이라면 나눈값의 배수인것을 확인할 수 있다.
    print(number % 2);
    print(number % 3);
}

실행결과

0
2

3. 증가/감소 연산

void main() {
	int number = 2;
    
    //선언된 변수 뒤에 ++연산을 사용하여 값을 증가시킨다.
    //1씩증가 및 감소하며, String 타입의 변수에는 적용되지 않는다.
    
    //증가시키려 할때.
    number++;
    print(number);

	//감소시키려 할때.
    number--;
    print(number);

}

실행결과

3
2

4. null값인 경우 처리(표현)방법

void main(){
	int number2;
    
    //number2 라는 int타입의 변수 선언 후, 출력하면 숫자값의 선언(초기화)이 되지 않았기때문에
    //null이라는 값이 출력된다.    
    print(number2);
    
    //하지만 아래와 같은 표현방법으로 null인경우 4로 할당하도록 하면
    number2 ??= 4;
    
    //지정한 4가 추출된다.
    print(number2);
    
}

실행결과

null
4

5. 이미 할당(초기화)된 값에 추가로 사칙연산하는 방법들

void main(){
	int number4 = 2;
    //number4라는 변수에 2라는 값을 할당 후,
    //1을 더하는 방법은 아래와 같은 방법이 있다.    
    number4 = 2+1;
    
    //하지만 아래 연산기호를 이용하여 표현할수도 있다.
    //기존 변수에 1을 더하여 할당한다는 의미이다.
    number4 += 1;
    
    print(number4);
    
    //뺄셈을 할땐, 더하기기호와 반대로 사용하면 된다.
    
    number4 -= 1;
    print(number4);
    
    //알아본 김에 곱셈, 나눗셈도 알아보자.
    //같은 방식으로 연산자(기호)만 변경하여, 작성한다.
    number4 *= 2;
    print(number4);
    
    //아래는 나눗셈을 할때인데, 위와같이 단순하게 number4 /=2; 라 할경우엔 오류가 발생한다.
    //나눗셈은 몫과 나머지를 발생시키기 때문에 정수형인 int로 처리할수 없도록
    //Dart에서 정해져있다. 따라서 나눗셈 연산을 시도할땐, int가 아닌 범위가 더 큰double로
    //선언하여 처리해야 한다.
    //편의상 number44라는 변수를 사용하여 예제를 보자
    
    double number44 = 2;
    number44 /= 2;
    print(number44);
}

실행결과

4
3
6
1

6. 주어진 값을 비교하는 연산자

주어진 1개 이상의 값을 연산하여 true인지 false인지 boolean형 값을 구해보자

void main(){
	int _number1 = 1;
    int _number2 = 2;
    
    //ture false검증
    //대,소 비교 연산을 통해 두개의 값이 맞는지 틀린지 값을 구해낸다.  > , <
    //true or false로 표현된다.
    print(_number1 < _number2);
    print(_number1 > _number2);
    
    //또한 초과,미만 표현이 아닌 이상,이하 표현도 가능하다.   >= ,  <= 
    //이퀄스 기호를 추가하여 작성한다.
    print(_number1 <= _number2);
    print(_number1 >= _number2);
    
    
    //대,소만 있는것이 아닌 '같다'와 '같지 않다'도 확인할 수 있다.  ==,  !=
    print(_number1 == _number2);
    print(_number1 != _number2);
    
}

실행결과

true
false
true
false
false
true

7. 타입비교

이번에는 선언된 변수가 특정타입이 맞는지 검증하는 연산자를 사용해보자

void main(){
  int _numbers1 = 1;
  //int형으로 선언된 _numbers1의 타입을 확인하는 연산자를 사용해보자.
  //맞는지, 아닌지를 묻는 연산이기 때문에 true or false값을 반환하며
  //자료형 별로 질의를 할수 있다. 
  //변수 is 타입질의 형태로 사용한다.
  
  print(_numbers1 is int);
  print(_numbers1 is String);
  print(_numbers1 is bool);
  //맞는지만 물어볼수 있는것이 아니라, 맞지않은지도 느낌표(!)를 사용하여 질의할수 있다.
  print(_numbers1 is! String);
}

실행결과

true
false
false
true

8. 논리비교

약간 헷갈릴 수 있는데, 6번에서 사용한 대소비교 등이 두개이상이 합쳐졌다고 할수있다.

void main() {
  
  //&&연산자를 기준으로 좌우측의 두 조건이 만족할때 true가 표현된다.
  result = 12 > 10 && 1 < 0;
  print(result);  
  
  //위 &&연산자와는 반대로 || 연산자는 좌우 둘중하나의 조건만 맞으면 true가 표현된다.
  result = 12 > 10 || 1 < 0;
  print(result);  
  
}

실행결과

false
true

총 8개의 연산자를 스터디해보았다.

다른 언어들과 다를것이 없어서, 이미 다른언어를 사용중이거나 배워본 사람은 한번 훑허보면 될듯싶다. 

Dart 연산자 스터디 끝.

반응형
반응형

fial과 const의 기본 개념은 한번 선언된 값을 변경되지 못하게 해달라는 의미를 가진다. 

  //일반적으로 우리가 사용할땐, 문자열 변수를 선언 후
  String name = '이름';
  
  //이렇게 값을 변경(재할당)하여 사용할 수 있다.
  name = '이름2';

 

  //하지만 선언 후, 할당한 값을 변경하지 못하게 하고 싶을 떈, 앞에 final을 붙여서 사용한다.
  final String name = '이름';
  
  //const도 마찬가지로 값을 변경하지 못하는 final과 같은 의미를 가진다.
  const String name = '이름';

 

그런데 여기서 둘다 값을 변경하지 못하지만 어떤 차이가 있는지가 중요하다.

const의 경우 컴파일타임에 저장된다는 점과, final은 런타임에 지정된다는 점이 차이가 있다.

프로그래밍 언어가 기계어로 번역되어 실행되는 과정을 컴파일이라 하고, 이 과정을 컴파일 타임이라한다.

이 컴파일된 프로그램이 실행되는 과정이 런타임이라 한다. 

 

무슨 의미인지는 아래 예제를 보면서 확인해 보자.

  //실행한 결과값을 보면, 첫번째 라인의 값과 두번쨰 라인의 값이 1초정도 차이가 나는것을 확인할 수 있다.
  //const는 첫번째 print의 값이고, final은 두번째 print의 값으로 예제를 들수 있는데,
  //프로그램이 만들어 지기 전 컴파일되는 과정에서 값이 지정되어 버리는것은 첫번째 print. 즉 const이며
  //컴파일 완료 후, 프로그램이 만들어진 후 실행되자마자 값이 지정되는 것이 두번쨰 print. 즉 final이다.
  DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

실제 final과 const를 넣어서 예제를 다시 살펴보자.

  //첫번째 print와 두번째 print의 값이 위 예제와 동일하게 1초간의 딜레이가 발생한것을 확인할 수 있다.
  //이는 당연히 컴파일이 완료된 후, 런타임(프로그램 시작!)시에 값이 할당되어 출력되기 때문이다.
  final DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      final DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

반대로 const로 변경하면, 라인 오류가 발생한다. 

컴파일시에 DateTime.now()를 컴퓨터가 알수 없기 때문이다.

그래서 const 사용시엔 값을 반드시 지정해주어야 한다. 

  const DateTime now = DateTime.now();
  
  print(now);
  
  Future.delayed(
    Duration(milliseconds : 1000),
    (){
      const DateTime now2 = DateTime.now();
      print(now2);
    }
    
  );

보통은 코딩시엔 final을 많이 사용한다.

final과 const에 대해 이런 차이가 있다 정도만 알고있으면 된다. 

 

오늘 스터디 끝.

반응형

+ Recent posts