본문 바로가기

국비필기노트/Java

자바(java)_래퍼 클래스(Wrapper Class)

▶ Wrapper Class

 

래퍼클래스란 기본형 값을 감싸는 클래스이다.

 

int num = 1;
integer wrapper = new integer(num);'

 

이렇게 wrapper라는 클래스가 int 기본형의 변수 num을 감싸는데 이 때 int를 감싸기에 사용하는 래퍼 킄ㄹ래스의 키워드가 integer인 것이다. 

 

어떤 사람은 자바가 90%의 객체지향언어라고 이야기한다.

이는 자바는 모든것을 객체로만 나누는 것이 아니라 기본형이라는 데이터가 존재하기 떄문이다.

 

자바에서 기본형이라는 예외를 둔 이유는 성능떄문인데

기본형을 사용하면 int i  = 1; 로 i를 변수화 하여 바로 값을 담을 수 있다.

그러나 객체를 사용하면 참조변수를 읽고 값을 담는 두번의 과정이 있기 때문이다. 

 

그래서 초창기의 java언어는 기본 자료형의 연산보다도 Wrapper 클래스를 사용한 연산이 더 많이 이루어졌으나, java언어가 발전함에 따라서 기본자료형과 Wrapper Class 간의 연산의 차이가 없어졌다.

 

그래서 최근의 java언어는 Wrapper 클래스와 기본 자료형을 구분하지 않고 사용하기 때문에 객체로서의 특별한 의미가 없어졌다고 볼 수 있다.

 

그러나 가끔 어떠한 상황에서는 기본 데이터 타입의 변수를 객체 형태로 사용해야하는 경우가 있는데, 이때 기본형 타입을 객체로 포장할 필요가 있다.

 

이 밑의 표를 포장 클래스(Wrapper Class)라고 하며 특정 기본형 타입을 나타내는 용도로 사용된다. 

 

출처: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=heartflow89&logNo=220975218499

 

 

int 와 integer는 가장 많이 사용되는 것으로 컴파일러에서 보통 자동완성처리된다.

 

 

▶ Wrapper Class 형변환

 

각각의 Wrapper클래스의 객체는 자신과 대응되는 기본 자료형의 데이터를 파라미터로 전달받는다.

예시로 사용방법을 자세히 알아보자

 

int num = 1;

integer wrapper = new integer(num);'

 

int num = 1이라고 int로 1의 값을 선언 및 할당을 동시에 시켜주었다.

그리고 그 밑에 new를 사용하여 객체를 만들고 num의 값을 바로 선언 및 할당 처리를 integer를 사용하여 진행한 것이다.

 

이를 통해 우리는 기본자료형과 Wrapper 클래스간 서로 암묵적인 형변환이 가능하다는 것을 알 수 있다.

이를 Autoboxing이라고 부른다.

 

다시 int로 돌아오는 것도 가능하다.

 

integer wrapper2 = new integer(1);
int num = wrapper2;

 

wrapper2를 int형의 num이라는 변수에 대입하여 그 값을 기본형으로 만들어 준다.

이를 우린 Unboxing이라고 부른다.

 

 

▶Wrapper Class의 클래스의 최소값과 최대값

 

모든 Wrapper 클래스는 static 데이터 형태로 되어있으며 Wrapper도 기본클래스처럼 클래스에 대응되는 자료형에 대한 최소값과 최대값을 가지고 있다.

 

int max = integer.MAX_VALUE;

int min = integer.MIN_VALUE;

 

변수명을 대문자로 명시한 것으로 상수임을 알 수 있고

 

syso(Integer.MAX_VALUE);  // -2147483648

syso(Integer.MIN_VALUE);   // 2147483648

 

로 실행시켜보면 Integer 정수의 최대값과 최소값이 출력된다.

 

 

▶Wrapper 클래스의 실생활 활용

 

기본 자료형과 문자열 데이터간의 연산에서는 기본 자료형 데이터가 문자열로 변환된 후에 문자열간의 연산으로 처리가된다.

예시를 봐보자.

 

int money1 = "5000";

String money2 = "3000";

 

String total = money1 + money2; 

 

결과는 어떻게 나올까

int 가 string타입과 연산을 하기위해 money1은 자동으로 string으로 변경이 되고 money2는 그대로 stirng으로 유지되어 이는 문자열 나열로 50003000이라는 결과가 출력이 된다.

 

즉, 모든 프로그렘 플랫폼에서 사용자의 입력값은 String 으로 처리된다. 그런데 만약, 이 코드가 은행에서 사용이 된다면 어떻게 될까?

 

인터넷 뱅킹에서 2개의 계좌로 송금할 금액을 각각 입력하였을 때, 총 금액을 계산하는 공식이 위와 같다면 큰일이 날 것이다. 이럴때 사용하는 것이 Wrapper Class이다.

 

위와같은 경우엔 Wrapper Class를 통해 문자열 데이터를 기본 데이터형으로 변환해야한다.

 

 Wrapper 클래스에는 기본 자료형의 모양을 띄고있는 문자열 데이터를 실제 기본 자료형으로 변환시키는 기능이 포함되어있다.

 

java에서 Wrapper클래스의 가장 큰 의미라고 할 수 있다.

 

String money1 = "5000";

String money2 = "3000";

 

int m1 = integer.parseint(money1);

int m2 = integer.parseint(money2);

 

syso(m1 + m2)

 

를 해주면 8000원이라는 결과값을 구할 수 있다!

 

지금은 int타입을 사용을 하여 Integer를 사용하였는데 byte면 Byte, long은 Long을 사용하여 변경해준다.

자동완성 기능이 있기에 이 모든걸 암기할 필요는 없지만 int Integer이 가장 많이 사용하는 경우로 알고있으면 좋다.