Java Mid 01 - Object
in Programming Language on Java
Java Lang package
자바가 기본으로 제공하는 라이브러리(클래스 모음) 중에 가장 기본이 되는 것이 바로 자바 lang이다.
여기서 lang은 Language(언어)의 줄임말이다. 쉽게 이야기해서 자바 언어를 이루는 가장 기본이 되는 클래스들을 보관하는 패키지를 뜻한다.
java.lang 대표적인 클래스
- Object : 모든 자바객체의 부모 클래스
- String : 문자열
- Integer, Long, Double : 래퍼 타입(감싼타입)
- 기본형 데이터 타입을 객체로 만든 것
- Class : 클래스 메타 정보
- System : 시스템과 관련된 기본 기능들을 제공
package lang.object.tostring;
public class ToStringMain2 {
public static void main(String[] args) {
Car car = new Car( "Model Y" );
Dog dog1 = new Dog( "멍멍이1", 2 );
Dog dog2 = new Dog( "멍멍이1", 2 );
System.out.println("1. 단순 toString 호출");
System.out.println(car.toString());
System.out.println(dog1.toString());
System.out.println(dog2.toString());
System.out.println("2. println 내부에서 toString 호");
System.out.println(car);
System.out.println(dog1);
System.out.println(dog2);
System.out.println("3. object다형성 활용");
ObjectPrinter.print( car );
ObjectPrinter.print( dog1 );
ObjectPrinter.print( dog2 );
String refValue = Integer.toHexString( System.identityHashCode( dog1 ) );
System.out.println( "refValue = " + refValue );
}
}
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 );
}
}
- 클래스에서 상속 받을 부모 클래스가 없으면 묵시적으로 Object 클래스를 상속 받는다.
- 쉽게 이야기해서 자바가 extends Object 코드를 넣어준다.
- 따라서 extends Object는 생략하는 것을 권장한다.
Object 클래스는 자바 클래스 계층 구조의 루트 클래스이며, 다른 모든 클래스는 직간접적으로 Object 클래스를 상속받는다.
Object가 제공하는 기능은 다음과 같다
- 객체의 정보를 제공하는 toString()
- 객체의 같음을 비교하는 equals()
- 객체의 클래스 정보를 제공하는 getClass()
- 기타 여러가지 기능
다형성의 기본 구현
- 부모는 자식을 담을 수 있다.
- Object는 모든 클래스의 부모 클래스이다. 따라서 모든 객체를 참조할 수 있다.
Object 클래스는 다형성을 지원하는 기본적인 메커니즘을 제공한다.
모든 자바 객체는 Object 타입으로 처리될 수 있으며, 이는 다양한 타입의 객체를 통합적으로 처리할 수 있게 해준다. 쉽게 이야기하면 Object는 모든 객체를 다 담을 수 있다. (다형성 특징)
- 타입이 다른 객체들은 어딘가에 보관해야 한다면? 바로 Object에 보관하면 된다.
Object 배열
- Object는 모든 타입의 객체를 다 담을 수 있다.
- Object[] 만들면 자바의 모든 객체를 다 담을 수 있는 배열을 만든 것이다.
ublic class ObjectPolyExample2 {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
Object object = new Object();
Object[] objects = {dog, car, object};
size(objects);
}
private static void size(Object[] objects) {
System.out.println( "전달된 객체의 수는?: " + objects.length );
}
}
- 만약 Object가 없다면?
- void action(Object obj)과 같이 모든 객체를 받을 수 있는 메서드를 만들 수 없다.
- Object[] objects같이 모든 객체를 저장할 수 있는 배열을 만들 수 없다.
Reference
인프런 김영한님의 실전 자바 강좌 중급 1편