Object 클래스
Object 클래스
모든 객체의 부모
1
2
3
4
5
6
7
8
9
package lang.object;
//부모가 없으면 묵시적으로 Object 클래스를 상속받는다.
public class Parent {
public void parentMethod() {
System.out.println("Parent.parentMethod");
}
}
모든 클래스는 하나만 상속이 가능하지만 Object는 묵시적으로 상속이 가능하여 제외합니다.
Object 클래스가 최상위 부모 클래스인 이유
공통 기능 제공
객체의 정보, 비교, 어떤 클래스로 만들어졌는지 확인 등등 모든 객체에 필요한 기본 기능이 있습니다. 이런 기능을 클래스를 만들 때 마다 만들면 너무 번거롭기 때문에 Object 클래스에서 제공하도록 한 것 입니다.
toString(): 객체의 정보를 제공equals(): 객체의 같음을 비교getClass(): 객체의 클래스 정보를 제공- 기타 등등
다형성의 기본 구현
모든 자바 객체는 Object 타입으로 처리될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해줍니다.
OCP
- Open: 새로운 클래스를 추가하고,
toString()을 오버라이딩 해서 기능을 확장 할 수 있다. - Closed: 새로운 클래스를 추가해도
Object와toString()을 사용하는 클라이언트 코드는 변경되지 않는다.
equals()
동일성과 동등성
- 동일성(identity)
==두 객체의 참조가 같은가 - 동등성(Equality)
equals()논리적으로 동등한가
1
2
User a = new User("id-100") //참조 x001
User b = new User("id-100") //참조 x002
위 값은 동일성(==)은 False지만 동등성(equals())는 True입니다.
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
public class UserV2 {
private String id;
public UserV2(String id) {
this.id = id;
}
/*
@Override
public boolean equals(Object obj) { // 오류가 많은 아주 간단한 버전
UserV2 user = (UserV2) obj;
return id.equals(user.id);
}
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserV2 userV2 = (UserV2) o;
return Objects.equals(id, userV2.id);
}
}
Object의 equals()는 기본적으로 동일성(==)을 체크합니다. 필요에 따라 오버라이딩하여 사용하면 됩니다.
Intellij IDEA에서는 equals() 오버라이딩을 위와 같이 자동 생성 해줍니다.
참고로 equals()와 hashCode()는 보통 함께 사용됩니다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.