정적 의존관계와 동적 의존관계
정적 의존관계 : 컴파일 시간에 결정되며, 클래스 간의 관계를 의미한다. 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.
동적 의존관계 : 프로그램을 실행하는 런타임에 확인할 수 있는 의존관계이다. 런타임에 어떤 인스턴스를 사용하는지를 나타내는 것을 말한다.
단순히 의존관계 또는 어디에 의존한다고 하면 주로 정적 의존관계를 의미한다.
자바는 두 객체가 같다라는 표현을 2가지로 분리해서 제공한다.
- 동일성(Identity) : == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인
- 동등성(Equality) : equals( ) 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인
동일성은 물리적으로 같은 메모리에 있는 객체 인스턴스인지 참조값을 확인하는 것이고,
동등성은 논리적으로 같은지 확인하는 것이다. => 이때 equals ( ) 메서드를 사용한다.
equals() 메서드를 오버라이딩해야 하는 이유
대부분의 경우, 객체의 논리적 동등성을 비교할 때는 기본 구현만으로는 충분하지 않다. 예를 들어, Person 클래스가 있다고 가정해보면, 두 Person 객체가 같은 이름과 나이를 가지고 있다면 논리적으로 같은 객체라고 볼 수 있다. 이럴 때는 equals() 메서드를 오버라이딩해야 한다.
equals() 메서드 오버라이딩하기
equals() 메서드를 오버라이딩할 때는 몇 가지 규칙을 따르는 것이 좋다.
- 반사성 (Reflexive): x.equals(x)는 항상 true여야 한다.
- 대칭성 (Symmetric): x.equals(y)가 true이면, y.equals(x)도 true여야 한다.
- 추이성 (Transitive): x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)도 true여야 한다.
- 일관성 (Consistent): x.equals(y)가 여러 번 호출되어도 항상 같은 결과를 반환해야 한다.
- 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 |