Java

[인프런] equals( )

sejin2 2024. 6. 2. 20:50

정적 의존관계와 동적 의존관계

정적 의존관계 : 컴파일 시간에 결정되며, 클래스 간의 관계를 의미한다. 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.

동적 의존관계 : 프로그램을 실행하는 런타임에 확인할 수 있는 의존관계이다. 런타임에 어떤 인스턴스를 사용하는지를 나타내는 것을 말한다. 

단순히 의존관계 또는 어디에 의존한다고 하면 주로 정적 의존관계를 의미한다. 

 

자바는 두 객체가 같다라는 표현을 2가지로 분리해서 제공한다.

  • 동일성(Identity) :  == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인
  • 동등성(Equality) : equals( ) 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인

동일성은 물리적으로 같은 메모리에 있는 객체 인스턴스인지 참조값을 확인하는 것이고, 
동등성은 논리적으로 같은지 확인하는 것이다. => 이때 equals ( ) 메서드를 사용한다. 

 

 

equals() 메서드를 오버라이딩해야 하는 이유

대부분의 경우, 객체의 논리적 동등성을 비교할 때는 기본 구현만으로는 충분하지 않다. 예를 들어, Person 클래스가 있다고 가정해보면, 두 Person 객체가 같은 이름과 나이를 가지고 있다면 논리적으로 같은 객체라고 볼 수 있다. 이럴 때는 equals() 메서드를 오버라이딩해야 한다.

 

equals() 메서드 오버라이딩하기

equals() 메서드를 오버라이딩할 때는 몇 가지 규칙을 따르는 것이 좋다. 

  1. 반사성 (Reflexive): x.equals(x)는 항상 true여야 한다.
  2. 대칭성 (Symmetric): x.equals(y)가 true이면, y.equals(x)도 true여야 한다.
  3. 추이성 (Transitive): x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)도 true여야 한다.
  4. 일관성 (Consistent): x.equals(y)가 여러 번 호출되어도 항상 같은 결과를 반환해야 한다.
  5. null 아님 (Non-null): x.equals(null)은 항상 false여야 한다.

 

 

 

 

공부 내용: [인프런] 김영한의 실전 자바 - 중급 1편

'Java' 카테고리의 다른 글

Labelled Loop ( 이름을 가지는 반복문 )  (0) 2024.06.03
Enhanced for문  (0) 2024.06.03
[인프런] toString( )  (0) 2024.06.02
[인프런] Object 클래스  (0) 2024.06.02
[인프런] java.lang 패키지  (0) 2024.06.02