java.lang 패키지
java.lang 패키지는 import를 하지 않고도 사용 가능
기본형 타입을 객체로 변환시킬 때 사용하는 wrapper라는 클래스가 존재
- wrapper class :
기본형 데이터 타입의 객체화를 가능하게 도와주는 클래스들
실제 클래스가 존재하는 것은 아니나 8개의 기본 데이터 타입들을 각각 객체로 변환시킬 수 있는 클래스가 존재한다.
Boolean, Byte, Character 등 8개의 기본 데이터 타입의 매핑되는 각각의 클래스들을 모두 모아서 wrapper클래스라 부른다.
그 외에도
모든 클래스의 최상위 클래스 - object,
문자열과 관련된 클래스 - String, StringBuffer, StringBuilder
화면의 값을 출력할 때 사용하는 클래스 - System,
수학과 관련된 클래스 - Math 클래스
이 외에도 쓰레드와 관련된 중요 클래스들이 java.lang 패키지에 존재하고 있다.
int i - 기본형 타입
: i는 기본형 타입이기 때문에 객체가 아님, 참조형이 아니라는 의미
만약, 숫자 5를 객체형 혹은 참조형으로 사용하고 싶다면 아래와 같이 선언해야 한다.
int i = 5;
integer 객체 선언
: integer i2는 실제 int를 객체로 바꿔주는 wrapper클래스 중에 하나인 Integer 클래스다.
Integer i2 = new Integer(5);
아래와 같이 선언한다면 어떻게 될까?
* 오토박싱 : 기본 타입 데이터를 객체 타입의 데이터로 자동 형변환 시켜주는 기능
Integer i3 = 5;
전혀 문제없이 작동한다.
숫자 5는 원래 기본형이지만 자동으로 integer로 형변환되었기 때문이다
이것을 오토박싱이라 한다.
실제 기본 데이터 타입을 객체형으로 바꿀 때에는 new Integer() 등. 각각의 알맞은 wrapper 클래스들을 이용해서
객체를 한번 감싸줘야지만 사용할 수 있었다.
하지만, java 5 버전 이후부터는 i2처럼 선언하지 않아도 i3처럼 선언해도 사용할 수 있다.
Integer i3 = new Integer(5); // java 5 이전
Integer i3 = 5; // 오토박싱
*오토언박싱: 오토박싱과 반대로 객체 타입의 데이터를 기본형 타입 데이터로 자동 형변환
int i4 = i3.intValue(); //java 5이전
int i5 = i3; //오토언박싱
마찬가지로 꺼내올 때도
Integer 타입 i3에 들어있는 값을 int타입으로 바꾸고 싶다면
반드시 intValue() 같은 메소드를 이용해야지만 객체로 감싸져 있는 것을 한번 벗겨내고
int타입으로 사용할 수 있었다.
그런데 자바 5 이후부터는 intValue()라는 메소드를 호출하지 않아도 바로 꺼내서 사용할 수 있다.
이러한 것을 오토언박싱이라 한다.
이 부분도 마찬가지.
내부적으로 wrapper 클래스들을 사용해서 컴파일러가 자동으로 해당 메소드를 호출해서
한번 벗겨내서 사용하는 것이다.
'PL(ProgrammingLanguage) > JAVA' 카테고리의 다른 글
StringBuffer (0) | 2021.10.21 |
---|---|
Generic (0) | 2021.10.20 |
Object와 overriding (0) | 2021.10.17 |
[프로그래머스] 약수의 합 (0) | 2021.10.16 |
사용자 정의 Exception (0) | 2021.10.16 |