TypeScript 관점에서 statement와 experssion의 차이
그리고 expression(표현식)을 사용하는 게 더 좋은지에 대해서 한번 알아보도록 하겠습니다.
Statement(문장)
프로그램에서 어떤 작업이 이루어져야 하는지를 나타냅니다.
주로 어떤 동작이나 조건을 수행하도록 컴퓨터에게 명령하는 역할을 합니다.
function addTwoNumbers(x: number, y: number): number {
return x + y;
}
- 반환 값이 있을 수도, 없을 수도 있습니다.
- 주로 함수나 조건문, 반복문 등이 Statement의 예시입니다.
장점
- 명시적인 반환
명시적으로 return 키워드를 사용하여 반환값을 지정할 수 있어, 함수가 무엇을 반환하는지 명확하게 드러낼 수 있습니다. - 더 많은 로직 포함
함수 본문 안에 여러 문장과 로직을 자유롭게 포함시킬 수 있습니다.
단점
- 가독성 감소
불필요한 세부 사항이 드러남으로써 가독성이 감소할 수 있습니다. - 흐름 제어의 필요
조건문, 반복문 등을 이용하여 흐름을 제어하는 것이 필요할 때가 있습니다.
Expression(표현식)
어떤 값을 생성하거나, 값을 조합하여 새로운 값을 만들어내는 코드 구조를 나타냅니다.
결과적으로 어떤 값으로 평가됩니다.
const addTwoNumbersExp = (x: number, y: number): number => x + y;
- 항상 어떤 값을 반환합니다.
- 함수 호출, 변수 할당 등이 Expression의 예시입니다.
- Expression은 Statement의 부분이 될 수 있습니다.
장점
- 간결한 코드
함수의 시그니처를 간결하게 표현할 수 있어 가독성이 향상됩니다. - 타입 명시의 간소화
함수의 타입을 변수에 할당함으로써, 반복적인 타입 명시를 피할 수 있습니다.
단점
- 간단한 로직에 적합
한 줄 정도의 간단한 로직을 처리할 때 적합하며, 복잡한 로직은 표현식으로 표현하기 어려울 수 있습니다. - 읽기 어려운 로직 남용
지나치게 복잡한 로직을 표현식으로 남용하면 가독성이 오히려 감소할 수 있습니다.
Statement와 Expression(문장과 표현식)
function add(x: number, y: number): number {
return x + y;
}
function subtract(x: number, y: number): number {
return x - y;
}
function multiply(x: number, y: number): number {
return x * y;
}
function divide(x: number, y: number): number {
return x / y;
}
위의 코드는 함수를 선언하고 함수 본문 안에 실제 동작하는 문장이 포함되어 있습니다.
이런 함수 정의 방식은 statement로 분류됩니다.
type CalculationType = (x: number, y: number) => number;
const add2: CalculationType = function(x, y) {
return x + y;
}
const subtract2: CalculationType = function(x, y) {
return x - y;
}
const multiply2: CalculationType = function(x, y) {
return x * y;
}
const divide2: CalculationType = function(x, y) {
return x / y;
}
여기서는 함수를 변수에 할당하는 방식으로 함수를 정의했습니다. 이것이 Experssion입니다.
CalculationType이라는 함수 타입을 정의하고, 이 타입을 사용하여 변수에 할당했습니다.
이로써 시그니처 타입을 간결하게 표현할 수 있습니다.
다 명시를 해주는 것보다 expression을 사용해 가지고 이렇게 한 번만 함수의 시그니처를 타입으로 선언한 다음 반복적으로 사용해 주는 게 더 깔끔하고 유리할 것이라고 생각합니다.
'Backend > TypeScript' 카테고리의 다른 글
| [TypeScript] Type vs Interface (0) | 2024.01.10 |
|---|---|
| [TypeScript] type predicate (타입 프리디케이트) (0) | 2024.01.07 |
| [TypeScript] Overloading 오버로딩 (0) | 2023.12.30 |
| [TypeScript] 함수 시그니처 타입으로 선언하기 (0) | 2023.12.22 |
| [TypeScript] 함수 정의하기 (0) | 2023.12.16 |