티스토리 뷰
본 게시물은 프로그래머스 FOO님의 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴을 듣고 작성된 게시물입니다.
📣 동일성과 동등성
동일성 : 비교 대상이 실제로 똑같은 대상이어야 함(== 연산자 사용)
동등성 : 비교 대상이 같은 값이라고 우리가 정의한 것(equals() 오버라이딩)
동일한 인스턴스는 동등하다.
public class SomeObject {
private int intField;
private String stringField;
public SomeObject(int intField, String stringField) {
this.intField = intField;
this.stringField = stringField;
}
public int getIntField() {
return intField;
}
public String getStringField() {
return stringField;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SomeObject that = (SomeObject) o;
return intField == that.intField && Objects.equals(stringField, that.stringField);
}
}
> equals(Object o) 메소드를 오버라이딩 한 것(intellij의 자동 생성 기능 활용)
❔ equals() 메소드
equals() 메소드는 Object 클래스의 메소드이다. Object 클래스는 자바의 모든 클래스의 부모로 모든 클래스는 Object 클래스를 상속받는다.(extends Object)
public static void main(String[] args) {
SomeObject someObject1 = new SomeObject(1, "equalsTest");
SomeObject someObject2 = new SomeObject(1, "equalsTest");
SomeObject anotherObject = new SomeObject(100, "wow");
SomeObject someObject3 = someObject1;
// 동일성 비교
System.out.println(someObject1 == someObject2);
// 동일성 비교
System.out.println(someObject1 == someObject3);
// 동등성 비교 --> equals() 메소드를 오버라이딩하지 않으면 동등하더라도 false가 나온다.
System.out.println(someObject1.equals(someObject2));
// 동등성 비교
System.out.println(anotherObject.equals(someObject1));
}
1. == 을 사용한 동일성 비교 → someObject1과 someObject2는 모든 필드가 같지만 실제로 똑같은 대상이 아니다. 즉, 동일하지 않다. false
2. == 을 사용한 동일성 비교 → someObject3 = someObject1라고 정의해주었기 때문에 두 인스턴스는 동일하다.(동등성도 보장된다.) true
3. equlas() 메소드를 사용한 동등성 비교 → SomeObject class에 equals() 메소드가 오버라이딩 되어있다. 둘은 동등하다. true
4. equlas() 메소드를 사용한 동등성 비교 → 필드의 값이 다르므로 동등하지 않다. false

equals() 메소드가 오버라이딩 되어있어서 동등하다. 그렇다면 equals()메소드가 오버라이딩 되어있지 않다면?
위의 3번의 결과는 false가 나올 것이다.

'java' 카테고리의 다른 글
error-Your build is currently configured to use Java 17.0.7 and Gradle 6.8. (1) | 2023.12.05 |
---|---|
해시(Hash) (0) | 2023.11.26 |
stream API + Optional (0) | 2023.07.15 |
stream API (0) | 2023.07.10 |
람다식 (0) | 2023.07.09 |
- Total
- Today
- Yesterday
- uncheckedException
- lowerBound
- springboot
- Thymeleaf
- @Spring
- NPE
- N+1문제
- checkedException
- 오블완
- 생성자
- 유효성 검사
- Optional
- 메인메소드
- null
- @Value
- 동등성
- @ConfigurationProperties
- @NoArgsConstructor
- 이진탐색
- StreamAPI
- JPA
- Spring
- 일급컬렉션
- 자바
- upperBound
- id생성전략
- 백준
- 티스토리챌린지
- Java
- ddl-auto
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |