void main() {
String status1 = 'approved';
if(status1 == 'approved'){
print('승인되었습니다.');
}else{
print('반려 또는 대기 중입니다.');
}
}
위 코드를 실행하면 아래와 같은 결과가 나타나며, 문제없이 수행된다.
승인되었습니다.
하지만 할당해준 값이 잘못되었거나 외부로 부터 넘겨받은 값이 한 글자라도 틀렸다면
무조건 반려 또는 대기중이라는 결과가 도출될것이다.
void main() {
String status1 = 'approved';
//만약 아래와 같이 실수했다면?
if(status1 == 'approveb'){
print('승인되었습니다.');
}else{
print('반려 또는 대기 중입니다.');
}
//무조건 else를 타게되며 이런 문제는 종종발생한다.
}
반려 또는 대기 중입니다.
게다가 승인,반려,대기는 어떤값들인지 코멘트도 없다면 버그픽스에 큰 어려움이 있다.
이때 활용할 수 있는것이 바로 enum 타입 상수이다.
프로그램 상단, 그러니깐 자바로 치면 상수를 선언하는 영역, 전역변수 영역에 아래와 같이 선언한다.
enum Status {
approved,
rejected,
pending
}
void main() {
//상수 Status타입의 변수를 선언하여, 상수 approved값을 할당한다.
//(상수는 절대 변하지 않는 값.)
Status status2 = Status.approved;
//변수와 다르게 위험성을 최소화 하여 조건문을 실행할수 있다.
//enum을 사용해서 한정된 옵션을 굉장히 효율적으로 사용할 수 있다.
if(status2 == Status.approved){
print('승인되었습니다.');
}else{
print('반려 또는 대기 중입니다.');
}
//※상수에 포함된 목록들을 아래와 같이 확인해 볼 수도있다.
print(Status.values.toList());
}
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);
}
}
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개의 연산자를 스터디해보았다.
다른 언어들과 다를것이 없어서, 이미 다른언어를 사용중이거나 배워본 사람은 한번 훑허보면 될듯싶다.