[FLUS 스터디 1주차] Dart 기초 - Operators(연산자)

sucream·2022년 8월 31일
1

flutter-study

목록 보기
2/17

[FLUS 스터디 1주차] Dart 기초 - Operators(연산자)

  • 금주부터 Flutter 스터디를 시작하게 되었다.
  • 본 스터디는 자기주도적으로 진행하는 스터디기 때문에, 내가 공부한 내용을 잘 정리하는게 가장 중요할 것 같다.
  • 본 스터디를 하면서 가장 중요하게 생각하는 것은 너무 디테일하게 모든 내용을 다 쓰는게 아니라, 기본적인 내용 + 알고 있으면 유용하다고 생각되는 내용을 정리하는 것이다.
  • 잘 될지는 모르겠지만 할 수 있는 만큼은 최선을 다 해 볼 생각이다.

Flutter

  • Flutter(이하 플러터)는 싱글코드 기반의 멀티 플랫폼을 지원하는 오픈소스 프레임워크다.
  • 이 글을 작성하는 2022년 8월 기준 현재 플러터는 3.0 버전까지 나와있다.
  • AOS, IOS, Windows, Linux, Mac, Web 등 다양한 플랫폼에서 사용할 수 있다.
  • 현재 구굴이 개발중인 퓨시아에서도 사용할 수 있다고 하니 배워두면 요긴하게 사용할 수 있을 것 같다.

특징

  • 플러터는 Dart라는 언어를 사용하여 개발을 한다.
  • Dart는 객체지향 언어로 구글에서 개발되었다.
  • 플러터 2.0부터 Null Safety를 지원한다.
  • 다른 언어를 해봤다면 Dart를 배우는데 큰 어려움은 없어보인다.

Dart

  • Dart도 main함수를 기준으로 프로그램이 실행된다.
    • Dart Hello World!
      void main() {
          print('Hello World!');
      }

Variable(변수)

  • Dart는 기본적으로 int, double, bool, String 등의 타입이 있지만, var 키워드를 이용하여 타입을 생략할 수 있다.

  • var 키워드를 사용하면 변수에 할당된 값의 타입을 추론하여 타입을 선택하게 된다.

    • 코드

      void main() {
          // 남슈크림빵이라고 하는 문자열을 name이라는 변수에 할당한다.
          // name의 타입을 별도로 지정하지 않았지만, dart 파서가 추론하여 자동으로 String 타입으로 선언한다.
          var name = '남슈크림빵';
      
          // print() 함수를 이용하여 값을 출력할 수 있다.
          print(name);
      
          // 다른 타입의 데이터도 변수에 할당하고 출력할 수 있다.
          // 28이라는 값을 변수에 할당하면 int 타입으로 추론하여 선언한다.
          var age = 28;
          // 1.7이라는 값을 변수에 할당하면 double 타입으로 추론하여 선언한다.
          var height = 1.7;
          // false라는 값을 변수에 할당하면 bool 타입으로 추론하여 선언한다.
          var married = false;
      
          print(age);
          print(height);
          print(married);
      }
    • 결과

      남슈크림빵
      28
      1.7
      false
  • var 키워드는 모든 타입에 사용할 수 있지만, 한 번 값이 초기화되면 해당 타입이 고정되어 다른 타입의 데이터를 변수에 넣을 수 없다.

  • 또한 var 키워드로

  • 당연히 int, double, bool, String 등의 타입을 이용하여 명시적으로 변수를 선언할 수 있다.

    • 코드

      String name = '남슈크림빵';
      int age = 28;
      double height = 1.7;
      bool married = false;
      
      print(name);
      print(age);
      print(height);
      print(married);
    • 결과

      남슈크림빵
      28
      1.7
      false
  • Dart Built-in types

    • Dart에는 다음과 같은 기본 타입을 가진다.(더 있을 수 있음..ㅎ)

    • List, Set, Map 등의 타입은 나중에 따로 자세히 다루도록 하겠다.

      타입예시비고
      ObjectObject data = 10;모든 데이터 타입의 슈퍼타입
      numnum a = 10;int형과 double형의 슈퍼타입
      intint a = 10;정수를 저장할 수 있는 타입
      douledouble a = 10.3;실수를 저장할 수 있는 타입
      boolbool isDone = false;true, false를 저장할 수 있는 불린 타입
      StringString name = '남슈크림빵';문자열을 저장할 수 있는 타입
      varvar tmp = 24;초기화 후 타입 변경이 불가능한 미지정 타입
      dynamicdynamic tmp2 = 'tmpData';초기화 후 타입 변경이 가능한 미지정 타입
      Listvar list = [1,2,3];순서를 가지는 일반적인 콜렉션
      Setvar colors = {'red', 'blue', 'yellow'};순서와 중복이 없는 콜렉션
      Mapvar data = {'name': '남슈크림빵', 'age': 28};연관된 키와 값을 가지는 오브젝트

