함수
Last updated
Was this helpful?
Last updated
Was this helpful?
타입스크립트의 타입 시스템은 함수에 대한 애정이 많아서, 결과적으로 함수는 구성 자유도가 높은(composable) 시스템의 주요 구성요소가 되었습니다.
다른 변수에 타입주석(type annotaions)을 달수 있는것 처럼, 함수 파라미터도 타입주석을 달수 있습니다:
여기에서는 인라인 타입 주석을 예로 들었는데, 인터페이스 등도 사용할 수 있습니다.
변수에 타입 주석을 다는 것과 같은 스타일로 함수 파라미터 목록 다음에 리턴 타입 주석을 달수 있습니다. 예를 들면, 아래 예제에서 : Foo
처럼 작성합니다.
여기서 인터페이스
를 사용했지만, 다른 주석도 당연히 자유롭게 사용가능합니다. 예를 들면, 인라인 주석등입니다.
컴파일러가 쉽게 추론할 수 있는 함수의 리턴 타입에는 주석을 달지 않는 것도 아주 자연스러운 일입니다.
하지만, 에러를 감지하는 데 도움되도록 주석을 다는 것도 일반적으로 좋은 생각입니다. 예를 들면:
함수에서 아무것도 리턴할 계획이 없다면, :void
로 주석을 달 수 있습니다. :void
를 달지않고 추론 엔진(inference engine)에 맡겨두는 것도 나쁘진 않습니다.
파라미터를 선택적(optional)이라고 표시할 수 있습니다:
다른 방법으로, (파라미터 선언 다음에 = someValue
를 추가하여) 파라미터에 기본값을 제공할 수도 있습니다. 이 방법으로 caller가 인자(argument)를 제공하지 않더라도 값을 주입할 수 있습니다.
역자주 : 오버로딩은 함수 분신
이라고 번역하는 게 좋지 않을까 반쯤 진지하게 생각합니다. 보통 닌자가 분신술을 쓴다고 할 때 바로 그 분신
말입니다. 아래 영어 본문 내용에 true representaion
, true decalartion
, true nature
라는 말이 나오는 데 다른 오버로딩은 분신
, true 붙은 것은 본체
, 본성
으로 치환해서 생각해보면 의미가 빨리 와 닿더군요...
타입스크립트에서 함수 오버로드를 선언 할 수있습니다. 이 것은 문서화 + 타입 보안(type safety) 목적에서 유용합니다. 아래 코드에 대해 생각해보십시오:
코드를 주의깊게 보면, a
,b
,c
,d
의 의미가 전달되는 인자의 수에 따라 변화한다는 것을 알수 있습니다. 또한 위 함수는 1개
, 2개
혹은 4개
인자만 예상하고 있습니다.이러한 조건은 함수 오버로딩으로 강제되고 문서화 될 수 있습니다. 단지 함수 헤더(function header)만 여러번 선언하면 됩니다. 마지막 함수 헤더는 함수 바디 내부에서는 유효하지만 밖에서는 효과가 없습니다.
아래 예제를 보세요:
여기에서 처음 3개 함수 헤더가 padding
에 대한 유효한 호출로 판단됩니다:
(함수 내부를 봐서 알수 있듯이 분신이 아닌 진정한 본체인)마지막 선언이 다른 모든 오버로드와 호환되는 것은 당연히 중요한 요소입니다. 이 마지막 선언이 그 함수 바디가 책임 져야할 해당 함수의 진정한 본성이기 때문입니다.
타입스크립트의 함수 오버로딩은 런타임 오버헤드없이 구현됩니다. 이 기능은 단지 당신이 함수를 호출할 때 예상하는 방식을 문서화 하도록 하고, 컴파일러가 당신의 코드를 체크할 수 있도록 할 뿐입니다.
빠른 팁: 타입 선언은 이미 존재하는 구현의 타입을 설명하는 방법입니다.
함수 구현 없이 타입을 선언 하는 방법은 두가지가 있습니다. 예:
위 두 예제는 완전히 동등합니다. 오버로드를 추가하고자할 때 차이가 발생합니다. 오버로드는 롱핸드 선언에서만 추가할 수 있습니다, 예: