java.lang 패키지
자바가 기본으로 제공하는 라이브러리중에 가장 기본이 되는 것이 바로 java.lang 패키지이다.
java.lang 패키지의 대표적인 클래스들
- Object : 모든 자바 객체의 부모 클래스
- String : 문자열
- Integer, Long, Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것
- Class : 클래스 메타 정보
- System : 시스템과 관련된 기본 기능들을 제공
java.lang 패키지는 모든 자바 애플리케이션에 자동으로 import 된다.
Object 클래스
자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다.
package lang.object;
public class Parent {
public void parentMethod() {
System.out.println("Parent.parentMethod");
}
}
부모가 없으면 묵시적으로 Object 클래스를 상속받는다.
클래스에 상속 받은 부모 클래스를 명시적으로 지정하면 Object를 상속 받지 않는다.
묵시적 : 개발자가 코드에 직접 기술하지 않아도 시스템 또는 컴파일러에 의해 자동으로 수행되는 것을 의미
명시적 : 개발자가 코드에 직접 기술해서 작동하는 것을 의미
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);
}
}
toString()은 Object 클래스의 메서드이다. 이 메서드는 객체의 정보를 제공한다.
자바에서 Object 클래스가 최상위 부모 클래스인 이유
- 공통 기능 제공
객체의 정보를 제공하고, 이 객체가 다른 객체와 같은지 비교하고, 객체가 어떤 클래스로 만들어졌는지 확인하는 기능은 모든 객체에게 필요한 기본 기능이다. 이런 기능을 객체를 만들 때 마다 항상 새로운 메서드를 정의해서 만들어야 한다면 번거로울 것이다.
Object는 모든 객체에게 필요한 공통 기능을 제공한다.
- 다형성의 기본 구현
부모는 자식을 담을 수 있다. Object는 모든 클래스의 부모 클래스이다. 따라서 모든 객체를 참조할 수 있다.
모든 자바 객체는 Object 타입으로 처리 될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다.
package lang.object.poly;
public class ObjectPolyExample1 {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
action(dog);
action(car);
}
private static void action(Object obj){
//obj.sound(); //컴파일오류 Object는 sound()가 없다.
//obj.move(); //컴파일오류 Object는 move()가 없다.
//객체에 맞는 다운캐스팅 필요
if( obj instanceof Dog dog){
dog.sound();
}else if(obj instanceof Car car){
car.move();
}
}
}
action(Object obj) 메서드를 보면 Object 타입의 매개변수를 사용한다. Object는 모든 객체의 부모다. 따라서 어떤 객체든지 인자로 전달할 수 있다.
Object 다형성의 한계
obj.sound()를 호출하면 오류가 발생한다. 매개변수인 obj는 Object 타입이기 때문에 Object에는 sound() 메서드가 없다.
Dog 인스턴스의 sound()를 호출하려면 다운캐스팅을 해야한다.
다형성을 제대로 활용하려면 다형적참조 + 메서드 오버라이딩을 함께 사용해야 한다.
그런면에서 Object는 다형적참조는 가능하지만, 메서드 오버라이딩을 활용 할 수 없다.
Object 배열
Object는 모든 타입의 객체를 담을 수 있는 배열을 만들 수 있다.
package lang.object.poly;
public class ObjectPolyExample2 {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
Object object = new Object(); // Object 인스턴스도 만들 수 있다.
Object[] objects = {dog, car, object};
size(objects);
}
private static void size(Object[] objects) {
System.out.println("전달된 객체의 수는 :" + objects.length);
}
}
Reference
Object 배열 | 김영한의 실전 자바 - 중급 1편
Object 배열
www.inflearn.com
'JAVA' 카테고리의 다른 글
김영한의 실전 자바 중급 1편 (3) (0) | 2025.07.13 |
---|---|
김영한의 실전 자바 중급 1편 (2) (1) | 2025.07.10 |
문자열 뒤집기 - StringBuilder.reverse() (0) | 2025.06.12 |
김영한의 실전 자바 기본편 - 8일차 (0) | 2025.05.10 |
김영한의 실전 자바 기본편 - 7일차 (0) | 2025.05.07 |