본문 바로가기
BackEnd/Java

[Java] 랩퍼클래스 Wrapper Class

by summer_light 2021. 7. 13.

랩퍼클래스 Wrapper Class

자료형은 기본형(Primitive, P타입)과 참조형(Reference, R타입)으로 나뉘는데,

컬렉션에 값을 담을 때 참조형(R)만 담을 수 있고 기본 자료형(P)은 담을 수 없기 때문에

P타입 자료형을 R타입 자료형으로 만들어 줄 때 랩퍼 클래스를 사용한다. 

기본 자료형의 값을 멤버 변수의 값으로 저장하고,

이 값 주위로 값을 가공하는 메소드들이 감싸고 있다고 해서 랩퍼(Wrapper) 클래스라고 불린다.

 

다음과 같이 모든 기본 자료형에 대해 그에 대응하는 랩퍼 클래스가 있다.

기본 자료형 랩퍼 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

 

 


랩퍼 클래스에 값 저장하기 

String str = new String("값"); 했던 것과 유사하게 저장하면 된다.

Integer integer = new Integer(10);
Integer integer2 = 10;
//Integer integer3 = "10"; ---- 오류 발생

System.out.println(integer); //10
System.out.println(integer2); //10

 

 

 

참조형 → 기본형 (R → P)

Integer to int

.intValue()로 캐스팅 없이 변환 가능

int numInt2 = integer2.intValue();

Integer to short

.shortValue()로 캐스팅 없이 변환 가능

short numShort = integer2.shortValue();

 

 

 

랩퍼클래스의 MIN_VALUE, MAX_VALUE

System.out.println(Integer.MIN_VALUE); //-2147483648
System.out.println(Integer.MAX_VALUE); //2147483647

 

 

 

랩퍼클래스의 진법 변환

10진법 to n진법

System.out.println(Integer.toBinaryString(3)); //11, 자료형은 String
System.out.println(Integer.toOctalString(9)); //11, 자료형은 String
System.out.println(Integer.toHexString(17)); //11, 자료형은 String


n진법 to 10진법

String b = Integer.toBinaryString(3); 
String o = Integer.toOctalString(9); 
String h = Integer.toHexString(17); 

System.out.println(Integer.parseInt(b, 2)); //3
System.out.println(Integer.parseInt(o, 8)); //9
System.out.println(Integer.parseInt(h, 16)); //17

 

 

※ n진법 숫자 표현

  • 2진법 0b _ _ 
    int bi = 0b11; //2+1 = 3​
  • 8진법 0 _ _
    int oi = 011; //8+1 = 9​
  • 16진법 0x _ _
    int hi = 0x11; //16+1 = 17

※ n진법으로 저장했더라도, 십진법으로 반환된다.

int bi = 0b11; //2+1 = 3
int oi = 011; //8+1 = 9
int hi = 0x11; //16+1 = 17
		
System.out.println(bi); //3, 저장할 때와 관련없이 출력은 십진법으로
System.out.println(oi); //9
System.out.println(hi); //17

 

 

 

Integer - Integer 값 비교하기 (Integer vs Integer)

  • == : 같은 객체이면 true, 아니면 false
  • .equals() : 같은 값을 가지면 true, 아니면 false 
  • a.compareTo(b): 
    • a == b : 0 
    • a > b : +1 
    • a < b : -1  
integer = 200; //integer: integer타입
integer2 = new Integer(200); //integer2: Integer타입

System.out.println(integer == integer2); //false :같은 객체가 아니므로 
System.out.println(integer.equals(integer2)); //true :값은 같으므로 
System.out.println(integer.compareTo(integer2)); //0 :값이 같으므로

 

int - Integer 값 비교하기 (int vs Integer)

numInt = 200;//int
integer3 = 200;//Integer

if(integer3.equals(numInt)) {
//.equlals는 입력 값이 Integer여야 하기 때문에 
//컴파일러가 자동으로 numInt를 new Integer(numInt)로 변경하여 연산 → 결과가 "같아요."
System.out.println("같아요.");
}else {
System.out.println("달라요.");
}

 

 

 

오토박싱과 오토언박싱

오토박싱 R = p

integer3 = numInt3;

 

오토언박싱 p = R

integer3객체 안의 int값이 나와서 numInt3에 대입된다.

int numInt3 = integer3;

 

 


HashSet에 넣기

Set<Double> cSET = new HashSet<Double>();
cSET.add(rPI);//R
cSET.add(3.14);//p

 

 

ArrayList에 넣기

ArrayList<Integer> aar = new ArrayList<Integer>();
aar.add(integer3);//R
aar.add(integer2 + 10);//R
aar.add(123);//p

 

 

Object 객체 연산 

obj를 이용하여 11 계산을 하는 방법은 다음과 같이 여러가지가 있을 수 있다.


방법1 

int num4 = (int)obj + 1;
System.out.println(num4);//11

 


방법2 

obj = "10";//obj의 자료형은 'Object'이고, 'String'이 아니다.
System.out.println(obj);//10 
int num5 = Integer.valueOf((String)obj) + 1;//Object -> String으로 캐스팅 해주어야 함
System.out.println(num5);//11

 

방법3 

obj = 10;//String은 Integer로 캐스팅이 불가능하므로 obj=10을 대입해주어야 함
int num6 = 5 + ((Integer)obj).intValue();
System.out.println(num6);

'BackEnd > Java' 카테고리의 다른 글

[Java] 제네릭 Generic  (0) 2021.07.14
[Java] 컬렉션 Collection  (0) 2021.07.14
[Java] 메모리 Memory  (0) 2021.07.13
[Java] 열거 타입 Enum  (0) 2021.07.13
[Java] 다형성 Polymorphism  (0) 2021.07.13

댓글