타입스크립트 기초 - 21

Stulta Amiko·2022년 8월 12일
0

타입스크립트 기초

목록 보기
21/24
post-thumbnail

nullable 타입과 프로그램 안정성

자바스크립트와 타입스크립트는 변수가 초기화되지 않으면 undefined 라는 값을 기본으로 지정한다.
하지만 비슷한의미에 null 자료형도 존재한다.
타입스크립트에서는 null자료형과 undefined 자료형이 있다.
예전에 프로젝트를 할때 null과 undefined 의 차이점에대해서 들어본적이 있는것 같다.
먼저 null은 잘못으로 인한 발생값이 아닌 무언가에 의한 고의적인 값으로 알고있다.
undefined의 경우는 값을 지정하지 않거나 무언가 잘못되었을때 발생한다.
잘모르겠다 확실한건 둘이 다르고 이런 뉘앙스를 띄는거같다.

이 nullable 타입은 프로그램이 동작할 떄 프로그램을 비정상적으로 종료시키는 주요 원인이 된다.
프로그램의 안전성을 해치게 된다는 뜻이다 따라서 함수형 언어들은 이를 방지하기 위해 연산자나 클래스를 제공하기도 한다.

옵션 체이닝 연산자

변수가 선언만 되고 초기화 하지않으면 실행했을때 오류가 발생하면서 비정상적인 종료가 발생하게된다.

이런 오류는 프로그램의 안전성을 해치므로 프로그래밍 언어 설계자들은 옵션 체이닝 연산자나 널 병합 연산자를 제공한다.

interface IPerson{
    name: string,
    age?: number
}

let person: IPerson
console.log(person.name)

이런식으로 코드를 작성한다면 오류가 발생하지만

interface IPerson{
    name: string,
    age?: number
}

let person: IPerson
console.log(person?.name)

위와같이 작성하게된다면
오류가 발생하지 않는것을 알 수 있다.

옵션 체이닝 연산자는 세이프 네비게이션 연산자라도 하는데

type ICoordinates = {longitude: number}
type ILocation = {country: string, coords?: ICoordinates}
type IPerson = {name: string, location?: ILocation}

let person: IPerson = {name: 'Jack'}
let longitude = person?.location?.coords?.longitude
console.log(longitude)

위와 같이 간결하게 구현할 수 있기 때문이다.

type ICoordinates = {longitude: number}
type ILocation = {country: string, coords?: ICoordinates}
type IPerson = {name: string, location?: ILocation}

let person: IPerson = {name: 'Jack'}
if(person && person.location && person.person.location.coords){
	longitude = person.location.coords.longitude
    }
console.log(longitude)

와 같이 구현해야 하기 때문이다.

널 병합 연산자

자바스크립트는 옵션 체이닝 연산자를 표준으로 채택하면서 이와 동시에 물음표 기호 두개를 연달아 이어 붙인 ?? 널 병합 연산자도 표준으로 채택했다.

type ICoordinates = {longitude: number}
type ILocation = {country: string, coords?: ICoordinates}
type IPerson = {name: string, location?: ILocation}

let person: IPerson = {name: 'Jack'}
let longitude = person?.location?.coords?.longitude ?? 0
console.log(longitude)

위 코드에서 널 병합 연산자를 사용해서 만약 nullable 한 경우 0으로 초기화하는 코드를 만들었다.
출력결과는 0이다.

0개의 댓글