[JAVA] 12-6. 래핑(래퍼) 클래스

Re_Go·2024년 6월 3일
0

JAVA

목록 보기
22/37
post-thumbnail

1. 래핑 클래스(래퍼 클래스)란?

쉽게 얘기하면 기본 타입의 변수를 좀 더 효율적으로 사용할 수 있게 해주는 클래스인데요. 기본 데이터 타입을 참조 데이터 타입으로 변환하여(박싱) 각 래핑 클래스가 가지고 있는 메서드를 직접 사용할 수 있게 해주고,, 다시 해당 참조 데이터 타입을 기본 데이터 타입으로(언박싱) 변경하고 기본 데이터 타입으로 사용을 하는 등의, 상황에 맞는 데이터 값 사용이 가능합니다.

// 기본적인 박싱과 언박싱
Integer num1 = 100; // int에서 Integer로 자동 박싱
Integer num2 = 100; 
int num3 = num1 + num2; // Integer 간의 연산에 의한 결과값을 int에 저장하는 자동 언박싱

특히나 이러한 래핑 클래스들은 참조 타입임에도 불구하고 기본 타입들의 특성인 불변성 을 가지고 있는데요. 이는 기본 데이터 타입을 감싸서 다양한 작업을 수행하고자 하는 래핑 클래스의 목적상 안의 원본 데이터를 유지해 주어야 하기 때문에 불변성의 특징을 가지고 있다고 합니다.

이러한 래핑 클래스는 자바스크립트에서의 래퍼 객체와도 비슷한 동작 방식과 쓰임새를 가지고 있는데요.

래핑 클래스는 각각 Byte(byte), Character(char), Shrot(short), Integer(int), Long(long), Float(float), Double(double), Boolean(boolean)이 존재하며,

Integer intValue1 = new Integer(10); // int를 포장한 Integer 객체 생성
Integer intValue2 = 10; // 리터럴 값으로 생성 (이하 래퍼 클래스 동일)
int convertIntValue = intValue1.intValue(); // Integer 객체 언박싱

Double doubleValue1 = new Double(3.14); // double을 포장한 Double 객체 생성
Double doubleValue2 = 3.14
char convertCharValue = doubleValue1.doubleValue(); // Double 객체 언박싱

Boolean boolValue1 = new Boolean(true); // boolean을 포장한 Boolean 객체 생성
Boolean boolValue2 = true;
boolean convertBooleanValue = boolValue1.booleanValue(); // Boolean 객체 언박싱

Character charValue1 = new Character('a'); // char를 포장한 Character 객체 생성
Character charValue2 = 'a'
char convertCharValue = charValue1.charValue(); // Character 객체 언박싱

위의 예시에서는 기본 데이터 타입을 객체 데이터 타입으로 포장 한 뒤 해당 래핑 클래스 타입의 변수에 저장하는 모습을 확인할 수 있는데요. 명시적으로 객체를 생성해줘도 되지만, 두번째 예시들 처럼 기본 데이터 타입의 값 자체만을 할당해 줘도 상관 없습니다.

2. 래핑 클래스를 이용한 타입 변환

앞서 소개한 래핑 클래스들은 다른 타입으로 파싱하거나 기존 데이터를 다른 데이터로 변형하거나, 상태값을 출력하는 용도의 정적 메서드들을 각각 가지고 있으며, 자바에서는 객체 생성의 역할 보다는 정적 메서드 사용을 주 목적으로 래퍼 클래스를 사용하고 있는데요.

해당 섹션에서는 그 중 가장 많이 사용되는 파싱 용도(타입 변환) 위주의 사용법을 알아보도록 하겠습니다.

  1. Byte.parseByte(String s) : 문자열을 바이트로 파싱합니다.
String byteString = "10";
byte byteValue = Byte.parseByte(byteString);
System.out.println("Parsed Byte Value: " + byteValue); // 10을 반환
  1. Short.parseShort(String s) : 문자열을 숏(짧은 정수)으로 파싱합니다.
String shortString = "1000";
short shortValue = Short.parseShort(shortString);
System.out.println("Parsed Short Value: " + shortValue); // 1000을 반환
  1. Integer.parseInt(String s) : 문자열을 정수로 파싱합니다.
String intString = "12345";
int intValue = Integer.parseInt(intString);
System.out.println("Parsed Integer Value: " + intValue); // 12345를 반환
  1. Long.parseLong(String s) : 문자열을 롱(긴 정수)으로 파싱합니다.
String longString = "1234567890";
long longValue = Long.parseLong(longString);
System.out.println("Parsed Long Value: " + longValue); // 1234567890을 반환
  1. Float.parseFloat(String s) : 문자열을 float(부동 소수점)로 파싱합니다.
String floatString = "3.14";
float floatValue = Float.parseFloat(floatString);
System.out.println("Parsed Float Value: " + floatValue); // 3.14로 반환
  1. Double.parseDouble(String s) : 문자열을 double로 파싱합니다.
String doubleString = "3.141592";
double doubleValue = Double.parseDouble(doubleString);
System.out.println("Parsed Double Value: " + doubleValue); // 3.141592를 반환
  1. Boolean.parseBoolean(String s) : 문자열을 boolean 값으로 파싱합니다.
String booleanString = "true";
boolean booleanValue = Boolean.parseBoolean(booleanString);
System.out.println("Parsed Boolean Value: " + booleanValue); // true로 반환

3. 포장값 간의 비교

포장 값 간의 비교는 ==나 !=를 이용한 비교 연산자의 방법은 권장되지 않는데요. 그 이유는 비교 연산자는 저장된 데이터의 번지값을 비교할 때 사용되기 때문입니다.

그래서 해당 포장값들의 내용의 유사점을 확인하고자 한다면 equals 메서드 등을 사용해야 합니다.

Integer num1 = new Integer(10);
Integer num2 = new Integer(10);

// 잘못된 비교 방식: 두 객체의 레퍼런스(참조)를 비교
if (num1 == num2) {
    System.out.println("num1 and num2 are the same object");
} else {
    System.out.println("num1 and num2 are different objects");
}

// 올바른 비교 방식: 두 객체의 값 비교
if (num1.equals(num2)) {
    System.out.println("num1 and num2 have the same value");
} else {
    System.out.println("num1 and num2 have different values");
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글