📄 Object 클래스 완벽 정리
Object 하나만 제대로 이해해도 훨씬 쉽게 이해할 수 있습니다.
- toString()
- equals()
- hashCode()
- Collection
- HashMap
이런 분들에게 추천합니다.
- Object가 왜 필요한지 모르겠다.
- Object가 그냥 부모 클래스라고만 알고 있다.
- toString()이 왜 필요한지 궁금하다.
- equals()와 == 차이가 헷갈린다.
- 자바 면접을 준비 중이다.
오늘 이것만 기억하세요.
Object는
- 모든 클래스의 부모
- 모든 객체를 하나의 타입으로 관리
- 공통 기능 제공
📄 Object가 왜 존재할까?
초보 개발자들이 가장 많이 하는 질문입니다.
"Object는 왜 굳이 만든 거지?"
예를 들어 이 클래스들은 서로 아무 관계도 없습니다.
class Dog {}
class Car {}
class Book {}
class User {}
그러면 처럼 객체마다 메서드를 따로 만들어야 합니다.
print(Dog dog);
print(Car car);
print(Book book);
print(User user);
클래스가 100개라면? 메서드도 100개가 됩니다.
그래서 자바는 "모든 클래스의 부모를 하나 만들자." 라고 설계했습니다.
그 부모가 바로 Object입니다.
📄 핵심 정리
Object 덕분에
- 모든 객체를 하나로 받을 수 있다.
- 공통 기능을 제공할 수 있다.
- 자바 라이브러리를 만들기 쉬워졌다.
📄 java.lang 패키지란?
Object는 java.lang.Object 에 존재합니다.
java.lang 패키지 : 자바에서 가장 기본적인 클래스들을 모아놓은 패키지입니다.
java.lang.Object
대표 클래스
| 클래스 | 설명 |
| Object | 모든 객체의 부모 |
| String | 문자열 |
| Integer | 래퍼 클래스 |
| System | 시스템 기능 |
| Math | 수학 기능 |
📄 Object는 어떻게 상속될까?
부모를 작성하지 않으면 컴파일러가 자동으로 추가합니다.
이를 묵시적 상속 이라고 합니다.
class Parent{
}
class Parent extends Object{
}
실무 TIP
extends Object를 직접 작성하지 않습니다. 컴파일러가 자동으로 추가하기 때문입니다.
📄 Object가 제공하는 기능
Object에는 거의 모든 객체가 사용하는 기능들이 들어 있습니다.
| 메서드 | 역할 |
| toString() | 객체 출력 |
| equals() | 객체 비교 |
| getClass() | 클래스 정보 |
| hashCode() | 해시값 |
📄 Object 다형성
Object는 모든 객체를 받을 수 있습니다.
Object obj = new Dog();
Object obj2 = new Car();
Object obj3 = new User();
Q. 왜 가능한가?
A. Object는 모든 클래스의 부모이기 때문입니다.
하지만 한계도 있습니다. 많은 초보 개발자가 착각하는 부분입니다.
Object obj = new Dog();
obj.sound();
컴파일 에러 왜? Object는 sound()를 모르기 때문입니다. 다운캐스팅이 필요합니다.
if(obj instanceof Dog dog){
dog.sound();
}
📄 시험 족보
Object 다형성의 장점은? : 모든 객체를 받을 수 있다.
Object 다형성의 단점은? : 다운캐스팅이 필요하다.
Object 배열 : Object 배열은 모든 객체를 저장할 수 있습니다.
Object[] objects = {
new Dog(),
new Car(),
new User()
};
📄 toString()
초보 개발자가 가장 많이 사용하는 Object 메서드입니다.
System.out.println(user);
사실 내부에서는 호출합니다.
user.toString();
기본 출력
User@3f99bd52
오버라이딩 후
User{name='kim', age=20}
실무에서는? 로그를 찍을 때 객체 상태를 보기 위해 거의 반드시 오버라이딩합니다.
📄 equals()
객체 비교에는 두 가지가 있습니다.
| 비교 | 의미 |
| == | 같은 객체 |
| equals() | 같은 값 |
new String("Java")
== : false
equals() : true
📄 Object와 OCP
Object가 없었다면 모든 메서드를 만들어야 했습니다. 하지만
하나로 끝납니다. 이것이 OCP(Open Closed Principle)를 지키는 대표적인 예
print(Dog)
print(Car)
print(Book)
print(User)
print(Object obj)
📄 개인적으로 공부하면서 느낀 점
처음에는 Object를 단순히 "모든 클래스의 부모" 정도로만 알고 있었습니다.
하지만 공부하면서 println(), Collection, HashMap 등 자바의 핵심 기능들이 모두
Object를 기반으로 동작한다는 점을 알게 되었습니다.
Object를 이해하고 나니 이후에 배우는 컬렉션 프레임워크와 equals(), hashCode()도 훨씬 자연스럽게 연결되었습니다.
Q. Object는 왜 존재하나요? : 모든 객체를 하나의 타입으로 관리하기 위해.
Q. Object 다형성의 장점은? : 모든 객체를 참조할 수 있다.
Q. 단점은? : 다운캐스팅이 필요하다.
Q. println()은 내부적으로 무엇을 호출하나요? : toString()
Q. equals() 기본 구현은? : == 비교
📄 오늘 이것만 기억하세요.
- Object는 모든 클래스의 최상위 부모이다.
- java.lang은 자동으로 import된다.
- Object는 공통 기능(toString(), equals(), getClass())을 제공한다.
- 모든 객체를 Object 타입으로 참조할 수 있다.
- Object 다형성은 가능하지만 메서드 호출 시 다운캐스팅이 필요할 수 있다.
- println()은 내부적으로 toString()을 호출한다.
- equals()를 재정의하면 논리적인 동등성 비교를 구현할 수 있다.
