이번 시간에는 타입스크립트로 각종 함수를 정의하고 함수와 관련된 타입 정의방법을 실습합니다.
일반함수,익명함수,화살표함수 형태에 따른 타입 사용법을 안내합니다.
함수의 매개변수 타입을 지정할때 사용할수 있는 옵셔널인수 매개변수명? 사용법에 대해서도 안내합니다.

D:\TypeScript\3-TS-Core 폴더내에 function.ts파일을 생성 합니다.

1) 함수 기반 타입 정의법 코딩하고 실행하기
-하기 코드와 같이 코딩을 진행합니다.
-자세한 내용은 주석을 참고바랍니다.
-function.ts

//Case1)타입스크립트 함수는 파라메터 타입과 반환값 타입을 지정하여 구현합니다.
function add1(a: number, b: number): number {
  return a + b;
}

//Case2)함수 반환값이 없을때는 반환값을 void로 정의합니다.
function add2(a: number, b: number): void {
  console.log("결과값:", a + b);
}

const result1: number = add1(10, 10);
console.log(result1);

const data1: number = 20;
const data2: number = 30;
add2(data1, data2);

//Case3: 일반 함수 예시
function greet1(name: string): string {
  return `Hello, ${name}`;
}

//Case4: 익명함수 구현예시
let greet2 = function (name: string): string {
  return `Hello, ${name}`;
};

//Case5:화살표 함수 구현예시
let greet3 = (name: string): string => {
  return `Hello, ${name}`;
};

console.log(greet1("홍길동1"));
console.log(greet2("홍길동2"));
console.log(greet3("홍길동3"));

//Case6: 함수 인수(파라메터) 기본값 설정 및 선택적 매개변수? 예시
//함수 파라메터의 기본값을 설정할수 있다.
//선택적 매개변수(옵셔널 인수) ? 는 해당 매개변수에 필수적으로 값을 전달할 필요가 없을때 사용
//주의:선택적 매개변수는 항상 필수 매개변수을 먼저 정의한 뒤에 위치해야함
function greet(name: string = "Guest", greeting?: string): string {
  if (greeting) {
    return `${greeting}, ${name}`;
  } else {
    return `Hello, ${name}`;
  }
}

//전달값을 지정하지 않으면 기본값이 제공됨
console.log(greet());

//선택적 매개변수는 값을 전달하지 않아도 된다.
console.log(greet("John"));

//전체 파라메터 전달 사용 예시
console.log(greet("John", "Hi"));

//Case7: 함수의 파라메터로 함수를 전달하고 실행하는 예시
function plus(a: number, b: number): number {
  return a + b;
}

function minus(a: number, b: number): number {
  return a - b;
}

//함수의 파라메터로 특정함수를 전달할때는 전달 함수의 파라메터명:(함수 파라메터명:타입,파라메터명:타입) => 함수반환타입 형식으로 정의
//calculate()함수에 파라메터(인수)로 전달되는 함수의 파라메터명과 타입,반환값을 어떻게 정의하는지 확인하세요.
//매개변수중 함수 매개변수와 해당 함수의 구조를 정의해서 전달할수 있다
//해당 함수의 구조는 별도 type alias를 통해 type으로 정의해서 전달할수도 있다.
function calculate(
  a: number,
  b: number,
  calFunc: (a: number, b: number) => number
): number {
  return calFunc(a, b);
}

//calculate함수에 plus,minus 함수를 파라메터로 전달해 해당 전달함수의 로직으로 계산을 수행하게 하는 예시
console.log(calculate(10, 5, plus));
console.log(calculate(10, 5, minus));

//tsc --strictNullChecks function.ts
//node function.js


-코딩을 모두 진행 저장하고 아래 명령어를 통해 터미널창에서 ts파일을 컴파일하고 컴파일 결과.js파일을 실행합니다.
D:\TypeScript\3-TS-Core
tsc --strictNullChecks function.ts
node function.js

2)코딩 핵심 내용 설명
-선택적 매개변수(옵셔널 인수) ? 는 해당 매개변수에 필수적으로 값을 전달할 필요가 없을때 사용
-함수로 전달되는 매개변수중 선택적 매개변수를 사용하는경우 항상 필수 매개변수을 먼저 정의하고 뒷쪽에 선택적 매개변수를 위치시켜야합니다.
-자바스크립트 함수에서 선택적 매개변수를 사용하면 객체 지향 프로그램에서의 오버로딩 기법과 유사하게 사용할수 있습니다.
-함수의 매개변수로 함수자체를 전달할수 있으며 함수의 구조를 직접 타입으로 정의해서 전달할수 있습니다.
-매개변수로 전달되는 함수의 구조를 type alias를 통해 별도 타입으로 정의하여 전달도 가능하다.


다음 주제로 이동합니다.