Flutter/2.0

Dart에서 클래스(Class)와 생성자(Constructor)

lgvv 2021. 8. 10. 15:26

Dart에서 클래스(Class)와 생성자(Constructor)

 

Dart에서 클래스랑 생성자를 간단하게 정리.

 

클래스(Class)란?

객체가 가져야 하는 속성과 기능을 정의한 설계도(blueprint)

  • 클래스는 변수와 메서드를 포함할 수 있음
  • 객체(Object)는 이 클래스를 기반으로 실제 메모리에 생성된 실체
class Person {
  String name = 'John'; 
  int? age;
  String? sex;
}

 

 

객체(Object)와 인스턴스(Instance)

  • 객체
    • 클래스로부터 생성된 실제 메모리 상의 데이터
  • 인스턴스
    • “객체”와 같은 의미이지만, 클래스에서 생성되었다는 관계를 강조할 때 사용

 

즉, 클래스를 정의하면 설계도가 생기고, 그 설계도를 기반으로 실제로 만든 것이 인스턴스(객체)이다.

 

 

 

기본 생성자 (Default Constructor)

  • 생성자는 클래스로부터 객체를 생성할 때 자동으로 호출되는 함수
  • Dart의 기본 생성자는 별도로 정의하지 않으면 자동으로 제공됨
  • new 키워드는 선택 사항 (생략 가능)
class Person {
  String name = 'John'; 
  int? age;
  String? sex;
}

void main() {
  Person p1 = new Person(); // 생성자 호출
  p1.age = 30;
  print(p1.age); // 30
}

 

 

 

null-safety

Dart 2.0 이후에는 null-safety가 도입되어 null을 허용할 변수는 타입 뒤에 ?를 붙여야 함.

int? age;  // null을 가질 수 있음
int age;   // null 불가능

 

DartPad에서는 null-safety를 ON/OFF 할 수 있음

 

 

Named Argument (명명된 인자)


여러 개의 인자를 받을 때, 
선택적으로 지정 가능하도록 하는 문법

  • 생성자의 인자 부분 {} named argument를 의미함
  • 인스턴스를 만들 때 Person(age: 30)처럼 인자 이름을 명시적으로 써야 함
  • 모든 인자를 다 줄 필요 없이, 원하는 값만 선택적으로 전달 가능
class Person {
  String? name = 'John'; 
  int? age;
  String? sex;
  
  // Named argument 생성자
  Person({String? name, int? age, String? sex}) {
    this.name = name;
    this.age = age;
    this.sex = sex;
  }
}

int addNumber(int num1, int num2) {
  return num1 + num2;
}

void main() {
  Person p1 = new Person(age: 30);     // age만 지정
  Person p2 = new Person(sex: 'male'); // sex만 지정
  
  print(p1.age); // 30
  print(p2.age); // null
  print(addNumber(3, 4)); // 7
}