dart,flutter

[Dart] Dart에서는 함수의 매개변수를 4가지 방식 (Named Parameter, positional parameter)

곽코딩루카 2025. 3. 6. 16:04
반응형

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