2024. 10. 6. 00:21ㆍflutter
Flutter 5주차 - Dart언어의 함수
목차
함수 선언과 호출하기
먼저 다트의 함수 선언 위치를 알아보자.
다트에서 함수는 톱 레벨과 클래스의 멤버, 그리고 다른 함수 내에 선언이 가능하다.
다트에서는 함수 오버로딩 기능을 제공하지 않는다.
(다트에서는 옵셔널 매개변수라는 기능을 제공하고 있기 때문에 굳이 함수 오버로딩을 제공하지 않는다.)
함수의 매개변수는 타입을 명시하거나 var로 선언, 또는 타입을 생략한다.
함수의 매개변수를 var로 선언하면 dynamic 타입이 된다.
매개변수의 타입을 생략하면 var로 선언한 것과 동일하게 인식된다.
다음으로 함수의 반환 타입을 살펴보자.
함수가 반환할 데이터가 없으면 void로 선언한다.
만약 반환 타입을 생략하면 모든 타입의 데이터를 반환할 수 있는 dynamic 타입이 된다.
화살표 함수는 본문을 중괄호로 묶지 않고 화살표 기호(=>)로 나타내는 방법이다.
명명된 매개변수(named parameter)
명명된 매개변수(named parameter)는 '이름:값' 형태로 매개변수 이름과 값을 함께 전달하는 방식을 말한다.
명명된 매개변수는 옵셔널이므로 호출할 때 데이터를 전달하지 않을 수도 있다.
명명된 매개변수 선언 규칙은 다음과 같다.
- 명명된 매개변수는 중괄호 {}로 묶어서 선언한다.
- 여러 매개변수를 중괄호로 묶어 명명된 매개변수로 선언할 수 있다.
- 한 함수에서 명명된 매개변수는 한 번만 선언할 수 있으며 순서상 마지막에 선언해야 한다.
- 명명된 매개변수에는 기본값을 설정할 수 있다.
명명된 매개변수 호출 규칙은 다음과 같다.
- 명명된 매개변수에 데이터를 전달하지 않을 수 있다.
- 명명된 매개변수에 데이터를 전달하려면 반드시 이름을 명시해야 한다.
- 명명된 매개변수에 데이터를 전달할 때 선언된 순서와 맞추지 않아도 된다.
다트의 명명된 매개변수에는 기본 인자를 설정할 수 있는데, 기본 인자란 함수를 호출할 때 데이터를 전달받지 못하면 매개변수에 대입하는 기본값을 의미한다.
명명된 매개변수에서 required 예약어를 사용하면 함수를 호출할 때 반드시 값을 전달받도록 강제하는 기능을 제공한다.
옵셔널 위치 매개변수(optional positional parameter)
옵셔널 위치 매개변수(optional positional parameter)도 명명된 매개변수처럼 값 전달은 필수가 아니다. 그러나 값을 전달할 때는 이름 대신 매개변수가 선언된 순서(위치)에 맞게 호출해야 한다.
즉, 옵셔널 위치 매개변수로 선언된 함수는 데이터 전달은 자유지만 순서를 맞춰서 호출해야 한다.
옵셔널 위치 매개변수를 선언하는 규칙은 다음과 같다.
- 매개변수들을 대괄호로 묶는다.
- 함수의 마지막 매개변수에만 사용할 수 있다.
- 매개변수에 기본 인자를 설정할 수 있다.
옵셔널 위치 매개변수를 포함하는 함수는 다음과 같은 규칙을 지켜 호출해야 한다.
- 매개변수 이름은 생략한다.
- 매개변수가 선언된 순서에 따라 값이 할당된다.
함수 타입 인수(고차함수)
플러터(Flutter)에서 고차함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수를 의미한다.
Dart 언어를 기반으로 하는 플러터에서 고차함수를 활용하여 코드의 재사용성과 가독성을 높일 수 있다.
고차 함수의 개념은 다음과 같다.
- 함수를 인자로 받는 함수 : 고차 함수는 다른 함수를 매개변수로 받아서 사용할 수 있다.
- 함수를 반환하는 함수 : 고차 함수는 함수를 반환할 수 있다.
고차 함수의 장점은 다음과 같다.
- 코드 재사용성 : 동일한 로직을 여러 곳에서 사용할 수 있어 코드 중복을 줄일 수 있다.
- 가독성 향상 : 함수형 프로그래밍 스타일을 통해 코드의 의도를 명확하게 표현할 수 있다.
- 유연성 : 다양한 함수를 인자로 전달하여 동적인 동작을 구현할 수 있다.
Dart 언어의 기본 개념은 모든 데이터는 전부 객체라는 개념을 가지고 있다. 따라서 함수도 객체라고 할 수 있다.
함수를 대입할 수 있는 객체를 함수 타입이라고 하며, Function으로 선언한다.
아래는 함수 타입을 사용한 예 이다.
1. 함수를 인자로 받는 경우 :
2. 함수를 반환하는 경우 :
Function 타입으로 선언한 변수에는 모든 함수를 대입할 수 있다. 그런데 때로는 함수 타입 변수에 대입할 함수를 특정한 형태로 한정하고 싶을 때가 있다. 예를 들어 int 타입 매개변수를 하나 받고 int 타입으로 반환하는 함수만 대입할 수 있게 선언하면 다음과 같다.
익명 함수(anonymous functions)는 이름이 생략된 함수를 의미하며 흔히 람다 함수(lambda function)라고 부른다.
익명 함수는 보통 한번만 쓰일 함수여서 이름을 굳이 달지 않아도 될 경우에 쓰인다.
'flutter' 카테고리의 다른 글
Flutter 7주차 (2) - http 패키지 이용하기 (1) | 2024.10.16 |
---|---|
Flutter 7주차 (1) - 애셋 활용하기 (1) | 2024.10.16 |
Flutter 4주차 - 정적인 화면 만들기 (0) | 2024.09.29 |
Flutter 4주차 - 외부 패키지 사용하기 (0) | 2024.09.29 |
Flutter 3주차 - 널 안정성(null safety) (1) | 2024.09.22 |