작성
·
51
0
[질문 내용]
안녕하세요, Object Class에 대해 궁금한 점이 있어 질문드립니다.
모든 클래스는 최상위 부모인 Object Class가 제공하는 공통 기능(메서드)을 사용할 수 있는 것으로 알고 있습니다. 그러면 '객체.(Object Class의 메서드)' 형태[예시: child.toString()]로 충분히 상속받은 기능을 사용할 수 있는데 왜 Object Class가 java.lang 패키지에 포함되어 자동으로 import 되는지 궁금합니다.
(자동으로 import되는 System, String가 바로 사용이 가능한 것과 다르게, Object는 객체 생성을 하고 상속을 이용해서만 기능 사용이 가능한 것 같은데 왜 굳이 자동으로 import되는 목록에 껴있는지 궁금합니다 ㅠ 혹시 Object형 변수 선언을 위해 그런걸까요?)
마지막으로 Object 클래스의 메서드가 오버라이딩이 가능하던데 그대로 사용하지 않고 오버라이딩할 일이 따로 있나요? 지금까지 공부하며 느낀 자바는 굉장히 효율적이고 적절한 제약이 있는 언어라고 생각이 들어서 이유없이 오버라이딩 가능하게 남겨두지는 않았을 거라는 생각이 들어 여쭤봅니다.
답변 1
1
안녕하세요, 우하하님, 인프런 AI 인턴입니다.
Object 클래스는 자바의 모든 클래스가 상속받는 최상위 부모 클래스입니다. 이 클래스는 자바 프로그래밍 언어에서 가장 기본적인 기능들을 제공하며, 모든 자바 객체는 Object 클래스의 메서드를 사용할 수 있습니다. Object 클래스가 java.lang
패키지에 있는 이유는 프로그래밍의 기본적인 요소들을 코드에서 특별히 명시하지 않고도 사용할 수 있도록 제공하기 위해서입니다. java.lang
패키지에 있는 클래스들은 기본적으로 자동 import가 되어 있어 별도로 명시하지 않아도 됩니다.
자동 import는 클래스의 명시적 사용뿐만 아니라 다양한 프레임워크와 라이브러리에서 개별적으로 사용될 수 있는 상황을 대비한 것입니다. 예를 들어, 모든 객체는 toString()
, hashCode()
, equals()
같은 기본 메서드를 지원해야 하며, 이러한 메서드는 대부분의 프로그램에서 객체의 상태를 출력하거나 비교하는 작업에 자주 사용됩니다.
두 번째로, Object 클래스의 메서드 오버라이딩은 많은 경우 매우 유용합니다. 예를 들어, toString()
메서드를 오버라이드하면 객체의 디버깅이나 로깅을 할 때 보다 의미 있는 정보를 출력할 수 있습니다. equals()
메서드를 오버라이드하여 객체의 논리적 동등성을 정의할 수도 있으며, hashCode()
메서드를 오버라이드하여 컬렉션(HashMap, HashSet 등)에서의 객체 성능을 최적화할 수가 있습니다. 이러한 오버라이딩은 자바의 객체 지향 특성을 풍부하게 활용할 수 있도록 해줍니다.
보다 구체적인 사용 예시는 다음과 같은 URL에서 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이해했습니다 감사합니다. 1번은 제가 Child Class만 생각하고 Parent Class를 생각하지 못한 것 같습니다. 이해를 제대로 한 것이 맞다면 java.lang.Object가 import 되어 있지 않은 상태라면 Parent 클래스 뒤에 묵시적으로 적힌 'extends Object'를 사용할 수 없는 것 같은데 맞나요?