반응형
Dart에서는 함수의 매개변수를 4가지 방식으로 사용할 수 있다.
1. 필수 매개변수 (Positional Parameter) | (String name) | 반드시 값을 전달해야 하는 매개변수 |
2. 선택적 위치 매개변수 (Optional Positional Parameter) | ([String? name]) | 값을 넣을 수도 있고 안 넣을 수도 있음 (null 가능) |
3. 이름 있는 매개변수 (Named Parameter) | ({String name}) | 매개변수 이름을 지정해서 전달 (순서 상관없음) |
4. 선택적 이름 있는 매개변수 (Optional Named Parameter) | ({String? name}) | 이름 있는 매개변수지만, null 허용 |
이제 하나씩 예제를 보면서 차이점을 알아보자!
1. 필수 매개변수 (Positional Parameter)
Java와 같은 일반적인 방식 (순서 중요, 꼭 값을 넣어야 함)
void greet(String name) {
print("안녕하세요, $name!");
}
void main() {
greet("홍길동"); // ✅ "안녕하세요, 홍길동!"
greet(); // ❌ 오류 발생 (매개변수를 반드시 넣어야 함)
}
매개변수 name은 필수이며, 값을 꼭 넣어야 함.
값을 전달하지 않으면 오류 발생!
2. 선택적 위치 매개변수 (Optional Positional Parameter)
[] 대괄호를 사용하여 매개변수를 선택적으로 전달 가능
void greet([String? name]) {
print("안녕하세요, ${name ?? '이름 없음'}!");
}
void main() {
greet("홍길동"); // ✅ "안녕하세요, 홍길동!"
greet(); // ✅ "안녕하세요, 이름 없음!" (null이므로 기본값 사용)
}
[] 안에 있는 매개변수는 선택적으로 전달 가능
값이 없으면 null이 되므로, ?? 연산자로 기본값을 설정 가능
3. 이름 있는 매개변수 (Named Parameter)
{} 중괄호를 사용하여 매개변수 이름을 지정해서 전달 (순서 상관없음!)
void greet({required String name}) {
print("안녕하세요, $name!");
}
void main() {
greet(name: "홍길동"); // ✅ "안녕하세요, 홍길동!"
greet(); // ❌ 오류 발생 (required이므로 반드시 전달해야 함)
}
매개변수를 순서 상관없이 전달 가능
required를 사용하면 꼭 값을 넣어야 함
값을 전달하지 않으면 오류 발생!
4. 선택적 이름 있는 매개변수 (Optional Named Parameter)
{} 안에서 ?를 붙이면 선택적으로 값을 넣을 수 있음 (null 가능)
void greet({String? name}) {
print("안녕하세요, ${name ?? '이름 없음'}!");
}
void main() {
greet(name: "홍길동"); // ✅ "안녕하세요, 홍길동!"
greet(); // ✅ "안녕하세요, 이름 없음!" (null이므로 기본값 사용)
}
?를 사용하면 null을 허용할 수 있음
값을 전달하지 않으면 기본값(null 처리) 사용 가능
?? 연산자로 기본값을 설정 가능
정리: Dart의 매개변수 4가지
필수 매개변수 | (String name) | 반드시 순서대로 전달해야 함 | X |
선택적 위치 매개변수 | ([String? name]) | 순서대로 전달하지만, 없어도 됨 | O (기본값 가능) |
이름 있는 매개변수 | ({required String name}) | 이름을 지정해서 전달 (순서 상관없음) | X |
선택적 이름 있는 매개변수 | ({String? name}) | 이름을 지정해서 전달 가능, 없어도 됨 | O (기본값 가능) |
어떤 방식으로 사용해야 할까?
반드시 값을 넣어야 하는 경우 | 필수 매개변수 | void greet(String name) {...} |
매개변수가 선택 사항인 경우 | 선택적 위치 매개변수 | void greet([String? name]) {...} |
매개변수가 많고 순서를 상관없이 전달하고 싶은 경우 | 이름 있는 매개변수 | void greet({required String name}) {...} |
매개변수가 선택 사항이면서 기본값을 주고 싶은 경우 | 선택적 이름 있는 매개변수 | void greet({String? name}) {...} |
Dart 매개변수 vs Java 매개변수 차이
매개변수 필수 전달 | greet(String name) | greet(String name) |
기본값 설정 가능 | ({String name = "홍길동"}) | X 오버로딩 필요 |
순서 상관없이 전달 가능 | greet(name: "홍길동") | X 오버로딩 필요 |
선택적 매개변수 지원 | ([String? name]) | X 오버로딩 필요 |
Dart는 기본값 설정과 선택적 매개변수를 직접 지원하여 더 유연함!
Java에서는 오버로딩을 사용해야 하지만, Dart는 {}와 []를 사용하여 간편하게 처리 가능!
반응형
'dart,flutter' 카테고리의 다른 글
[Dart] _ 언더스코어 변수,클레스 앞에 쓰이면? (0) | 2025.03.06 |
---|