💡 Object 클래스란?
Java에서 Object는 모든 클래스의 최상위 부모 클래스입니다. 모든 클래스는 암묵적으로 Object 클래스를 상속받습니다.
Object 클래스는 Java의 기본적인 기능과 메서드를 제공하며, 모든 객체가 가져야 할 공통 동작을 정의합니다.
java에서 하나의 클래스를 만들면 기본적으로 생략된 코드들이 있다
① default packgae - ex) import.java.lang.*;
② 최상위 클래스 - ex) public class A extends Object ⇒ java.lang.Object
③ default 생성자 - ex) public A() { super(); }
💡 Object 클래스내의 자주 쓰이는 메서드
Object 클래스의 주요 메서드로는 다음과 같은 것들이 있습니다:
- equals(): 객체의 동등성을 비교하는 메서드입니다. 기본적으로는 객체의 주소 비교를 수행하지만, 필요에 따라 재정의하여 객체의 내용 비교를 수행할 수 있습니다.
- hashCode(): 객체의 해시 코드 값을 반환하는 메서드입니다. 객체의 동등성을 검사하는데 사용될 수 있습니다.
- toString(): 객체를 문자열로 표현하는 메서드입니다. 기본적으로는 클래스명과 해시 코드를 반환하며, 필요에 따라 재정의하여 객체의 정보를 적절히 표현할 수 있습니다.
- getClass(): 객체의 클래스 정보를 반환하는 메서드입니다. Class 클래스의 인스턴스를 반환합니다.
- clone(): 객체를 복제하는 메서드입니다. 객체의 얕은 복사를 수행합니다.
- finalize(): 객체가 소멸될 때 호출되는 메서드입니다. Java에서는 가비지 컬렉터가 객체를 수거하기 전에 이 메서드를 호출합니다.
Object 클래스의 존재는 모든 객체가 공통적인 기능과 동작을 가지도록 하여 객체 지향 프로그래밍의 기본 원칙을 준수할 수 있도록 도와줍니다. 또한, 다형성을 지원하고 객체를 일반적인 형식으로 다룰 수 있도록 합니다.
//B클래스
public class B extends Object {
public void printGo() {
System.out.println("나는 B입니다.");
}
}
//A클래스
public class A extends Object{ //생략된 기본 최상위클래스 Object와 상속관계
public A(){ //생략된 A클래스의 default 생성자
super();
}
public void display() {
System.out.println("나는 A 클래스 입니다.");
}
public void printGo() {
System.out.println("나는 A 클래스 입니다.");
}
}
//main 메서드 클래스
import Poly.A;
import Poly.B;
public class ObjectPolyArg {
public static void main(String[] args) {
A a = new A();
display(a); // display 메서드에 A 객체 전달
B b = new B();
display(b); // display 메서드에 B 객체 전달
}
private static void display(A a) {
a.printGo();
}
private static void display(B b) {
b.printGo();
}
}
display() 메서드에 인수로 A a를 전달하는 이유는 메서드 내부에서 A 클래스에 정의된 printGo() 메서드를 호출하기 위해서입니다.
만약 display() 메서드에 인수로 a만 전달하면, 컴파일러는 해당 인수의 타입을 알 수 없기 때문에 어떤 메서드를 호출해야 할지 판단할 수 없습니다. 따라서 인수에 타입을 명시하여 컴파일러에게 전달된 객체의 타입을 알려주어야 합니다.
이렇게 타입을 명시함으로써 컴파일러는 A a가 A 클래스의 인스턴스임을 알 수 있고, 따라서 A 클래스에 정의된 메서드인 printGo()를 호출할 수 있게 됩니다. 타입의 명시는 컴파일러가 올바른 메서드 호출을 검증하고 실행 가능한 코드를 생성하는 데 도움을 줍니다.
'[ BACKEND] > JAVA_객체지향' 카테고리의 다른 글
[JAVA] Thread & Multi Thread란 ? (0) | 2023.06.26 |
---|---|
[JAVA] 내부 클래스 & 예외 처리 (0) | 2023.06.24 |
[JAVA] 인터페이스의 등장 (1) | 2023.06.20 |
[JAVA] 다형성 (Polymorphism)과 활용 (0) | 2023.06.19 |
[JAVA] 상속 관계에서의 객체 생성 및 Override (0) | 2023.06.18 |