JS자료형과 JS만의 특성 (동적언어, 형변환, 일치연산자, undefined와 null의 차이)

Mintaek·2022년 8월 11일

개념 정리

목록 보기
8/10
post-thumbnail

❓ JavaScript의 자료형과 JavaScript만의 특성은 무엇일까?


1. 느슨한 타입(loosely typed)의 동적(dynamic) 언어

💡 자바스크립트와 파이썬은 인터프리터 언어이며 자바는 컴파일 언어.

컴파일 언어는 코딩을 마치고 나면 프로그래밍 언어로 짠 코드를 컴파일이란 과정 통해서 다른 형태로 바꿔주게 된다. 이 컴파일이라는 작업을 거치고 나서 그 결과물을 실행하는 것이 컴파일 언어의 특성

인터프리터 언어는 코딩 후 다른 과정 없음. 개발자가 작성한 코드가 그대로 실행할 곳으로 보내져서 인터프리터라는 것을 통해 즉각적으로 기계어로 통역 되어 실행된다.

❓ 이것과 자료형의 관계?

자바는 컴파일언어
보통 컴파일 언어는 정적타입
인터프리터 언어는 동적타입의 자료형

  • 정적타입
    👉 변수 등에 지정된 자료형을 바꿀 수 없는 것
    ex) JAVA에서 int age =17; 로 지정하면 나중에 age = ”열일곱”; 이라 할 경우 error발생

  • 동적타입
    👉 변수에 얼마든 다른 자료형의 값을 넣을 수 있음

컴파일언어는 코드를 실행하기 전 즉, 개발 과정에서 컴파일이란 과정을 거치기 때문에 코드 중 철자나 문법상 오류가 잇을 때 이 단계에서 잡아낼 수 있음.

변수나 인자의 자료형이 달라지는 것도 이 단계에서 컴파일 오류로 걸러내버릴 수 있기 때문에 컴파일언어는 개발자에게 자료형의 일관성을 요구하는 정적타이핑에 보다 유리함

2. 느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점은 무엇이고 보완할 수 있는 방법에는 무엇이 있을까?

❗️ 동적타입 언어의 문제점, 보완점

간단한 코드를 짤 때는 편리하지만 프로젝트 규모가 커지면 숫자용 함수에 문자열이 들어가버리는 등 자료형이 잘못 들어감으로 인한 런타임 오류의 위험성이 커지게 됨.

코딩중에는 자료형의 일관성이 강제되지 않기 때문에 실행 시점이 되어서야 문제가 터져버릴 수 있기 때문에 동적타입을 쓰는 언어를 사용할 때는 자료형 때문에 발생할 수 있는 오류들에 신경써야함

Ex) 명시적변환등을 이용하여 정확하게 데이터 타입을 구분하여 계산.

3. ==, ===

=: 대입연산자

우항의 값을 좌항의 변수에 대입할 때 사용하는 것

== : 동등연산자

좌항과 우항을 비교해서 서로 값이 같으며 true, 다르면 false가 됨.
데이터 타입이 다르더라도 실질적으로 갖고있는 정보의 의미가 동일하다고 한다면 js는 그것을 같은 값으로 인정하는 연산자임.

===: 일치연산자

좌항과 우항이 정확하게 같을 때 true, 다르면 false가 됨.

일치연산자의 경우 같은 수를 표현하고 있더라도 데이터 형이 같은 경우에만 같다고 판단함

Ex) 
alert(1 == '1');  // true
alert(1 === '1') // false

일반적으로 프로그램밍에서 데이터라는 것은 매우 엄격하게 바라보는 대상임.

같은 정보 같은 의미를 가져도 데이터의 타입, 형식이 다르다면 그것을 전혀 다른것으로 인정하는 것이 일반적이 프로그래밍이였음.

JavaScript는 같은 의미일 경우에는 같은값으로 제공해주는 일치연산자의 기능을 제공

4.undefined와 null의 미세한 차이 비교.

💡 undifined와 null은 빈값

undefined

우리가 let, var, const등으로 변수를 지정할 때 메모리에는 변수공간이라는 것이 생김. 근데 이 변수공간은 빈곳이 아니라 데이터가 할당되기 전까지 undefined가 할당 되어있는 상태.
데이터타입은 undifined.

Ex) 
let num;
console.log(num);
undefined

그리고 이때 undefined는 num에 우리가 직접 입력하지 않고 자동으로 할당된(명시적 할당이 필요없는)값임.

null

null값은 사용자가 명시적으로 해당 변수의 공간이 비어 있음을 의미
데이터 타입은 null.

Ex)
let num = null;
Console.log(num);
null

5. JavaScript 형변환 : 암시적 변환, 명시적 변환

java script의 경우 자동형변환(암시적)이라는 기능이 제공.
예를 들어 문자열인 a변수를 숫자 2로 나누어도 js는 알아서 a를 숫자로 변환하여 처리.

let a = "80"
console.log(a/2)
40

하지만 이러한 자동형변환은 error를 발생시킬 위험이 큼.
우리는 a라는 변수에는 90을 b라는 변수에 80을 더한다면 이 숫자가 170이 될 것이라 생각하지만 각 변수가 문자열이라면 해당 숫자는 170이 아니라 9080이 출력됨.

문자열은 더하는 그대로 바로 뒤에 붙어서 나오기 때문.

let a = "90"
let b = "80"
console.log(a+b);
"8090"

이 같은 오류를 피하기 위해 의도를 가지고 원하는 타입으로 데이터를 변경하게 되는데 이것을 명시적 형변환이라고함

💡 명시적 형변환의 대표적 세가지

  • String(): 문자로 변환
  • Number(): 숫자로 변환
  • Boolean(): 불리언으로 변환 – true / false 출력

❗️ bollean의 특이사항

① 불리언은 괄호안에 숫자 0 or 빈문자열 “”, null, undefined가 올 경우 false를 출력하고 이외의 값은 모두 true를 출력.
② 불리언의 괄호에 숫자 0이 올경우에는 false를 문자열 “0”이 올 경우에는 true를 출력.
③ 불리언의 괄호에 “”가 들어올 경우에는 false를 출력하지만 “ “가 오면 true를 출력.

❗️ Number의 특이사항

Number()는 괄호안에 null이 올 경우에는 0을, undefined가 올 경우에는 NaN을 출력

profile
Slow and Steady Wins the Race

0개의 댓글