자바의 Object 클래스 역할을 왜 제대로 이해해야 할까?
Object 클래스는 객체 지향 프로그래밍의 핵심 원리를 이해하는 데 필수적이기 때문이다. Object 클래스의 개념과 역할, 주요 메서드를 살펴보며 Object 클래스와 객체 지향에 대해 알아보고자 한다.
Object 클래스와 상속
Object 클래스는 자바에서 모든 클래스의 최상위 부모 클래스 역할을 한다. 자바의 모든 클래스는 암묵적으로 Object 클래스를 상속받으며, 따라서 모든 객체는 Object 클래스를 사용할 수 있다. 이는 객체 지향 프로그래밍의 '상속(Inheritance)'과 관련이 있다.
Object 클래스는 상속을 통해 모든 객체에 필요한 공통적으로 필요한 기능을 제공한다. 예를 들어, 객체의 정보를 제공하는 toString() 메서드나 객체 간의 동등성을 비교하는 equals() 메서드 등은 모든 객체에서 일관성 있게 사용될 수 있는 중요한 기능이다.
Object 클래스와 다형성
다형성의 핵심은 '다형적 참조와 메서드 오버라이딩'이다.
Object 클래스는 모든 클래스의 부모 클래스로 Object 타입으로 모든 객체 타입을 참조할 수 있다. 메서드의 인자가 Object 타입이라면 어떤 객체든 해당 메서드에 전달할 수 있다. 또한 Object 타입으로 배열을 만들면 모든 타입의 객체를 담을 수 있다.
서브클래스는 Object 클래스의 메서드를 오버라이딩하여 자신의 요구에 맞는 동작을 정의할 수 있다. 예를 들어, toString() 메서드는 기본적으로 객체의 클래스 이름과 해시코드를 반환하지만 서브클래스에서는 이를 오버라이딩하여 객체의 상태나 속성을 보다 구체적으로 표현하도록 구현할 수 있다.
Object 클래스의 주요 메서드
- toString()
Object.toString() 메서드는 객체의 정보를 문자열 형태로 반환한다. 주로 디버깅과 로깅에 유용하게 사용된다.
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
패키지를 포함한 객체 이름과 객체의 참조값(해시코드)를 16진수로 반환한다.
- equals()
Object.equals()는 기본적으로 동일성 비교('==' 연산자와 동일한 기능)를 제공한다. 두 객체가 같은 메모리 주소를 참조하는지 판단한다.
public boolean equals(Object obj) {
return (this == obj);
}
따라서 논리적 동등성을 비교하기 위해서는 서브클래스에서 equals() 메서드를 오버라이드하여 각각의 동등성 기준을 재정의 할 수 있다. 우리가 자주 사용하는 'String', 'Integer' 등의 클래스도 Object의 서브클래스로 equals 메서드를 오버라이드하여 내용의 동등성을 비교하도록 설계되었다.
아래 코드의 equaility = true 결과가 나오려면
public class EqualsMain {
public static void main(String[] args) {
User user1 = new User("id-100");
User user2 = new User("id-100");
System.out.println("identity = " + (user1 == user2));
System.out.println("equality = " + (user1.equals(user2));
}
}
equals() 메서드를 다음과 같이 오버라이딩해야 한다.
public class User {
private String id;
public User(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return id.equals(user.id);
}
}
정리
Object 클래스는 자바에서 최상위 부모 클래스로, 모든 객체 타입을 참조할 수 있으며 equals(), toString()과 같은 기본 기능을 제공해 준다. 이는 객체 지향 프로그래밍의 핵심 개념인 상속, 다형성을 이해하는 데 중요한 역할을 한다.
참고
'Tech Stack > Java' 카테고리의 다른 글
[Java] 컬렉션 프레임워크 List와 의존 관계 주입 (0) | 2024.08.16 |
---|---|
[Java] Enum 클래스 (0) | 2024.08.14 |
[Java] 래퍼 클래스 (Wrapper Class) (0) | 2024.08.13 |
[Java] String 클래스와 주요 메서드 (0) | 2024.08.13 |
[Java] 불변 객체 (Immutable Object) (0) | 2024.08.12 |