Wanna be Brilliant Full-Stack Developer

'==' 와 '==='의 차이점 본문

Some Memos/JQUERY & JAVASCRIPT

'==' 와 '==='의 차이점

Flashpacker 2023. 12. 14. 17:13

'==' 와 '==='의 주된 차이점은 무엇인가? 

 

JavaScript에서 `==`와 `===`는 비교 연산자로 사용됩니다.
 주된 차이점은 동등성 비교 시 자료형 체크 여부입니다.


1. `==` (동등 연산자):
   - 값만을 비교하며 자료형은 비교하지 않습니다.
   - 자료형이 다르더라도 변환하여 값이 같으면 true를 반환합니다.

   '' == null;         // true (값이 비어있는 문자열은 null로 변환됨)
   0 == false;         // true (숫자 0은 불리언 false로 변환됨)
   '5' == 5;           // true (문자열 '5'는 숫자 5로 변환됨)


2. `===` (일치 연산자):
   - 값과 자료형까지 엄격하게 비교합니다.
   - 자료형이 다르면 무조건 false를 반환합니다.

   '' === null;        // false (빈 문자열은 문자열이므로 자료형이 다름)
   0 === false;        // false (숫자와 불리언은 자료형이 다름)
   '5' === 5;          // false (문자열과 숫자는 자료형이 다름)


따라서, `===`를 사용하면 값과 자료형이 완전히 일치하는 경우에만 true가 반환되므로 더 엄격한 비교가 이루어집니다. 
이를 통해 예기치 않은 형변환으로 인한 오류를 방지할 수 있습니다. 일반적으로 `===`를 사용하는 것이 좋습니다.

 

 

`!=`와 `!==`는 각각 동등하지 않음과 엄격히 동등하지 않음을 나타내는 비교 연산자입니다.

1. `!=` (부등 연산자):
   - 값만을 비교하며 자료형은 고려하지 않습니다.
   - 값이 다르면 true를 반환합니다.

   '' != null;        // false (값이 비어있는 문자열은 null로 변환됨)
   0 != false;        // false (숫자 0은 불리언 false로 변환됨)
   '5' != 5;          // false (문자열 '5'는 숫자 5로 변환됨)



2. `!==` (일치하지 않는 연산자):
   - 값과 자료형이 모두 일치하지 않아야 true를 반환합니다.
   - 자료형이 다르거나 값이 다르면 true를 반환합니다.

   '' !== null;       // true (빈 문자열은 문자열이므로 자료형이 다름)
   0 !== false;       // true (숫자와 불리언은 자료형이 다름)
   '5' !== 5;         // true (문자열과 숫자는 자료형이 다름)




따라서, `!==`를 사용하면 값과 자료형이 모두 일치하지 않아야 true가 반환되므로 더 엄격한 부등호 비교가 이루어집니다. 이를 통해 예기치 않은 형변환으로 인한 오류를 방지할 수 있습니다.


 

하지만 자바에서는 != 연산자와 == 연산자가 있지만

둘다 값만 비교를 하고 자료형을 변환하여 비교는 하지 않는다.

 

 

Java에서 `==` 연산자는 기본 자료형(primitive types)의 경우 값 비교를 수행하며, 참조 자료형(reference types)의 경우 참조값 비교를 수행합니다. 자료형을 변환하지 않습니다.

1. **기본 자료형 (Primitive types):**

   int a = 5;
   int b = 5;
   System.out.println(a == b);  // true



   기본 자료형은 값이 직접 비교되므로 값이 같으면 `true`를 반환합니다.

2. **참조 자료형 (Reference types):**

   String str1 = new String("Hello");
   String str2 = new String("Hello");
   System.out.println(str1 == str2);  // false



   참조 자료형은 객체의 참조값을 비교하므로, 동일한 값을 가진 두 객체라도 `new` 키워드로 생성되면 다른 객체가 됩니다. 따라서 위의 예시에서는 `false`가 출력됩니다.

그러나 문자열(String)은 예외적으로 `==` 연산자를 사용하여 값 비교가 가능합니다. 이는 Java에서 문자열 리터럴이 상수 풀(Constant Pool)에 캐시되어 같은 문자열 리터럴을 공유하기 때문입니다.

String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2);  // true



위의 코드에서는 `true`가 출력됩니다. 하지만 이는 문자열 리터럴에만 해당하며, `new String()`과 같이 명시적으로 객체를 생성하면 `==`로 비교할 때 주의가 필요합니다. 
이런 경우에는 `equals()` 메서드를 사용하여 값을 비교하는 것이 권장됩니다.