Type에 대해서 생각해보기.

산기슭곰발자·2024년 1월 22일


타입이다 (아니다)


TS에는 다양한 Type등을 지원한다. 괜히 TypeScript가 아니다. 다양한 타입들을 지원하게끔 되어있기때문에 개인적인 생각으로써는 TS는 '하나의 언어' 느낌보다는 JavaScript 의 컴파일러가 아닐까? 생각을 해본적이 있다. 오류를 감지하고 경고해주고 땍땍대고

자바스크립트에서 오는 변수의 타입은 기본적으로 콜론(:)뒤에 기재되며, 명시적으로 지정할 수 있다.

예를들어 age라는 변수를 작성했을 때 Js사용시에 혹은 일반적인 사람들에게 물어볼때는 당연하게도 (number)타입이라고 생각하겠지만 string이라고 생각하거나 지정해야 할 때가 오기 마련이다. ( 어디까지나 예를 든 부분이기에 억지인 부분이 없지않아 있다.)

const age : string

최신 젊은이들 언어로 '알잘딱깔센'하여 알아서 age는 number로 인식하면 좋으련만.. 했었지만, 추후에 코드들이 길어지고 내부함수를 서로 불러온다던지 함수를 여러번 사용하는경우에 nodeJS 서버를 실행시키면 아마 해당 오류를 많이 마주하게 될 것이다.

나는 number타입을 기대했는데(expected) 넌 string을 받아왔네? ㅎㅎ..error 

(또 짜증난다)

지멋대로 타입을 지레짐작하는 JS에서 TS로 발전되었다고 보면된다.
(연애할때도 지멋대로 지레짐작하는 남자는 대대로 인기가 없었다.)

다름이 아니라 오늘 TIL에 Type에 대한 기본적인 상식을 굳이 왜 게재했냐면은. 일반적인 boolean string number와 같은 타입들 이외에 TS를 들어오게되며, 최종프로젝트를 시작하며 enum타입에 대한 사용을 해보고싶어 사용했다가 실수아닌 실수(?) 를 맞이한 부분이 있었다.

enum : 열거형 데이터 타입

멤버라 불리는 명명된 값의 집합을 이루는 자료형

모르겠다
항상 느끼는거지만 개발자들의 용어는 너무나도 알아듣기가 힘들다.

간단하게 이해하자면

class User {

@Column 
name : string

@Column
age : string

@column
gender : enum
}
-------------------------
./gender.enum.ts

export enum gender {
  female,
  male
}

타입이 female, 혹은 male 일때 간단하게 열거형으로 데이터를 처리할 수 있는 좋은 장점이 있다고 채택하였으나 유지보수가 어려울 수 있다는 피드백을 받았다

현재 enum 타입으로 1, 2의 값을 준 상태로 데이터베이스에 어떠한 타입들을 열거하였을때 추후 다른 타입이 생기거나 문제가 발생했을때 데이터가 적지않을 때, 수백 수천개의 데이터가 존재할때 자연적으로 해당 타입들을 변환할 수 없고 일일히 모든 타입들에 대하여 대응하여 수정을 해야한다는 부분.

  1. 새로운 값 추가 수정의 어려움 : enum 자체는 정적이며 고정된 값의 집합을 나타내는 부분으로 새로운 값을 추가하거나 기존 값을 수정 할 경우 enum을 사용하는 모든 코드를 직접수정해야하는 부분이 있어 유지보수에 어려움을 느낄 수 있다.

  2. 1번과 일맥상통하는 부분이지만 Enum값에 코드가 의존하는 경우에는 Enum이 변경될 시 코드도 변경이 되어야하며 의존성을 최대한 가볍게 가져가야하는 코드 특성을 역행하는 부분으로 버그발생률이 올라갈 수 있다.

  3. enum값이 많거나 특정값에 의존하는 테스트 케이스 작성이 어려운 부분이 있다.

로 해석할 수 있겠다. 결과론적으로 해당 타입이 늘어날 수 있고 줄어들 수 있는 가변적인 타입이라면은 따로 별도의 table을 생성하여 table 해당 entity id로 관리를 해주는것이 편리하다는것을 알게되었다.

profile
곰처럼 개발해보자.

0개의 댓글