잉?

[Java] Object클래스, equals() 알아보기 본문

자바(Java)

[Java] Object클래스, equals() 알아보기

Jye_647 2023. 5. 26. 10:05

과제를 진행하면서 "=="와 "equals()"의 차이에 대해 잘 알아보고 넘어갔다 생각했는데

equals() 관련 글을 볼 때마다 혼란을 느꼈다.

그래서 다시 정리해보자 글을 남기게 되었다.


java.lang 패키지는 자바 프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.

그중 자주 사용되는 클래스가 Object이다.

 

Obejct 클래스란?

모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버(필드, 메서드)들은 모든 클래스에서 사용 가능하다.

 

오늘 알아볼 Object클래스의 메서드는 equals메서드이다.


equals메서드?

Object클래스의 equals메서드는 주소값을 비교한다.

Value val1 = new Value(10); => val1값 10이 들어가있는 공간의 주소(0x1234)
Value val2 = new Value(10); => val2값 10이 들어가있는 공간의 주소(0x5678)

Value 값들은 같지만 주소값을 비교하기에 각각 객체로 만들어진 val1, val2는 서로 다른 공간에 만들어지고,

다른 주소를 가지고 있기에 false값이 출력

 

Value val2 = new Value(10); => val2값 10이 들어가있는 공간의 주소(0x5678)
Value val3 = val2; => val3는 val2를 복사했기 때문에 val2와 같은 주소를 가리킨다.

위의 코드와 같은 경우 val3는 val2의 값들을 복사한 것이기에 같은 주소값이 들어간다. true값 출력

 

하지만 가리키는 주소값이 달라도 변수에 할당된 값이 동일하다고 판단될 때도 equals메서드를 사용한다.

재정의(오버라이딩)해서!

String과 Integer클래스 내부에는 이미 재정의 되어있기에 주소값이 달라도 할당된 값이 같다고 판단되면

true값을 return 한다. 


여기서 또 궁금한점 equals()와 ==연산자의 차이점은?

equals()는 앞서 말했든 주소값을 비교하지만 보통 재정의하여 할당된 값을 비교해 사용한다.

==연산자는 주소값을 비교한다. 이 친구도 마찬가지고 재정의하기 전의 equals()와 같은 기능을 하지만

할당된 값이 아닌 주소값을 비교한다는 점에서 오버라이딩한 equals메서드와 차이점을 보인다.


이렇게 간단히 equlas()와 ==연산자, Object클래스에 대해 알아봤다.

서로 연관된 부분이 많기에 하나를 배우면 둘을 안다는 점이 좋다.

메서드를 오버라이딩 한다는 말이 와닿지 않았는데 이제는 어느정도 이해가 가는 것 같다. 

Comments