다트에서는 자바와 같은 오버로딩 기능을 제공하지 않는다.
선택적 매개변수와 기본값 설정, 그리고 초기화 리스트를 통해 오버로딩과 비슷한 방식으로 객체를 초기화할 수 있습니다
선택적 매개변수 {} 중괄호 사용
class person {
int? age;
String? name;
//선택적 매개변수 - dart의 오버로딩
person({ this.age, this.name});
//required는 반드시 값을 넣는다는 말 무조건 받아야함
}
(Dart)에서 선택적 매개변수는 중괄호
{}
로 감싸서 정의되며, 이 경우 해당 매개변수는 객체 생성 시 전달하지 않아도 됩니다. 만약 값을 전달하지 않으면 해당 매개변수의 값은 null
로 설정된다.void main() {
Person p1 = Person(); // 매개변수 전달하지 않음 (null 값)
Person p2 = Person(age: 25, name: "Alice"); // 모든 매개변수 전달
print(p1.age); // null
print(p1.name); // null
print(p2.age); // 25
print(p2.name); // Alice
}
결과를 보면 알겠지만 null이 나오니 필드에 ?를 사용해서 null을 허용해야한다.
또한 선택적 매개변수의 순서를 바꿔도 동작한다. 자바의 bulid와 유사하다
반드시 전달해야하는 required
class Dog {
int age;
String name;
// 선택적 매개변수와 required 사용
Dog({required this.age, required this.name});
}
void main() {
Dog myDog = Dog(age: 3, name: "Buddy"); // 정상
// Dog myDog = Dog(age: 3); // 에러: name 값이 빠짐
}
required
의 역할
선택적 매개변수는 기본적으로 전달하지 않아도 되는 값입니다. 하지만 경우에 따라 특정 필드는 필수로 받아야 할 때가 있습니다. 이때, 선택적 매개변수에
required
키워드를 추가하여 반드시 값이 전달되도록 강제할 수 있습니다.선택적 매개변수에서 **기본값(default value)**을 지정하는 문법
class Cat {
int? age;
String? name;
// 선택적 매개변수와 기본값 설정
Cat({this.age, this.name = "토토"});
}
this.name = "토토"
:name
필드는 기본값"토토"
가 지정되어 있습니다. 객체를 생성할 때name
값을 전달하지 않으면 자동으로"토토"
가 할당됩니다.
- Nullable 타입인
int?
는null
일 수 있는 값이므로, 기본값을 설정하지 않았고,name
은 기본값"토토"
가 있습니다. 즉 ? 필요없음
Share article