[Flutter] 연산자와 제어문

kk_0128_·2024년 1월 21일
0

플러터

목록 보기
4/4
post-thumbnail

1. 연산자

  • 연산자를 사용하면 애플리케이션의 동작과 데이터 처리를 조작할 수 있다.
  • 플러터에서는 산술 연산자, 증감 연산자, 논리 연산자, null관련 연산자, 비교 연산자, 논리 연산자 등이 있다.



1-1. 산술 연산자


  • 기본 산수 기능을 제공한다.
  • +, -, *, /, % 와 같은 산술 연산자를 사용하여 숫자의 덧셈, 뺄셈, 곱셈, 나눗셈을 수행할 수 있다.
void main() {
  double number = 2;

  print(number + 2); // number 값에 2를 더한 값 출력
  print(number - 2);
  print(number * 2);
  print(number / 2); // 2로 나눈 몫을 출력
  print(number % 3); // 3으로 나눈 나머지 출력
}



1-2. 증감 연산자


  • 변수의 값을 1씩 증가시키거나 감소시키는 연산자이다. 플러터에서는 전위 증감 연산자와 후위 증감 연산자를 지원한다.
  • 증감 연산자는 주로 반복문에서 사용되어 변수의 값을 조작하거나 반복 횟수를 제어하는 데 유용하다.
  • C 나 Java와는 조금 다르게 작동한다.
  • 전위 증감 연산자 : ++변수, --변수 를 사용하며, 연산자에 따라 값을 증가 또는 감소 시킨 후 값을 반환한다.
  • 후위 증감 연산자 : 변수++, 변수-- 를 사용하며, 값을 먼저 반환하고 연산자에 따라 값을 증가 또는 감소 시킨다.

* 참고

  • 이해할 수 없지만 증감 연산자의 경우 Java 와 다르게 print(++number); 시 ( )의 증감 값을 변수에 저장한다.
    (final 이나 const 로 선언한 변수에 증감 연산자 사용이 불가능하다.)
void main() {
  int x = 10;

  print(x);   // 10
  print(++x); // x 에 1만큼 증가한 값을 변수에 저장 후 출력
  print(x++); // x 를 출력 후 1만큼 증가한 값을 변수에 저장
  print(x);
}



1-3. 논리 연산자


  • 조건문이나 반복문에서 조건을 결합하거나 부정하는 데 사용한다.
  • AND 연산자 (&&): 모든 조건이 모두 true일 때만 전체 조건이 true가 된다.
void main() {
  bool result1 = 12 > 10 && 1 > 0;
  print(result1);

  bool result2 = 12 < 10 && 1 > 0;
  print(result2);
}

  • OR 연산자 (||): 조건 중 하나 이상이 true일 때 전체 조건이 true 가 된다.
void main() {
  bool condition1 = true;
  bool condition2 = false;
  bool result = condition1 || condition2;
  print(result);
}

  • NOT 연산자 (!): 조건을 부정하여 반대의 값을 반환한다.
void main() {
  bool condition = true;
  bool result = !condition;
  print(result);
}



1-4. null 관련 연산자


  • null은 값이 존재하지 않음을 뜻한다.
  • 다트에서는 변수 타입이 null 값을 가질 수 있는지의 여부를 직접 지정해줘야 한다.
  • 기존의 타입 키워드를 그대로 사용하면 null 값이 저장될 수 없다.
  • 타입 뒤에 '?' 를 추가하면 Null 값을 가질 수 있다.
void main() {
  double? number;	  // 자동으로 null 값 지정
  print(number);

  number ??= 3;     // ??를 사용하면 기존 값이 null일 때만 저장
  print(number);

  number ??= 4;     // null이 아니므로 3이 유지됨
  print(number);
}

경고 메시지는 number 변수의 타입이 nullable하지 않은 double이기 때문에 null 병합 할당 연산자가 올바르게 동작하지 않는다는 것을 알려주고 있다.



1-5. 비교 연산자


값 비교 연산자

  • 값 비교 연산자는 두 값의 내용을 비교하여 결과를 반환한다.

    • 큰 비교 연산자 (>): 왼쪽 피연산자가 오른쪽 피연산자보다 큰지 비교한다. 왼쪽 값이 크면 true를 반환하고, 그렇지 않으면 false를 반환한다.
    • 작은 비교 연산자 (<): 왼쪽 피연산자가 오른쪽 피연산자보다 작은지 비교한다. 왼쪽 값이 작으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
    • 크거나 같은 비교 연산자 (>=): 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같은지 비교한다. 왼쪽 값이 크거나 같으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
    • 작거나 같은 비교 연산자 (<=): 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같은지 비교한다. 왼쪽 값이 작거나 같으면 true를 반환하고, 그렇지 않으면 false를 반환한다.
    • 동등 비교 연산자 (==): 두 값이 동일한지 비교한다. 값이 같으면 true를 반환하고, 값이 다르면 false를 반환한다.
    • 부등 비교 연산자 (!=): 두 값이 다른지 비교한다. 값이 다르면 true를 반환하고, 값이 같으면 false를 반환한다.
      void main() {
        int num1 = 1;
        int num2 = 2;
    
        print(num1 > num2);
        print(num1 < num2);
        print(num1 >= num2);
        print(num1 <= num2);
        print(num1 == num2);
        print(num1 != num2);
      }


