본문 바로가기

Java

[Java] java.lang패키지(1) Object 클래스, wrapper클래스

 

java.lang 패키지

 

java.lang 패키지는 자바프로그래밍에서 가장 기본이 되는 클래스를 포함하고 있다. 따라서 다른 API 패키지들과는 달리 import없이 바로 사용할 수 있도록 만들어져 있다.

 

Object 클래스

Object클래스는 최상위 클래스이다. 따라서 Object클래스의 메서드들은 모든 클래스에서 사용 가능하다.

Object클래스는 toString, equals, clone, getclass, hashcode, notify, notifyAll, wait, finalize 메서드를 가진다.

 

toString() 과 equals()

toString() : 객체의 정보를 문자열로 제공한다. (주소값, 해시코드형태), 클래스에서 Object클래스의 toString을 오버라이딩 한다면 원하는 문자열로 출력할 수 있다.


equals() : 두 객체를 비교하기 위해 사용한다. 두 객체를 비교할 때 참조변수(주소값)을 기준으로 비교하기 때문에 같은 내용이라도 false의 결과를 얻는다. (객체 생성 시 각각 서로 다른 메모리가 할당되기 때문에 주소값이 다르다.)

결과 : 다르다

결과 : 같다

"같다"가 나온 이유는 Test클래스에서 equals() 메서드를 오버라이딩하여 주소값이 아닌 객체에 저장된 내용을 비교하도록 하였다.


 

wrapper 클래스

 

때때로 레퍼런스 타입이 담긴 배열에 기본형 타입을 넣어야 할 경우가 있다. 따라서 기본형 타입을 객체타입으로 변환할 수 있는 wrapper 클래스를 제공한다.

기본형 -> 레퍼런스형,  레퍼런스형 -> 기본형으로의 변환이 가능하다.

기본형 타입과 마찬가지로 wrapper클래스는 Boolean, Character, Byte, Short, Integer, Long, Float, Double 총 8가지를 제공한다.

 

문자열 -> 기본형 변환

-int num = Integer.parseInt("10");

문자열 -> wrapper클래스 변환

-int num = Integer.valueOf("100");

 

오토박싱과 언박싱

int num = 10;

Integer obj = new Integer(10); // boxing

int sum = num + obj.intValue(); // unboxing

JDK 1.5이전에는 inValue를 사용없이 기본형과 wrapper클래스를 연산하려고 하면 오류가 발생하였다.

하지만 이후에는 기본형을 wrapper클래스로 자동변환 해주고(autoboxgin),  wrapper클래스를 기본형으로 자동변환(unboxing) 해주게 된다.