Flutter/Dart

Dart 클래스 - 생성자#2

두비_ 2024. 6. 18. 07:27
반응형

클래스 첫 음절은 대문자로 시작해야한다 개발자들간의 암묵적인 약속이라고 생각하면 된다

클래스를 생성할 때 기존에 아래 처럼 void main 안에서 코드를 생성하는게 아닌 밖에서 만들게 된다

void main() {
  
  
  
}

  //클래스
  class Point {
    
  }

현재 아래 코드를 생성했는데 에러가 발생했다

  class Point {
    double x;
    double y;
  }

x와 y에 값이 들어가 있지 않기 때문에 에러가 발생했으므로 Null 연산자를 선언하여 x와 y값을 사용할 수 있게한다

  class Point {
    double? x;
    double? y;
  }

포인트라는 객체를 만들 땐 class를 사용할껀데 변수를 선언할 때 앞에 타입이 오게 된다

클래스로 만들어진 객체를 만들 때 해당 객체는 클래스의 이름을 따라간다

그러므로 void 안에 Point를 넣는다

void main() {
  Point point =
}

클래스에서 오브젝트를 생성할 땐 이런식으로 사용한다

void main() {
  Point point = Point();
}

아무값을 입력하지 않은상태에서 생성된 기본 생성자가 이런 형태이다

print로 확인결과 인스턴스로 잘 생성되었다는 문구가 확인되었다

명명 생성자

개발자가 임의적으로 생성자를 안에 만들어준다

 class Point {
    double? x;
    double? y;
    
    Point();
  }

Point();가 기초 생성자 그 자체가 되기 때문에 같은 값으로 나온다

 class Point {
    double x;
    double y;
    
    Point(this.x, this.y);
  }

this로 x와 y에 값을 받는다고 선언했다

선언했기 때문에 double에 ?인 Null 선언을 지워도된다

하지만 이번에 Point();에 에러가 발생했다

compileDDC
main.dart:2:22: Error: Too few positional arguments: 2 required, 0 given.
  Point point = Point();

이 뜻은 x와 y 값은 받기로 했으나 값을 적지 않았기 때문에 발생한 오류이다

1, 2를 넣어줌으로써 x와 y에 값을 넣어주게 된다

void main() {
  Point point = Point(1,2);
  print(point);
}

this로 인해 넣은 값을 print로 보기위해선 . 을 이용한다

이제 클래스들 안에 있는 객체에 접근가능하다