2021-01-29
자바의 기본 타입으로는 byte, short char, int, long, float, double, boolean 등이 있는데, 이러한 기본타입들을 내부에 두고 포장하는 것을 Wrapper 클래스라고 한다. 이와 같은 Wrapper 클래스의 사용법을 알아보자.
(우선 기본타입과 포장 클래스(타입)는 아래와 같으니 한 번 살펴보고 넘어가자.)
우선 기본타입을 -> 포장타입으로 바꾸는 것을 박싱이라고 하며, 방법은 아래와 같다.
package wWrapper;
import java.util.Date;
public class main {
public static void main(String[] args) {
//****박싱방법
Integer num1 = 10; // 자동 박싱
Integer num2 = new Integer(100);
Integer num3 = Integer.valueOf(1000);
System.out.println(num1.getClass());
System.out.println(num2.getClass());
System.out.println(num3.getClass());
}
}
예제로는 int 의 Wrapper 타입인 Integer로 진행하였다. 방법으로는 위와 같이 직접 인트형 데이터를 넣는 자동박싱 방법과 new 연산자를 이용한 새로운 객체 생성, Integer 자체의 메소드 valueOf를 사용하는 방법이 있다. 이후 선언된 각 변수들의 속한 클래스를 확인해보면 모두 Integer 클래스에 속한 것을 확인할 수 있다.
박싱을 살펴보았으니 이제 Wrapper 타입을 기본타입으로 바꾸는 언박싱을 살펴보도록 하자. 코드는 아래와 같다.
package wWrapper;
import java.util.Date;
public class main {
public static void main(String[] args) {
//****박싱방법
Integer num1 = 10; // 자동 박싱
Integer num2 = new Integer(100);
Integer num3 = Integer.valueOf(1000);
// System.out.println(num1.getClass());
// System.out.println(num2.getClass());
// System.out.println(num3.getClass());
// 직접 값을 대입하는 방식으로도 가능하며,
// new 를 사용하는 방법 Integer.valueOf를 사용하는 방법이있다.
//
//
//****언박싱방법
int numA = num1; // 자동 언박싱
int numB = num2.intValue();
System.out.println(numA);
System.out.println(numB);
// 직접 int에 wrapper객체를 넣어주는 방법
// intValue를 이용해 직접 포장을 풀어주는 방법이 있다.
}
}
방법으로는 기본 자동 언박싱 방법과 intValue 메서드를 이용한 방법이 있다. 실행결과 Wrapper 타입에서 기본타입으로만 변할 뿐 데이터의 차이는 없는 것을 확인할 수 있다.
그러면 Wrapper 클래스는 어디에 사용하는 걸까? 바로 String 형 타입의 변수를 자신이 원하는 타입으로 변환하고자 할때 사용한다. 해당 메서드는 "타입.parseXXX" 같은형태로 나타내며, 코드는 아래와 같다.
package wWrapper;
import java.util.Date;
public class main {
public static void main(String[] args) {
//****문자열을 기본 타입으로 변환
//Wrapper 클래스를 이용하는 주된 이유인 문자열을 기본 타입으로 바꾸는 방법이다.
int intSt = Integer.parseInt("100");
double doubleSt = Double.parseDouble("100.10");
long longSt = Long.parseLong("10000000000");
boolean booleanSt = Boolean.parseBoolean("false");
System.out.println(intSt);
System.out.println(doubleSt);
System.out.println(longSt);
System.out.println(booleanSt);
}
}
실행결과 데이터는 보존되면서, 문자열에서 모두 기본타입으로 변환된 것을 확인할 수 있다.
다만 주의할 점이 있다. Wrapper클래스는 '==', '!= ' 를 통한 값의 비교가 되지 않는다. 떄문에 equals 메서드를 통해서 데이터를 비교해 주어야한다. 아래는 예제 코드이다.
package wWrapper;
import java.util.Date;
public class main {
public static void main(String[] args) {
Integer numA = 200;
Integer numB = 200;
System.out.println(numA == numB);
System.out.println(numA.equals(numB));
// 값의 범위가 -128 ~ 127의 범위에 있을 경우 == != 로 비교가 가능하지만
// 해당 범위를 넘어가면 equals로 비교를 해주어야 한다.
}
}
출력결과 '==' 비교한 numA 와 numB는 같은 값인데도 불구하고, false 가 출력되고 반면에 equals로 비교했을 경우에는 결과가 정상적으로 true가 출력되는 것을 확인할 수 있다.
(신기한점은 Wrapper 클래스의 int형은 값의 범위가 -128 ~ 127 의 범위내에서는 '==', '!=' 로도 비교가 가능하다.)