출처 책 (처음 배우는 플러터 - 유동환)
오늘 알아볼 것은 flutter에서 사용하는 Dart의 장점 중에 장점 역할을
맡고 있는 녀석을 소개한다.
선택 인자와 이름 있는 인자이다!
1. 선택인자(positional optional parameter)
이름이 상당히 깁니다.
선택인자는 자신이 선택할 수 있는 인자입니다.
한 마디로 이 인자를 선택해도 되고, 안 해도 되는 것입니다.
예제를 보면서 살펴 보겠습니다.
//선택인자(positional optional parameter)
int num1 = 100;
int num2 = addNumber(100) //inc = 1 대입
int num3 = addNumber(100, 20) //inc = 20 대입
// 넣은 인자 값들을 더해서 int 값으로 반환하는 메서드
int addNumber(int num, [inc = 1]) => num + inc;
여기서 선택 인자의 기능을 알 수 있다.
우선 첫 번째로 num1을 출력하면 당연히 그대로 100이 나올 것이다.
그렇다면 num2는 무엇이 나올까?
num2는 101이 나올 것이다.
이유를 살펴보자.
addNumber안에 파라미터 값 중에서
int num은 우리가 넣은 100이라는 숫자가 나온다.
그렇다면 [inc = 1]은 무엇일까?
위에 의미는 inc값을 넣으면 inc값이 출력이 되지만, 넣지 않으면 1로 반환할 것이라는 뜻이다.
그렇다. 이것이 선택 인자이다.
내가 선택해서 다른 값을 넣으면 그 값이 출력되지만,
내가 값을 넣지 않아도 기본 값이 출력이 되는 것이다.
그렇다면 num3는 무엇이 나올까?
inc의 새로운 값 20을 넣어주었으므로, 값은
100 + 20 = 120이 출력이 될 것이다.
2. 이름 있는 인자(named optional parameter)
이름 있는 인자는 선택 인자와 비슷한 면이 있긴 하지만,
이름 있는 인자는 자신이 선택한 인자에만 값을 넣을 수 있습니다.
아래 예시를 봅시다.
//이름 있는 인자(named optional parameter)
String http1 = getHttp(url: 'http://naver.com', port: 80);
String http2 = getHttp(url: 'http://naver.com');
String getHttp({String url, int port}){
return 'get http from $url, port = $port'
}
print(http1);
print(http2);
이런 식으로 쓴다고 가정해보자.
http1을 출력하면 어떤 값이 나올까?
url 값과 port 값을 둘 다 입력해 주었기 때문에,
get http from http://naver.com, port = 80이 나온다.
그렇다면 http2를 출력하면 무엇이 나올까?
url값만 넣어주었기 때문에
get http from http://naver.com, port = null
위에 처럼 null값이 그대로 출력되었을 것이다.
{} 이 브래킷 사이에 들어 있는 인자는 넣어도 되고 안 넣어도 되는 것이다.
더 응용해서
@required라는 어노테이션을 인자 앞에다가 넣어주면,
필수 값으로 인지 하여, 이 값은 필수라고 지정해 줄 수 있다.
String getHttp({@required String url, int port}){ //여기서 url 값을 필수적으로 넣어주어야 한다.
return 'get http from $url, port = $port'
}