본문 바로가기
Front-End, CS 스터디/항해99 - JavaScript 스터디

[자바스크립트 JavaScript] 느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점은 무엇이고 보완할 수 있는 방법에는 무엇이 있을지

by 제니운 2022. 7. 18.
728x90

✅ 느슨한 타입(lossely typed)의 동적(dynamci)언어의 문제점

 

동적타입 언어(Dynamically typed languages)는 컴파일 시 자료형을 정하는 것이 아니라 런타임시 결정이 된다.

다음과 같이 타입 없이 변수만 선언하여 값을 지정할 수 있다.

 

def num = 123 //groovy에서는 타입이 정해지지 않은 변수를 선언할때 def를 사용합니다.

num = "일이삼"

 

위의 예시에서 타입 선언이 없었지만, num이 123이란 숫자로 선언이 된다.

두 번째 줄에 num을 String으로 다시 선언하더라도 타입 에러 없이 컴파일이 된다.

 

- 동적 타입 언어 : Groovy, Python, JavaScript, Ruby, Smalltalk, Lisp, Objective-C, PHP, Prolog 등이 있다.

 

1️⃣ 장점 

 

1) 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에, 유연성이 높다.

2) 컴파일시 타입을 명시해주지 않아도 되기 때문에, 빠르게 코드를 작성할 수 있다.

 

2️⃣ 단점

 

1) 실행 도중에 변수에 예상치 못한 타입이 들어와 타입에러가 발생할 수 있다.

// 동적타입 언어는 런타임 시 확인할 수 밖에 없기 때문에, 많은 기능 명세서와 API가 오고 가는 대형 프로젝트(혹은 협업시)에서 타입이 올바른지 체크하는 것이 굉장히 까다롭기 때문에 배포 시 예상치 못한 문제와 직면할 수 있다.

 

// 백엔드 개발자가 전달한 명세서 예시
{ 
id: number,
product_name: string, 
price: number
}

// 프런트 개발자가 전달한 데이터 예시
{ 
id: 12345,
product_name: 'water melon', 
price: '12,000'
}

😥price의 타입이 다르기 때문에 오류가 발생한다!😥

 

✅ 보완할 수 있는 방법

 

1️⃣ TypeScript 사용

 

👌 TypeScript 타입 스크립트란?

- 자바스크립트에 타입을 부여한 "정적 타입 언어"

 

- 타입스크립트를 브라우저에서 실행하려면 파일을 변환하는 트랜스 파일 과정을 거쳐서 사용한다. 공식적으로는 트랜스 파일이 아닌 컴파일 된다고 표현한다.

 

- 컴파일의 경우 한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것을 뜻하는 반면, 트랜스 파일의 경우 한 언어로 작성된 소스 코드를 비슷한 수준의 다른 언어로 변환한다는 차이가 있다.

 

// 예를 들어, Java를 컴파일 하면 bytecode가 출력되지만 C++를 트랜스 파일하면 C가 출력되며, TypeScript를 트랜스 파일 하면 JavaScript가 출력된다. 하지만, 공식적으로 컴파일된다고 표현하기 때문에 컴파일로 용어를 사용하면 된다.

 

- 이런 정적 타입 언어는, 런타임 이전에 타입이 올바른지에 대한 검사를 시행하며, 동적타입 언어는 런타임에 프로그램의 타입이 올바른지에 대한 검사를 실행한다. 만약 레퍼런스 오류를 유발하는 코드가 존재한다면, 정적 언어는 컴파일하는 과정에서 오류를 출력하는 반면, 동적 언어는 해당 구문이 실행되는 시점에서 오류를 출력한다.

 

 

출처: https://devuna.tistory.com/82 [튜나 개발일기:티스토리]

출처 : https://overcome-the-limits.tistory.com/357

 

 

728x90