묵시적 상속 vs 명시적 상속
묵시적 : 개발자가 코드에 직접 기술하지 않아도 시스템 또는 컴파일러에 의해 자동으로 수행되는 것을 의미
명시적 : 개발자가 코드에 직접 기술해서 작동하는 것을 의미
ex)
package lang.object;
public class ObjectMain {
public static void main(String[] args) {
Child child = new Child();
child.childMethod();
child.parentMethod();
// toString()은 Object 클래스의 메서드
String string = child.toString();
System.out.println(string);
}
}
결과
Child.childMethod
Parent.parentMethod
lang.object.Child@X001
child.toString()을 호출하게 되면 부모타입 Parent가 상속받고 있는 Object 클래스를 호출하게 된다.

Object의 다형성
아래와 같이 Dog, Car 클래스가 있다. 둘은 서로 아무 관련이 없지만 자동으로 Object class 를 상속받는다.

다만 Object는 최상위 클래스이기 때문에, 하위 메서드를 실행할 수 없다.
예를 들어 아래와 같이 Dog 클래스가 가지고 있는 sound() 메서드는 실행할 수 없다.

실행하기 위해서 Dog 클래스로 다운캐스팅을 해야한다.
if (obj instanceof Dog dog) {
dog.sound();
}
정리하면, Object는 다형적 참조 + 메서드 오버라이딩 을 동시에 할 수 없다.
메서드 오버라이딩을 하기 위해 위와 같이 다운캐스팅이 필요하기 때문이다.
다형성을 활용하기에는 한계가 있다.
toString()
object가 제공하는 toString() 메서드는 기본적으로 패키지를 포함한 객체의 이름 + 객체의 참조값(해시코드)를 제공한다.
package lang.object.tostring;
public class ToStringMain1 {
public static void main(String[] args) {
Object object = new Object();
String string = object.toString();
//toString() 반환값 출력
System.out.println(string);
//object 직접 출력
System.out.println(object);
}
}
결과
java.lang.Object@a09ee92
java.lang.Object@a09ee92
위와 같이 println과 object를 직접 println 하면 결과가 같은데, 사실 println은 메서드 내부에서 toString()을 호출하고 있다.
보통 toString은 오버라이딩 해서 많이 사용한다.
Object와 OCP 원칙
Open : 새로운 클래스를 추가하고, ` toString()` 을 오버라이딩해서 기능을 확장할 수 있다.
Closed : 새로운 클래스를 추가해도 ` Object` 와 ` toString()` 을 사용하는 코드는 변경하지 않아도 된다.
equals 메서드
자바에서 같다 라는 의미는 아래와 같이 두 가지가 있다.
동일성(identity) : 두 객체의 참조가 같은 객체를 가리키고 있다. ( == )
동등성(equality) : 두 객체가 논리적으로 같은지 확인한다. ( equals() )
ex) 아래와 같이 두 객체가 있다.
User a = new User("id-100") //참조 x001
User b = new User("id-100") //참조 x002
두 객체는 물리적으로 다른 메모리에 존재하는 객체지만, 같은 회원번호 값을 가리키고 있기 때문에 논리적으로 동등하다.
'Spring boot' 카테고리의 다른 글
| [Spring boot] - 서킷브레이커 도입하기 (0) | 2026.02.01 |
|---|---|
| Java - 불변 객체 (1) | 2024.12.25 |