[플러터] 7. 선택적 매개변수

백하림's avatar
May 21, 2025
[플러터] 7. 선택적 매개변수
// 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

harimmon