동일성과 동등성

Glen·2023년 3월 29일
0

배운것

목록 보기
4/37

동일성동등성이 뭘까?

우선 개념적으로 알아보자.

두 개체가 있을 때

동일성(同一性, identity)은 두 개체가 완전하게 동일하다는 것을 의미한다.

즉, 두 개체는 정확히 같은 것이며, 어떤 면에도 차이가 없다.

예를 들어, “A는 A이다”는 동일성의 예이다.

동등성(同等性, equivalence)은 두 개체가 서로 다르지만, 어떤 관점에서는 같다는 것을 의미한다.

예를 들어, 1+22+1은 서로 다른 식이지만, 두 개체는 3과 동등하다.

그렇다면 프로그래밍에서 동일성동등성이 뭘까?

프로그래밍에서의 동일성은 두 변수가 동일한 객체를 참조할 때 동일성을 사용하며, 두 변수의 값이 같은지 여부를 확인할 때는 동등성을 사용한다.

자바에서의 동일성동등성은 다음과 같다.

동일성

자바에서 동일성== 연산자를 사용하여 비교한다.

두 객체의 레퍼런스(참조)가 같은지 확인한다.

즉, 두 객체가 같은 객체를 참조하고 있는지를 비교한다.

String a = new String("Hello");
String b = new String("Hello");

a == b // false

동등성

자바에서 동등성equals()메서드를 사용하여 비교한다.

두 객체의 값(정보)이 같은지 확인한다.

즉, 두 객체가 같은 값을 가지고 있는지 비교한다.

String a = new String("Hello");
String b = new String("Hello");

a.equals(b) // true

여기서 끝?

아니다.

동등성을 비교하려면 하나의 작업을 더 해야 한다.

바로 eqauls()메서드를 재정의(override)해줘야 한다.

Object 클래스에서 상속받은 equals()메서드를 사용하며 객체의 동등성을 비교한다.

즉, == 연산자와 동일하게 객체의 참조값(레퍼런스)을 비교한다.

따라서, 동등성을 비교하려면 equals()을 재정의하여 객체의 내용이 같은지를 비교하는 방식으로 재정의해야 한다.

class MyString {
		private String value;
		
		@Override
		public boolean equals(Object o) {
		    if (this == o) {
		        return true;
		    }
		    if (!(o instanceof MyString)) {
		        return false;
		    }
		    MyString myString = (MyString) o;
		    return Objects.equals(value, myString.value);
		}
}

다음과 같이 사용자 정의 클래스인 MyString 클래스의 경우 동등성을 비교할 때 다음과 같이 equals() 메서드를 재정의 해야 한다.

하지만 이렇게 직접 재구현 코드를 작성하는 것은 매우 번거롭고 실수할 여지가 많다.

따라서 IDE에서 제공하는 자동완성 기능을 사용하여 equals() 메서드를 재정의 하는 것이 바람직하다.

profile
꾸준히 성장하고 싶은 사람

0개의 댓글