TypeScript vs JavaScript

Static Types(set during development) - 오류를 개발하는 중간에 체크 vs Dynamic types(resolved at runtime) - 오류를 런타임을 하여야 알수 있음

 

프로그램이 유용하려면, 가장 간단한 데이터 단위로 작업 할 수 있어야 하며, TypeScript에서는 JavaScript에서 기대하는 것과 동일한 타입을 지원하기 위해 추가적인 열거 타입이 제공된다.

 

TypeScript에서 프로그램 작성을 위해 제공되는 기본타입 

JavaScript 기본 자료형을 포함(Superset), ECMAScript 표준에 따른 기본 자료형 6가지

 

- boolean, number, string, null, undefined, symbol(ES6이후에 추가)

- Array(Object 형)

- 프로그래맹을 도울 몇 가지 타입(any, void, never, unknown, enum)

 

Primitive types

오브젝트와 레퍼런스형태가 아닌 실제 값을 저장하는 자료형을 말한다. 즉 메모리에 주소가 아닌 선언된 자료형 그대로 데이터를 저장하고 있는 자료형을 말하며, 자바스크립트 처리 방식으로 Primitive 형의 내장 함수를 사용가능하다. 

 

 

 

 

'TypeScript' 카테고리의 다른 글

[TypeScript] 타입스크립트란?  (0) 2023.01.16

자바스크립트에 타입이 추가된 개념?

  • 자바 스크립트에 타입을 추가하여 자바스크립트를 확장 시킨다.
  • 실행 전 자바스크립트를 해석함으로 사용자의 소스를 수정하는 시간을 절약할 수 있다.
  • 모든 브라우저, 운영체제, 자바스크립트 실행 환경에서 제공하는 오픈소스이다.

TypeScript = Language

 

  • 자바스크립트에 있는 기능을 강화시키고 타입이라는 개념이 추가
  • 순수한 자바스크림트로 컴파일 (ts -> js)
  • 타입스크립트는 'Programming Language 언어'
  • 타입 스크립트는 'compiled Language'
    1. 전통적인 Compiled Language와는 다른 점이 많음
    2. 'Transpile'이라는 용어를 사용하기도 함

 

※ 자바스크립트는 'Interpreted language' 

 

 

Compiled  vs  Interpreted

컴파일이 필요함 컴파일이 필요하지 않음
컴파일러가 필요함 컴파일러가 필요하지 않음
컴파일하는 시점함 컴파일하는 시점하지 않음
컴파일된 결과물을 실행 코드를 실행하는 시점
컴파일된 결과물을 실행하는 시점 코드를 실행하는 시점 = 런타임



타입스크립트 프로젝트 설정

 

// 프로젝트 생성
mkdir tsc-project
cd tsc-project

// package.json 파일 생성
npm init -y

// 타입스크립트는 런타임에서 필요하지 않음으로 -D를 붙인다.
npm i typescript -D

// tsconfig.json 파일 생성
npx tsc -init

package.json

npm 환경에서 프로젝트에서 필요한 패키지들을 관리

 

typeScript

프로젝트 컴파일하는 데 필요한 루트 파일과 컴파일러 옵션을 지정

 

'TypeScript' 카테고리의 다른 글

[TypeScript] TypeScript vs JavaScript, Primitive Types  (0) 2023.01.17

변수에 객체를 할당하고 아래와 같이 변수를 복사하고 첫번째 할당한 변수의 값을 변경하면, 복사한 변수의 값도 함께 변경 된다.

 

const user = { name: "lee", age: 20, email: ["test@naver.com"] };
const test01 = user;

console.log(user);
console.log(test01);

user.name = "kim";

console.log(user);
console.log(test01);

 

결과

{name: 'lee', age: 20, email: Array(1)}
age:20
email:['test@naver.com']
name:"kim"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(1)}
age:20
email:['test@naver.com']
name:"kim"
[[Prototype]]:Object

{name: 'kim', age: 20, email: Array(1)}age: 20
email:['test@naver.com']
name:"kim"
[[Prototype]]:Object

{name: 'kim', age: 20, email: Array(1)}
age: 20
email:['test@naver.com']
name:"kim"
[[Prototype]]:Object

 

객체의 경우 같은 주소를 참조하기 때문에 원래의 데이터의 값이 바뀌면 복제된 변수도 같은 주소를 참조하기 때문에 같은 값이 출력이 된다.

 

별도의 주소를 할당 받아 데이터를 복제하는 방법으로 두 변수 사이에 영향을 받지 않게 할수 있다.

 

 

1. 얕은 복사(shallow copy)

 

사용법

const user = { name: "lee", age: 20, email: ["test@naver.com"] };

const test02 = Object.assign({}, user);
const test03 = { ...user }; 

user.name = "kim";

console.log(user);
console.log(test02);
console.log(test03);

 

결과

{name: 'kim', age: 20, email: Array(1)}
age:20
email:['test@naver.com']
name:"kim"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(1)}
age:20
email:['test@naver.com']
name:"lee"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(1)}
age:20
email:['test@naver.com']
name:"lee"
[[Prototype]]:Object

얕은 복사일 경우 객체 내에 존재하는 변수가 변경이 되어도 복사된 변수에서는 다른 메모리 주소를 사용하기 때문에 값이 변경 되지 않는것을 확일할 수 있다.

 

하지만 얕은 복사내에 객체 변수가 존재할 경우 내부에 추가하는 값은 변경된다.

 

const user = { name: "lee", age: 20, email: ["test@naver.com"] };

const test02 = Object.assign({}, user);
const test03 = { ...user }; 

user.email.push("test@gmail.com");

console.log(user);
console.log(test02);
console.log(test03);

 

결과

{name: 'lee', age: 20, email: Array(2)}
age:20
email:(2) ['test@naver.com', 'test@gmail.com']
name:"lee"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(2)}
age:20
email:(2) ['test@naver.com', 'test@gmail.com']
name:"lee"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(2)}
age:20
email:(2) ['test@naver.com', 'test@gmail.com']
name:"lee"
[[Prototype]]:Object

얕은 복사일 경우는 복사가 되었더라도 객체 내에 또 객체가 존재할 경우에는 같은 메모리 주소를 참조하고 있기 때문에 값이 변경이 된다.

 

이런 경우는 lodash에서 제공하는 깊은 복사를 사용하면 된다.

 

2. 깊은복사(Deep copy)

사용법

const user = { name: "lee", age: 20, email: ["test@naver.com"] };
const test04 = _.cloneDeep(user);

user.email.push("test@gmail.com");

console.log(user);
console.log(test04);

 

결과

{name: 'lee', age: 20, email: Array(2)}
age:20
email:(2) ['test@naver.com', 'test@gmail.com']
name:"lee"
[[Prototype]]:Object

{name: 'lee', age: 20, email: Array(1)}
age:20
email:(2) ['test@naver.com']
name:"lee"
[[Prototype]]:Object

깊은 복사 일 경우는 객체내에  타입이 객체인 변수가 변경되더라도 복사된 변수의 값이 변경되지 않는것을 알 수 있다.

'JavaScript' 카테고리의 다른 글

[JavaScript] Lodash 란?  (0) 2023.01.11
[JavaScript] 타이머 함수  (0) 2023.01.02
[JavaScript] 객체의 타입얻기  (0) 2022.12.23

+ Recent posts