equals
equals는 객체와 객체가 같은 것인지 비교하는 API이다. 객체 간에 같고 다름은 필요에 따라서 달라질 수 있기 때문이다.
아래 코드를 살펴보면 14행과 15행의 결과 값은 모두 false가 나온다.
14행이 false가 나오는 이유는 s1과 s2가 서로 다른 객체이기 때문이고 15행이 false가 나오는 이유는 객체 간 동일성이 같지 않기 때문이다.

s1과 s2의 객체가 김탄이라는 값을 가지고 있기 때문에 저 두개의 객체가 같은 객체로 간주되길 바래 Object의 메소드 equals를 overriding하려고 한다.
아래 코드 중 9행 ~ 12행 코드는 (student)obj는 메소드 equals로 전달된 obj의 데이터 타입이 Object이기 때문에 이를 student 타입으로 강제 형 변환하는 코드이다. 아래 코드를 통해서 현재 객체의 변수 name과 equals의 인자로 전달된 객체의 변수 name을 비교한 결과를 boolean 값으로 리턴하고 있다.
이 값에 따라서 두 개의 객체는 같거나 다른 것이 된다.

메소드 equals에 대해 생활코딩 이고잉님이 권고하는 부분은 아래와 같다.
1. 객체 간에 동일성을 비교하고 싶을 때는 ==를 사용하지 말고 equals를 이용
2. equals를 직접 구현해야 한다면 hashCode도 함께 구현해야 함을 알고 이에 대한 분명한 학습을 한 후에 구현하자
3. equals를 직접 구현해야 한다면 eclipse와 같은 개발도구들은 equals와 hashCode를 자동으로 생성해주는 기능을 가지고 있다. 이 기능을 이용하는 것을 고려햐보자. 아래 그림을 참고하자.
4. 그 이유가 분명하지 않다면 비교 연산자 ==은 원시 데이터형을 비교할 때만 사용하자
* 원시 데이터 형이란? 자바에서 기본적으로 제공하는 데이터 타입으로 byte, short, int, long, float, double, boolean, char가 있다. 이러한 데이터 타입들은 new 연산자를 이용해서 생성하지 않아도 사용될 수 있다는 특징이 있다.
'TIL > Java' 카테고리의 다른 글
[Java] enum(enumerated type) (0) | 2022.02.07 |
---|---|
[Java] Clone (0) | 2022.02.01 |
[Java] toString (0) | 2022.02.01 |
[Java] finally (0) | 2022.01.27 |
[Java] 다형성(Polymorphism) (0) | 2022.01.27 |