Operators

1. Arithmetic Operators(산술 연산자)

  • 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈 등을 위해 사용하는 연산자 +, -, *, /

  • 나머지를 구하는 연산자 %

  • 값의 증감을 위해 사용하는 연산자 ++, --

    • 코드

      void main() {
          // int형 정수 2라는 값을 가지는 number 변수 선언
          int number = 2;
      
          // 기본 사칙연산
      
          // number라는 정수 2에 정수 2를 더함
          print('number + 2 = ${number + 2}');
          // number라는 정수 2에 정수 2를 뺌
          print('number - 2 = ${number - 2}');
          // number라는 정수 2에 정수 2를 곱함
          print('number * 2 = ${number * 2}');
          // number라는 정수 2에 정수 2를 나눔
          print('number / 2 = ${number / 2}');
      
          // 추가로 자주 사용하는 연산자
      
          // number라는 정수 2를 정수 2로 나눈 나머지
          // if (number % 2 == 0)과 같은 형태로 2로 나누어 떨어지는지 확인할 때 사용할 수 있음
          print('number % 2 = ${number % 2}');
      
          // number라는 정수 2를 정수 3으로 나눈 나머지
          // number의 값이 3보다 작기 때문에 자기 자신이 나머지값으로 나옴
          print('number % 3 = ${number % 3}');
      
          // number 변수의 값을 1 증가시키는 연산자
          // 전위 및 후위 증가 연산자가 있으며 다른 연산자와 같이 사용될 때 결과가 다를 수 있기 때문에 주의할 필요가 있음
          print('++number = ${++number}');  // 전위 증가연산자
          print('number++ = ${number++}');  // 후위 증가연산자
      
          print('number = ${number}');
          
          // number 변수의 값을 1 감소시키는 연산자
          // 전위 및 후위 감소 연산자가 있으며 다른 연산자와 같이 사용될 때 결과가 다를 수 있기 때문에 주의할 필요가 있음
          print('--number = ${--number}');  // 전위 감소연산자
          print('number-- = ${number--}');  // 후위 감소연산자
      
          print('number = ${number}');
          
      }
    • 결과

      number + 2 = 4
      number - 2 = 0
      number * 2 = 4
      number / 2 = 1
      number % 2 = 0
      number % 3 = 2
      ++number = 3
      number++ = 3
      number = 4
      --number = 3
      number-- = 3
      number = 2

2. 할당 연산자(Assignment operators)

  • 변수에 어떤 값을 할당할 때 사용하던 =는 기본적인 할당 연산자이다.

  • 이외에도 많은 할당 연산자가 존재하며 대부분은 기존에 있는 연산자를 편리하게 사용하기 위해 쓴다.

    연산자예시비고
    =a = 10;a 변수에 10을 할당
    +=a += 10;a 변수의 값에 10을 더한 결과를 다시 a 변수에 할당
    -=a -= 10;a 변수의 값에 10을 빼는 결과를 다시 a 변수에 할당
    *=a *= 10;a 변수의 값에 10을 곱한 결과를 다시 a 변수에 할당
    /=a /= 10;a 변수의 값에 10을 나눈 결과를 다시 a 변수에 할당
    %=a %= 10;a 변수의 값에 10을 나머지를 구한 결과를 다시 a 변수에 할당
    • 이외에도 다양한 연산자가 있으니 여기에서 확인해 보도록 하자.