타입 비교 연산자

  • is 키워드를 사용하면 변수의 타입을 비교할 수 있다.

    • 타입 비교 연산자 (is): 변수의 타입을 비교하여 결과를 반환한다. 왼쪽 피연산자가 오른쪽 피연산자의 타입과 일치하면 true를 반환하고, 일치하지 않으면 false를 반환한다.
    • 타입 비교 부정 연산자 (is!): 변수의 타입을 비교하여 결과를 반환한다. 왼쪽 피연산자가 오른쪽 피연산자의 타입과 일치하지 않으면 true를 반환하고, 일치하면 false를 반환한다.
     void main() {
        int num1 = 1;
    
        print(num1 is int);
        print(num1 is String);
        print(num1 is! int);
        print(num1 is! String);
    }


2. 제어문


  • 연산자를 사용하면 애플리케이션의 동작과 데이터 처리를 조작할 수 있다.
  • 플러터에서는 산술 연산자, 증감 연산자, 논리 연산자, null관련 연산자, 비교 연산자, 논리 연산자 등이 있다.



2-1. if else문


  • 원하는 조건을 기준으로 다른 코드를 실행하고 싶을 때 사용한다.
  • if문, if else문, else문의 순서대로 괄호 안에 작성한 조건이 참이면 해당 조건의 코드 블록이 실행된다.

if 문의 기본구조

if (조건식) {
    // 조건식이 참인 경우 실행할 코드
} else {
    // 조건식이 거짓인 경우 실행할 코드
}

응용 구조

if (조건식) {
    // 조건식이 참인 경우 실행할 코드
} else if{
    // 조건식이 참인 경우 실행할 코드
} else {
    // 조건식이 거짓일 경우 실행할 코드
}
void main() {
  int num1 = 1;
  int num2 = -1;
  int num3 = 0;

  if (num1 > 0){
    print('num1은 양수입니다.');
  } else if (num1 < 0){
    print('num1은 음수입니다.');
  } else {
    print('num1은 0 입니다.');
  }

  if (num2 > 0){
    print('num2은 양수입니다.');
  } else if (num2 < 0){
    print('num2은 음수입니다.');
  } else {
    print('num2은 0 입니다.');
  }

  if (num3 > 0){
    print('num3은 양수입니다.');
  } else if (num1 < 0){
    print('num3은 음수입니다.');
  } else {
    print('num3은 0 입니다.');
  }
}



2-2. switch case문


  • 조건에 따라 다양한 동작을 수행할 때 사용한다.
  • 여러 경우를 처리해야 할 때 if-else 문 보다 가독성을 높일 수 있다.
  • 변수의 값에 따라 다른 동작을 수행하는 경우에 유용하다.
  • enum 과 함께 사용하면 유용하다.
  • 주어진 변수 또는 표현식의 값을 평가하고, 값에 따라 조건에 맞는 case 블록을 수행한다.
  • break 키워드를 사용하면 switch 문 밖으로 나갈 수 있다.

switch 문의 기본구조

if (조건식) {
    // 조건식이 참인 경우 실행할 코드
} else {
    // 조건식이 거짓인 경우 실행할 코드
}
enum Status {
  approved,
  pending,
  rejected,
}

void main() {
  Status status = Status.approved;

  switch (status){
    case Status.approved:
      print('승인 상태');
      break;
    case Status.pending:
      print('대기 상태');
      break;
    case Status.rejected:
      print('거절 상태');
      break;
    default:
      print('알 수 없음');
  }
  print(Status.values);   //Enum의 모든 수를 리스트로 반환
}



2-3. for문


  • 특정 조건을 만족하는 동한 작업을 여러 번 반복해서 실행할 때 사용한다.
  • for 문은 초기화 구문을 실행한 후에 조건식을 평가한다.
  • 초기화: 반복문이 시작될 때 한 번 실행되는 초기화 구문이며, 반복 변수의 초기값을 설정한다.
  • 조건식: 반복문이 실행될 조건을 지정하는 부분이며, 조건식이 참인 경우 코드 블록이 실행, 거짓일 경우 종료된다.
  • 증감식: 반복문이 한 번 실행된 후에 반복 변수를 증가 또는 감소시키는 구문이며, 반복 변수를 업데이트 하는 역할을 한다.

for 문의 기본구조

for (초기화; 조건식; 증감식) {
    // 반복적으로 실행할 코드
}
void main() {
  for (var i = 1; i <= 5; i++) {
    print(i);
  }
}

다트 언어에서는 For in 패턴의 for문도 제공한다.
List의 모든 값을 순회할 때 사용한다.

void main() {
 List<int> numberlist = [1,2,3];

for (int num in numberlist){
    print(num);
  }
}



2-4. while과 do while문


  • 반복적인 작업을 실행할 때 사용한다.
  • 두 구문은 조건식을 기반으로 코드 블록을 반복적으로 실행한다.
  • while문은 반복문 진입 전에 조건을 평가한다.
  • do while문은 반복문 진입 후에 조건을 평가한다.

while 문의 기본구조

while (조건식) {
// 조건식이 참인 동안 실행할 코드
}
void main() {
  int total = 1;

  while (total < 10) {
    total += 1;
  }
  print(total);
}

do while 문의 기본구조

do {
    // 실행할 코드
} while (조건식);
void main() {
  int total = 0;

  do {
    total += 1;
  } while(total < 10);

  print(total);
}

profile
공부 노트 겸 기록장

0개의 댓글