백엔드 과정/Java

[Java] day17. API - Whapper / porsing

mim 2022. 1. 7. 11:32
반응형

오늘도 API 중 몇 개의 필요한 기능에 대해 학습했다. 오늘 배운 내용은 기능별로 포스팅을 나눴다.

 

 


Whapper 

기본자료형을 인스턴화 해주는 클래스. 포장한다는 것!

8가지의 해당하는 기본 타입의 데이터를 인스턴스화 할 수 있도록 클래스를 래퍼클래스 (Wrapper Class) 라고 한다.

Primitive Date Type Wrapper Class
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

 

BoxingUnBaxing (오 용어가 귀엽다. 오늘은 언박싱을 해볼게요 ~)

기본타입을 래퍼클래스의 인스턴스로 인스턴스화 하는 것은 박싱이라고 하고,

래퍼클래스 타입의 인스턴스를 기본 타입으로 변경하는 것을 언박싱이라고 한다.

 

박싱과 언박싱을 하는 방법은 아래와 같다.

인스턴스화 하는 박싱 방법은 자바에서 이제 권유하지 않는 방법이라고 나온다. 

new Integer(intVAlue);

deprecated : 향후 버전이 업데이트 되면서 사라지게 될 기능이니

가급적이면 사용을 권장하지 않는다는 뜻이다.

int intValue = 20;
Integer boxingNumber1 = new Integer(intVAlue); //인스턴스화 -박싱 (Boxing) //생성자 이용
Inteeger boxingNumber2 = INteger.valueOF(intValue); //static 메소드 이용

int unBoxingNumber1 = boxingNUmber.intValue() //UnBoxing // intValue() 이용

그러나 위 처럼 사용할 필요가 없다.

 

AutoBoxing과 AutoUnBoxing

JDK 1.5 부터는 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이걸 자동으로 처리해준다.

Integer boxingNumber3 = intValue;	//오토 박싱
int nuBoxingNumber2 = boxingNumber3;	//오토 언박싱

 

그렇다면 값을 비교해 보면 어떻게 나올까?

int inum = 20;
Integer interNum1 = new Interger(20);	//생성자를 이용한 박싱
Integer interNum2 = new Interger(20);	//생성자를 이용한 박싱
Integer interNum3 = 20;		//오토박싱
Integer interNum4 = 20;		//오토박싱

 

기본타입과 래퍼클래스 타입은 == 연산으로 비교 가능하다.

inum == integerNum1;	//true
inum == integerNum3;	//true

 

생성자를 이용해 생성한 인스턴스의 경우 == 로 비교하지 못한다 (주소값 비교)
단, 오토박싱을 이용해서 생성한 값은 ==로 비교 가능하다.

integerNum1 == integerNum2;	//false
integerNum1 == integerNum3;	//false
integerNum3 == integerNum4;	//true

 

래퍼클래스 타입의 인스턴스 "값"을 비교할 때는 equals()를 사용한다.

integerNum1.equals(integerNum2); //true
integerNum1.equals(integerNum3); //true
integerNum3.equals(integerNum4); //true

 

 


parsing

문자열 String 값을 기본 자료형 값으로 변경하는 걼을 parsing 이라고 한다.

 

String을 기본자료형으로 바꿀 시

byte b = Byte.parseByte("1");

short s = Short.parseShort("2");

int i = Integer.parseInt("3");

long l = Long.parseLong("4");

float f = Float.parseFloat("0.1");

double d = Double.parseDouble("0.2");

boolean bool = Boolean.parseBoolean("true"); //아무 단어를 쓰면 false를 반환

/* Character는 parsing 기능을 제공하지 않는다. 그냥 chatAt(index) 이거 쓰기*/
char c = "abc".charAt(0);

 

기본자료형을 문자열 String으로 바꿀 시

 

valueOf() :  기본자료형 값을 Wrapper 클래스 타입으로 변환시키는 메소드

toString() : 필드 값을 문자열로 반환하는 메소드

 

두 개의 메소드를 활용한다. 

String b = Byte.valueOf((byte)1).toString();

String s = Short.valueOf((short)2).toString();

String i = Integer.valueOf(3).toString();

String l = Long.valueOf(4L).toString();

String f = Float.valueOf(0.1f).toString();

String d = Double.valueOf(0.2).toString();

String bool = Boolean.valueOf(true).toString();

String ch = Character.valueOf('a').toString();

그런데 이 방식 너무 길고 복잡하다. 더 간단한 방식은 없을까?

지금까지 과제하면서 이렇게 작성했던 적이 없었던 것 같다.

 

기본자료형 -> 문자열로 변환하는 방법으로

String 클래스의 vlaueOf 메소드를 사용할 수 있다.

String str1 = String.valueOf(10);

그리고 이제껏 자주 사용하던 문자열 합치기 방법도 있겠다.

String str2 = 123 + "";

 


API 수업은 정말 암기뿐이구나.. 구글링 하면서 방법을 찾던 게 더 재밌기도 하다 ...

 

반응형