3. 관계 연산자(Equality and Relational Operators)

  • 다른 언어처럼 >, <, >=, <=, ==, !=과 같은 관계 연산자를 이용할 수 있다.

  • 관계연산자에 대한 결과는 bool 형으로 반환된다.

    연산자예시비고
    >a > b보다 큰가?
    <a < b보다 작은가?
    >=a >= b보다 크거나 같은가?
    <=a <= b보다 작거나 같은가?
    ==a == b같은가?
    !=a != b같지 않은가?
    • 코드

      void main() {
          // int형 정수 2라는 값을 가지는 number 변수 선언
          int number = 2;
          // number 변수의 값이 정수 3보다 큰지를 비교함
          print('number > 3 = ${number > 3}');
          // number 변수의 값이 정수 3보다 작은지를 비교함
          print('number < 3 = ${number < 3}');
          // number 변수의 값이 정수 3보다 크거나 같은지를 비교함
          print('number >= 3 = ${number >= 3}');
          // number 변수의 값이 정수 3보다 작거나 같은지를 비교함
          print('number <= 3 = ${number <= 3}');
          // number 변수의 값이 정수 3과 같은지를 비교함
          print('number == 3 = ${number == 3}');
          // number 변수의 값이 정수 3과 같지 않은지를 비교함
          print('number != 3 = ${number != 3}');
    • 결과

      number > 3 = false
      number < 3 = true
      number >= 3 = false
      number <= 3 = true
      number == 3 = false
      number != 3 = true

4. 비트 연산자(Bitwise Operators)

  • 다른 언어들과 마찬가지로 Dart도 비트 연산자를 지원한다.

  • 제공된 데이터들 간의 비트 연산을 진행하는데 사용된다.

    연산자예시비고
    &a & ba와 b의 AND 비트 연산
    \|a | ba와 b의 OR 비트 연산
    ^a ^ ba 와 b의 XOR 비트 연산
    ~~aa의 비트 반전 연산
    <<a << ba를 b 비트만큼 왼쪽으로 이동
    >>a >> ba를 b 비트만큼 오른쪽으로 이동

5. 논리 연산자(Logical Operators)

  • 주어진 논리식을 판단하여 참/거짓을 판단하는 연산자로 비트연산자와 비슷하다

    연산자예시비고
    &&a && ba와 b의 AND 연산
    \|\|a || ba와 b의 OR 연산
    !!aa의 NOT 연산

6. 조건 표현식(Conditional Expressions)

  • 흔히 3항연산자로 불리는 연산자로, 조건식에 따라 다른 결과를 반환하는 연산자로 사용된다.

    연산자예시비고
    a ? b : cvar result = a > 10 ? true : falsea의 조건이 참이면 b를, 거짓이면 c를 반환

7. 타입 테스트 연산자(Type test operators)

  • as, is, is! 연산자를 이용하여 타입 테스트를 수행할 수 있다.

  • isis!는 타입을 테스트하는 연산자로, 변수의 타입을 체크할 때 사용한다.

  • as는 데이터의 타입을 명시적으로 캐스팅할 때 사용하며, 업캐스팅과 다운캐스팅이 있다. as는 나중에 다시 살펴보도록 하자.

    연산자예시비고
    asa as Objecta의 타입을 Object로 캐스팅
    isa is Stringa의 타입이 String인가?
    is!a is! Stringa의 타입이 String이 아닌가?

Refference

profile
작은 오븐의 작은 빵

0개의 댓글