Dart 언어 문법 정리 두번째 이야기

4584 단어 dartflutter문법dart

시작에 앞서,

지난 Dart 언어 문법 1편에서는 데이터 타입을 명시하는 자료형, 계산하는 연산자, 그리고 코드를 간편히 설명하는 주석에 대해서 알아보았습니다.

이번시간에는 자료형을 묶어놓는 enum, class 그리고 검사하는 is 키워드, 자료형을 변환하는 형변환 키워드인 as에 대해서 알아보려고 합니다.

enum; 열거 형 상수 값 정의

✓ enum을 쓰는 이유는 간단합니다. 우리는 const 키워드를 사용하여 상수형을 선언하곤 하는데,

const  SUNNY  =  '써니' ; 
const  CLOUDY  =  '흐림' ; 
const  RAINY  =  '비가 오는' ;

이렇게 나눠서 정의하게 됐을 때, 코드상에서 흩어져 있으면 보기편하지도 않을 뿐더러 관리하기도 힘듭니다. 그래서 우리는 이렇게 사용합니다.

enum  날씨  { 
  맑음 , 
  흐림 , 
  비가 옴 , 
}

✓ 열거 형은 명명 된 상수 값을 정의하는 데 사용됩니다. 열거 형은 enum 키워드를 사용하여 선언될 수 있습니다. (열겨 형 == 말 그대로 나열하다)

enum enum_name { 
   enum_list 
}

✓ enum_name이 열거 형의 이름을 지정할 수 있습니다. 그리고 열거 된 목록은 쉼표(,)로 구분하여 사용합니다.

enum Status { // enum 초기화
   none, // 0
   running, // 1 
   stopped, // 2
   paused // 3 ... 
}

✓ 열거 형을 추후에 식별자로 추론할 수 있는데 index값을 호출하는 형식으로 구분합니다.

✓ 열거 형의 명칭은 첫 문자를 대문자로 쓰는 게 관례입니다.

enum : 사용하기

enum a { 
  Welcome, to, air
} 
 
void main() { 
        for (a geek in a.values) { 
            print(geek); 
        } 
}

결과
a.Welcome
a.to
a.air

✓ enum의 모든 값을 가져오는 enumName.values 속성(메소드) 또한 활용하여 값을 추출할 수 있습니다.

또한 예에서 문자열은 따옴표로 묶여 있지 않으므로 열거 형 내의 값과 비교하여 다른 결과를 인쇄하는 데 사용할 수 있습니다.

a.Welcome.index == 0 또한 True 범위입니다.

대표적인 사용 예 :

enum Color { red, green, blue }

main() {
  assert(Color.red.index == 0);
  assert(Color.green.index == 1);
  assert(Color.blue.index == 2);

  // -------------------------

  List<Color> colors = Color.values;
  assert(colors[2] == Color.blue);

  // -------------------------

  var aColor = Color.blue;

  switch (aColor) {
    case Color.red:
      print('Red as roses!');
      break;
    case Color.green:
      print('Green as grass!');
      break;
    default:
      print(aColor); // 'Color.blue'
  }
}

Class 와 Constructor(this)의 관계 :

✓ 클래스와 이름이 같은 함수를 생성하여 생성자를 선언합니다.

  // this 키워드는 현재 인스턴스를 나타냅니다.

class Point {
  num x, y;

  Point1(num x, num y) {
    this.x = x;
    this.y = y;
  }

// 외부에서 받아오는 파라미터 x, y를 현재(this.x)에 매칭

  Point2(
       num x,
       num y
  ) : this.x = x,
      this.y = y;
}

✓ ✓ Point1과 Point2의 이름은 Point여야 합니다. 지금은 구별할 수 있도록 나눠 놓은 것이며 Constructor 생성은 2가지 형식으로 할 수있습니다.

사용법

void main(){
     Point air = new Point(1,2);
     print(air.x); // 1
}

✓ 위의 예제를 이해 했다면 Point를 인스턴트화 시킬 경우,
매게변수를 전달할 때에 매게변수의 위치로 값을 전달할 때 불편하다는 점을 확인해야 할 수 있어야 합니다. (편할 경우도 있음)

지금은 Constructor 내에 순서 상으로 선언이 되었지만 named 파라미터로도 전달할 수 있습니다. (이름을 대상으로 파라미터를 전달하는 행위)

하지만 문법 정리 2편에서는 정의하지 않았습니다.
원하는 정보가 필요할 때에 직접 찾아보면서 공부하는 방법이 이해하는 대에 더 좋을 것 같아 제외하였습니다.

named parameter : 예제

void main(){
    Point air2 = new Point(y : 2, x : 1);
    print(air2.x); // 1 
} 

기본적인 Class 선언과 사용

✓ Class는 흔히 붕어빵 기계라고 많이 소개를 합니다.


class 붕어빵틀{
    int 팥양;
    int 반죽양;
    int 붕어빵만들기(){
      int 붕어빵갯수 = 팥양*반죽양;
      return 붕어빵갯수;
    }
}

void main(){
  붕어빵틀 air = new 붕어빵들();
  air.팥양 = 3;
  air.반죽 = 2; 
  print(air.붕어빵만들기()); // 6
  
  붕어빵틀 airtwo = new 붕어빵들();
  air.팥양 = 10;
  air.반죽 = 2; 
  print(air.붕어빵만들기()); // 20
}

✓ 이렇게 같은 틀을 사용하지만 서로 다른 붕어빵 갯수를 찍어낼 때 사용 할 수 있는 복제의 개념입니다.
추후에 추가적인 이해가 필요할 경우 스스로 찾아보기 ! Class 개념은 매우 중요합니다.

is, as :

✓ is : 타입 추론 연산자로 키워드 왼쪽 객체가 오른쪽의 타입인지 bool값으로 반환합니다.
✓ as : 캐스팅 연산자로 오른쪽의 타입으로 캐스팅합니다.

main() {
  final emp = 1; // final의 타입추론으로 emp는 int
  print(emp is String); // emp는 String인가 ? > false
  print(emp is! String); // emp는 String이 아닌가? > true
  print(emp as int); // emp를 int로 > 1
}

마치며..

✓ velog에 글을 쓰게 되면서 매우 좋은 습관을 들인 것 같습니다. 내가 완전히 이해했다고 착각했던 몇몇 부분들을 다시 글을 쓰면서 이해하게 되고 다른 블로그, 자료들을 참고해가면서 글을 적어봤는데 아직 적은 지 얼마 안돼 미숙한 부분이 많은 것 같네요. !
Dart언어의 대표적인 특징은 타입추론과 var변수형이 있지만 다른 int, String이 있어서 신기했던 것 같아요.
결국 구글짱짱맨 !
전역 D-70
전역완료 22. 1. 25

좋은 웹페이지 즐겨찾기