Object
클래스가 최상위인 이유?
-> 객체의 정보, 비교, 확인 등 자주 사용하는 기본 기능들을 일일이 만들기 힘듬
-> 모든 객체에 필요한 공통기능을 편리하게 제공하기 위해서 만들어짐
-> 모든클래스에서 오버라이딩
을 통해 toString()
메소드를 재정의 할 수 있음
toString()
= 객체의 정보를 제공equals()
= 객체의 같음을 비교getClass()
= 객체의 클래스 정보를 제공💡 System.out,.println()
우리가 출력할 때 자주 사용하는 이 메서드는
Object
매개변수를 사용하고 내부에서 toString()
을 호출한다
✅ 정적 의존관계 vs 동적 의존관계
정적 의존관계
동적 의존관계
Car
인스턴스, Dog
인스턴스가 넘어옴동일성 : ==
연산자를 사용해서 두 객체의 참조
가 동일한 객체를 가리키는지 확인
동등성 : equals()
메서드를 사용해서 두 객체가 논리적으로 동등한지 확인
equals()
는 기본적으로 ==
으로 동일성 비교를 제공한다equals()
메서드를 재정의 해야함public class Animal{
private String id;
public Animal(String id){
this.id = id;
}
@Override // Object 메서드를 자식에서 재정의
public boolean equals(Object obj){
Animal animal = (Animal) obj;
boolean result = this.id.equals(animal.id); // 본인 객체 아이디와 인수로 넘어온 아이디를 비교
return result;
}
}
// main
Animal animal1 = new Animal("id-100");
Animal animal2 = new Animal("id-100");
System.out.println(animal1 == animal2); // false
System.out.println(animal1.equals(animal2)); // true (서로 다른 객체이지만 둘 다 같은 id를 가지고있다)
💡 동일 vs 동등
동일 : 물리적으로 같은 메모리에 있는 객체 인스턴스인지 참조값을 확인하는 것
동등 : 논리적으로 같은지 확인하는 것