본문 바로가기
카테고리 없음

[javascript] 자바스크립트의 동등 연산자 (equality)

by 왕 달팽이 2019. 5. 20.
반응형

자바스크립트(javascript)라는 언어의 가장 큰 특징 중 하나가 '타입 선언'이 필요없다는 점이다. 자바나 C 같은 언어는 정작 타입 언어로 변수 선언에 타입을 명시해야한다. 이 후 해당 변수에 호환 되지 않는 타입을 사용할 때 컴파일 에러가 발생한다.

int foo = 10;

foo = 10.3f // Error!!

foo = (int)10.3f // OK!!

위 코드를 예로 들면, int foo 로 선언된 변수에는 정수형 데이터만 담을 수 있다. 만약 1.02f 같은 실수형 데이터를 할당하면 컴파일 에러가 발생한다. 강제로 입력하기 위해서는 타입 변환(Type Casting)을 해야한다. 자바나 C 같은 언어의 기초 단계에서 배우는 내용이다.

 

하지만 자바스크립트는 이런 변수 타입이 없다. 자바스크립트의 변수 타입은 미리 선언할 필요가 없고, 값을 변수에 할당하는 순간 결정된다. 이러한 특징을 가진 프로그래밍 언어를 '느슨한 타입(loosely typed)' 혹은 '동적 타이핑(dynamic typing)' 언어라고 한다. 

var foo = 10;
var foo = 10.3;
var foo = "10.3";

자바 스크립트에서는 이렇게 변수의 타입이 런타임(Runtime)에 결정된다.

 

자바스크립트에서 동등 연산자

자바스크립트에서 변수의 타입이 런타임에 결정되기 때문에 비교연산과 동등 연산에서 좀 더 생각해봐야 할 것들이 있다. 예를 들어 다음 함수를 생각해보자.

function isProducer(role) {

    if (role == "producer")
        return true;
    else
         return false;
}

대충보면 변수를 입력받아서 "producer"라는 문자열이면 true 를 리턴해주는 함수다. 여기서 생각해봐야 할 점은 role 변수의 타입이다. 자바나 C에서는 미리 프로토타입이 있어서 변수의 타입을 코드만보고도 알 수 있다. 하지만 자바스크립트에서는 isProducer("1")로 입력할 때와 isProducer(1)로 입력할 때의 role 변수 타입이 서로 다르다. 따라서 if (role == "producer") 부분의 role 변수의 타입은 알 수 없다.

 

자바 스크립트에서는 '==' 연산에 대해서 비교 대상인 두 데이터를 동일한 데이터로 변환을 시켜서 비교한다. 즉,  1 == "1" 은 두 데이터를 모두 "1" 로 맞춰놓고 비교를 하기 때문에 true를 리턴한다.

 

하지만 판단의 기준에 타입까지 고려하고 싶은 경우가 있다. 1 이라는 데이터와 "1" 이라는 데이터는 의미는 같을지 몰라도 타입은 분명 다르다. 타입이 다른 경우를 거르기 위해서는 '===' 연산을 사용하면 된다. 1 === "1" 은 타입이 다르기 때문에 false 다.

 

일반적으로는 '==='를 이용한 엄격한 비교 연산을 사용하길 권장한다.

반응형

댓글