Backend/TypeScript

[TypeScript] Statement와 Expression(문장과 표현식)

누구세연 2024. 1. 6. 11:31

TypeScript 관점에서 statement와 experssion의 차이

그리고 expression(표현식)을 사용하는 게 더 좋은지에 대해서 한번 알아보도록 하겠습니다.

 

Statement(문장)

프로그램에서 어떤 작업이 이루어져야 하는지를 나타냅니다.

주로 어떤 동작이나 조건을 수행하도록 컴퓨터에게 명령하는 역할을 합니다.

function addTwoNumbers(x: number, y: number): number {
    return x + y;
}
  • 반환 값이 있을 수도, 없을 수도 있습니다.
  • 주로 함수나 조건문, 반복문 등이 Statement의 예시입니다.

장점

  1. 명시적인 반환
    명시적으로 return 키워드를 사용하여  반환값을 지정할 수 있어, 함수가 무엇을 반환하는지 명확하게 드러낼 수 있습니다.
  2. 더 많은 로직 포함
    함수 본문 안에 여러 문장과 로직을 자유롭게 포함시킬 수 있습니다.

단점

  1. 가독성 감소
    불필요한 세부 사항이 드러남으로써 가독성이 감소할 수 있습니다.
  2. 흐름 제어의 필요
    조건문, 반복문 등을 이용하여 흐름을 제어하는 것이 필요할 때가 있습니다.

 

Expression(표현식)

어떤 값을 생성하거나, 값을 조합하여 새로운 값을 만들어내는 코드 구조를 나타냅니다.

결과적으로 어떤 값으로 평가됩니다.

const addTwoNumbersExp = (x: number, y: number): number => x + y;
  • 항상 어떤 값을 반환합니다.
  • 함수 호출, 변수 할당 등이 Expression의 예시입니다.
  • Expression은 Statement의 부분이 될 수 있습니다.

장점

  1. 간결한 코드
    함수의 시그니처를 간결하게 표현할 수 있어 가독성이 향상됩니다.
  2. 타입 명시의 간소화
    함수의 타입을 변수에 할당함으로써, 반복적인 타입 명시를 피할 수 있습니다.

단점

  1. 간단한 로직에 적합
    한 줄 정도의 간단한 로직을 처리할 때 적합하며, 복잡한 로직은 표현식으로 표현하기 어려울 수 있습니다.
  2. 읽기 어려운 로직 남용
    지나치게 복잡한 로직을 표현식으로 남용하면 가독성이 오히려 감소할 수 있습니다.

 

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을 사용해 가지고 이렇게 한 번만 함수의 시그니처를 타입으로 선언한 다음 반복적으로 사용해 주는 게 더 깔끔하고 유리할 것이라고 생각합니다.