본문 바로가기
Dart

[Dart] 언어 기본기 - 함수편

by 가드 2022. 12. 8.
728x90

※ 시작 전 참고사항 : 다트패드테스트 진행

함수는 반복되는 로직, 반복되는 코드를 한 번만 작성해서 재활용할 수 있게 해주는 것이 함수의 기능이다. 함수를 정의할 때는 어떠한 값(Input)을 받아서 어떠한 값(Output)을 출력해야 할지 누가 봐도 어떠한 역할을 하는 함수인지를 알 수 있도록 명확한 함수 이름을 정의하면 된다.

  • 함수 기능 : int a, int b를 받아서 더하고 더한 숫자가 2의 배수인지를 알려주는 기능
  • 함수 이름 : addNumbers라 정의해보자
void main() {
  addNumbers(2, 10); // 2의 배수입니다.
  addNumbers(3, 4); // 2의 배수가 아닙니다.
}

addNumbers(int a, int b) {
  int sum = a + b;
  if (sum % 2 == 0) {
    print('2의 배수입니다.');
  } else {
    print('2의 배수가 아닙니다.');
  }
}
  • 함수에 정의한 대로 addNumbers라는 함수에 int 타입 a, b를 받을 수 있도록 정의하고 두 값을 더하고 2로 나눈 나머지 값으로 2의 배수인지를 판단하는 함수를 작성하였다.
  • main에서는 이 함수를 재활용하여 parameter 값만 변경하여 서로 다른 결과를 추출해 냈었다.

참고로 파라미터 함수에 optional의 정해 줄 수 있는데 파라미터가 반드시 있어야 하는지 아니면 있어도 되고 없어도 되는 파라미터인지를 정의해줄 수 있다.

즉, a 값은 필수로 넣어줘야 되는데 b는 넣을 수도 안 넣을 수도 있게 정의를 할 수 있다.

Optional Parameter 정의

void main() {
  addNumbers(2); // 2의 배수입니다.
  addNumbers(3, 4); // 2의 배수가 아닙니다.
}

addNumbers(int a, [int b = 0]) {
  int sum = a + b;
  if (sum % 2 == 0) {
    print('2의 배수입니다.');
  } else {
    print('2의 배수가 아닙니다.');
  }
}
  • [int b = 0] : [] 대괄호로 감싸면 optional 파라미터라고 정의해 주는 것이고 optional이면 null이 될 수도 있기에 a + null 더하기를 수행할 수 없으므로 b = 0으로 null 일 때 기본값을 설정해주면 된다. 
  • addNumbers(2)에 대해 b는 null이기 때문에 기본값 0으로 대입되어 2 + 0으로 더하기를 수행하고 2의 배수입니다.를 출력하게 된다.
  • a parameter는 null이 될 수 없기에 무조건 넣어야 한다.

Named Parameter 정의

void main() {
  addNumbers(a : 10, b : 20); // 2의 배수입니다.
  addNumbers(b : 20, a : 10); // 2의 배수입니다.
}

addNumbers({
  required int a,
  required int b, // optinal parameter는 int b = 0; 
}) {
  int sum = a + b;
  if (sum % 2 == 0) {
    print('2의 배수입니다.');
  } else {
    print('2의 배수가 아닙니다.');
  }
}
  • {} 중괄호 안에 required int a ,b int 타입의 필수 값 a, b로 선언한다.
  • main 함수에서는 파라미터 변수 : value로 정의한다. 네임드 파라미터는 변수 이름과 값을 정의하기 때문에 순서와 상관없이 파라미터를 넘길 수 있다.
  • required 키워드 넣지 않으면 optional parameter가 되기 때문에 null이 될 수 있다. 그러므로 int b = 0; 이런 식으로 기본 값을 설정할 수 있다.

위의 테스트코드의 함수들은 void로써 함수 실행 후 반환되는 값이 없다. 이제는 반환되는 값을 만들어 입력 값을 넣어서 출력 값을 얻도록 하자.

void main() {
  int number1 = addNumbers(a : 5, b : 4);
  int number2 = addNumbers(a : 3, b : 2);
  print(number1 + number2); // 14
}

int addNumbers({
  required int a,
  required int b,
}) {
  int sum = a + b;
  return sum;
}
  • addNumbers 함수 앞에 int를 넣어서 int 타입으로 반환을 해 줄 것을 명시한다.
  • a + b를 더한 값 sum을 return이라는 키워드를 사용해서 sum 값을 반환해준다.
  • main에서는 addNumbers 함수를 호출하여 반환 값을 받은 number1, number2를 더해서 출력했다.
void main() {
  int number1 = addNumbers(10, a : 5, b : 4);
  int number2 = addNumbers(10, a : 3, b : 2);
  print(number1 + number2); // 34
}

int addNumbers(int c, {
  required int a,
  required int b,
}) {
  int sum = a + b + c;
  return sum;
}
  • 위의 테스트 코드처럼 position 파라미터와 named 파라미터를 조합할 수도 있다.

Arrow 함수

void main() {
  int number1 = addNumbers(10, a : 5, b : 4);
  int number2 = addNumbers(10, a : 3, b : 2);
  print(number1 + number2);
}

int addNumbers(int c, {
  required int a,
  required int b,
}) => a + b + c;
  • 함수의 코드를 좀 더 간결하게 표현하는 방법이다.
  • 결국은 int sum = a + b + c; sum을 반환해야 하는 함수이므로 => a + b + c (화살표 정의)에 반환하고자 하는 코드를 작성해주면 기존과 동일한 함수 동작에 동일한 반환 값을 준다.
300x250

댓글