Dart에서는 함수를 정의할 때 매개변수를 사용하는 방법으로 "포지셔널 파라미터"와 "네임드 파라미터" 두 가지가 있습니다. 이 글에서는 두 개념을 명확히 설명하고, 언제 어떻게 활용해야 하는지 알려드립니다.
1. 포지셔널 파라미터(Positional Parameters)
포지셔널 파라미터는 순서대로 전달해야 하는 매개변수입니다. 함수 호출 시 매개변수의 위치가 중요하며, 선언된 순서대로 값을 넣어야 합니다.
기본 예제
void greet(String firstName, String lastName) {
print("Hello, $firstName $lastName!");
}
void main() {
greet("John", "Doe"); // Hello, John Doe!
}
위 코드에서 greet("John", "Doe")를 호출하면, 첫 번째 인자는 firstName, 두 번째 인자는 lastName으로 전달됩니다.
선택적 포지셔널 파라미터
Dart에서는 [] 대괄호를 사용하여 선택적 포지셔널 파라미터를 만들 수 있습니다.
void greet(String firstName, [String? lastName]) {
if (lastName != null) {
print("Hello, $firstName $lastName!");
} else {
print("Hello, $firstName!");
}
}
void main() {
greet("John"); // Hello, John!
greet("John", "Doe"); // Hello, John Doe!
}
선택적 포지셔널 파라미터는 기본적으로 null 값을 가질 수 있으며, 이를 방지하려면 기본값을 설정하면 됩니다.
void greet(String firstName, [String lastName = "Doe"]) {
print("Hello, $firstName $lastName!");
}
2. 네임드 파라미터(Named Parameters)
네임드 파라미터는 이름을 지정하여 전달하는 매개변수입니다. 순서를 신경 쓰지 않아도 되며, 코드의 가독성을 높이는 데 유용합니다.
기본 예제
void greet({String? firstName, String? lastName}) {
print("Hello, ${firstName ?? "Guest"} ${lastName ?? ""}!");
}
void main() {
greet(firstName: "John", lastName: "Doe"); // Hello, John Doe!
greet(lastName: "Doe", firstName: "Jane"); // Hello, Jane Doe!
greet(firstName: "Alice"); // Hello, Alice !
}
네임드 파라미터를 사용하면 매개변수의 순서가 바뀌어도 상관없습니다.
필수 네임드 파라미터
required 키워드를 사용하면 특정 네임드 파라미터를 필수값으로 만들 수 있습니다.
void greet({required String firstName, required String lastName}) {
print("Hello, $firstName $lastName!");
}
void main() {
greet(firstName: "John", lastName: "Doe"); // Hello, John Doe!
// greet(firstName: "John"); // 오류 발생: lastName이 필수
}
기본값을 가진 네임드 파라미터
네임드 파라미터에도 기본값을 설정할 수 있습니다.
void greet({String firstName = "Guest", String lastName = "Doe"}) {
print("Hello, $firstName $lastName!");
}
void main() {
greet(); // Hello, Guest Doe!
greet(firstName: "Alice"); // Hello, Alice Doe!
}
결론
Dart에서는 포지셔널 파라미터와 네임드 파라미터를 적절히 활용하여 코드의 가독성을 높이고 유지보수를 쉽게 만들 수 있습니다. 기본적으로 필수 매개변수는 포지셔널을, 선택적 매개변수는 네임드를 사용하는 것이 일반적입니다.
Dart의 유연한 함수 매개변수를 잘 활용하여 가독성과 유지보수성을 높이는 코드를 작성해 보세요! 😊