자바가 기본으로 제공하는 라이브러리(클래스 모음) 중에 가장 기존이 되는 것이 바로 java.lang 패키지이다.
여기서 lang 은 Language(언어)의 줄임말이다. 쉽게 이야기해서 자바 언어를 이루는 가장 기본이 되는 클래스들을 보관하는 패키지를 뜻한다.
java.lang 패키지의 대표적인 클래스들
여기 나열한 클래스들은 자바 언어의 기본을 이루기 때문에 반드시 잘 알아두어야 한다.
java.lang 패키지는 모든 자바 애플리케이션에 자동으로 임포트(import) 된다. 따라서 임포트 구문을 사용하지 않아도 된다.
다른 패키지에 있는 클래스를 사용하려면 다음과 같이 임포트를 사용해야 한다.
package lang;
import java.lang.System; // import 를 하지 않아도 사용 가능함
public class LangMain {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다.
다음 그림과 예제 코드를 보자
package lang.object;
public class Parent { // 자동으로 extends Object 가 들어간다
public void parentMethod() {
System.out.println("Parent.parentMethod");
}
}
package lang.object;
public class Child extends Parent{
public void childMethod() {
System.out.println("Child.childMethod");
}
}
package lang.object;
public class ObjectMain {
public static void main(String[] args) {
Parent parent = new Parent();
parent.parentMethod();
Child child = new Child();
child.parentMethod();
child.childMethod();
String string = child.toString();
System.out.println(string);
}
}
Parent.parentMethod
Parent.parentMethod
Child.childMethod
lang.object.Child@2f4d3709
모든 클래스가 Object 클래스를 상속 받는 이유는 다음과 같다.
객체의 정보를 제공하고, 이 객체가 다른 객체와 같은지 비교하고, 객체가 어떤 클래스로 만들어졌는지 확인하는 기능은 모든 객체에게 필요한 기본 기능이다. 이런 기능을 객체를 만들 때 마다 항상 새로운 메서드를 정의해서 만들어야 한다면 상단히 번거로울 것이다. 그리고 막상 만든다고 해도 개발자마다 서로 다른 이름의 메서드를 만들어서 일관성이 없을 것이다.
예를 들어서 객체의 정보를 제공하는 기능을 만든다고 하면 어떤 개발자는 toString() 으로 또 어떤 개발자는 objectInfo() 와 같이 서로 다른 이름으로 만들 수 있다. 객체를 비교하는 기능을 만들 때도 어떤 개발자는 equals() 로 어떤 개발자는 same() 으로 만들 수 있다.
Object 는 모든 객체에 필요한 공통 기능을 제공한다. Object 는 최상위 부모 클래스이기 때문에 모든 객체는 공통 기능을 편리하게 제공(상속) 받을 수 있다.
Object 가 제공하는 기능은 다음과 같다.
개발자는 모든 객체가 앞서 설명한 메서드를 지원한다는 것을 알고 있다. 따라서 프로그래밍이 단순화되고, 일관성을 가진다. 각각의 기능에 대한 자세한 내용은 이후에 하나씩 알아보자.
부모는 자식을 담을 수 있다. Object 는 모든 클래스의 부모 클래스이다. 따라서 모든 객체를 참조할 수 있다.
Object 클래스는 다형성을 지원하는 기본적인 메커니즘을 제공한다. 모든 자바 객체는 Object 타입으로 처리될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다.
쉽게 이야기해서 Object 는 모든 객체를 다 담을 수 있다. 타입이 다른 객체들을 어딘가에 보관해야 한다면 바로 Object 에 보관하면 된다.