// 1. 키값으로 전달할 수 있다.
void add({int? n1, int? n2}) {
print(n1! + n2!);
}
void add2({int n1 = 0, int n2 = 0}) {
print(n1 + n2);
}
void add3({required int n1, required int n2}) {
print(n1 + n2);
}
void add4(int n1, {required int n2, int n3 = 0}) {
print(n1 + n2 + n3);
}
void main() {
//add(n1: 1, n2: 3);
//add2(n1: 1);
//add3(n1: 1, n2: 3);
add4(1, n2: 3);
}
1. 선택적 매개변수는 키 값으로 전달할 수 있다
void add({int? n1, int? n2}) {
print(n1);
}
void main() {
add(n1: 1); // n2는 생략 가능
}
{}
안에 선언된 매개변수는 Named Parameter
- 호출 시 키 이름을 지정해서 전달할 수 있음
- 원하는 값만 전달할 수 있음 (
add(n2: 10)
도 가능)
2. 선택적 매개변수는 null이 들어올 수 있다
void add({int? n1, int? n2}) {
print(n1 + n2); // 오류 발생
}
n1
,n2
모두 null이 될 수 있음
- null 상태에서 연산이 불가능하므로 오류 발생
3. 해결 방법
방법 1: 디폴트 값 사용
void add({int n1 = 0, int n2 = 0}) {
print(n1 + n2);
}
void main() {
add(n1: 1); // 출력: 1
}
- null이 들어오지 않도록 기본값 설정
- 안전하게 사용 가능
방법 2: required 키워드 사용
void add({required int n1, required int n2}) {
print(n1 + n2);
}
void main() {
add(n1: 1); // 오류 발생
add(n1: 1, n2: 2); // 정상 실행
}
- required가 붙으면 반드시 값을 전달해야 함
방법 3: 혼합 사용
void add({int n1 = 0, required int n2, required int n3}) {
print(n1 + n2 + n3);
}
void main() {
add(n2: 2, n3: 3); // 출력: 5
add(n1: 1, n2: 2, n3: 3); // 출력: 6
}
- n1은 기본값이 있어 생략 가능
- n2, n3는 필수
4. 선택적 매개변수는 오버로딩을 대체함
Dart는 함수 오버로딩을 지원하지 않음.
하지만 선택적 매개변수를 사용하면 비슷한 방식으로 구현 가능
void add({int n1 = 0, int n2 = 0, int n3 = 0}) {
print(n1 + n2 + n3);
}
5. 언제 선택적 매개변수를 쓰는 게 좋은가?
- 매개변수가 많고 일부만 필요한 경우 → 선택적 매개변수 사용이 편리
- 매개변수가 적고 반드시 받아야 하는 경우 → 일반 매개변수 사용이 더 간결함
핵심 정리
선언 형태 | 설명 |
{int? n1} | null 허용, 선택적 매개변수 |
{int n1 = 0} | null 불가, 기본값 지정 |
{required int n1} | null 불가, 반드시 전달해야 함 |
{int? n1, required int n2} | 혼합 사용 가능 |
정리
?
: "null 일 수도 있어." (Nullable)
??
: "null이면 기본 값 써." (Null 병합)
!
: "절대 null 아냐!" (Null 강제 해제, 주의!)
required
: "이 값 꼭 줘!" (필수 파라미터)
Share article