[Java] Wrapper 클래스

정재현·2024년 1월 3일

Java

목록 보기
7/43
post-thumbnail

래퍼 클래스 변수

  • 기본형 변수를 클래스로 한번 감싸는 변수
  • 기본형 변수 타입명에서 첫글자를 대문자로 바꾸어서 래퍼 클래스 지정
	// 박싱 VS 언박싱

	// 박싱
	// Integer 래퍼 클래스 num 에 21 의 값을 저장
	int number = 21;
	Integer num = new Integet(number);	// 과거 방식
    Integer num = number;	// 최신 방식 : 그냥 할당하는 방식으로 사용

	// 언박싱
	int n = num.intValue(); // 래퍼 클래스들은 inValue() 같은 언박싱 메서드들을 제공해줍니다.

박싱 & 언박싱

  • 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정
  • 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정
public class Wrapper_Ex {
    public static void main(String[] args)  {
        Integer num = new Integer(17); // 박싱
        int n = num.intValue(); //언박싱
        System.out.println(n);
    }
}

래퍼 클래스

  • 주요 용도
    • 기본 타입의 값을 박싱해서 포장 객체로 만들기
      • 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없음
      • 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 함
    • 문자열을 기본 타입 값으로 변환 : parse + 기본타입명
  • 래퍼 객체는 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없음
    • == 연산자는 참조 주소를 비교하기 때문
    • 래퍼 클래스의 객체끼리의 비교를 하기 위해서는 equals를 사용해야 함

래퍼 클래스 구조도


참고 : Wrapper 객체

  1. 우리는 자연스럽게 다음과같은 원시 타입을 사용해왔습니다.

  2. char, int, long과 같은 것들은 실제로 “값” 이상의 의의를 가지지 않는 경우가 더 많기 때문에, 비용이 많이 드는 객체로 다루는 대신 원시타입 값 그대로를 사용합니다.
  3. 하지만 잘 생각해보면, 우리가 그동안 굉장히 많은 개념들을 추상화 해 왔는데, 기본형의 자료들도 충분히 추상화가 가능 할 것 같습니다.
  4. 예를 들면 소수, 반올림, 정수와 같은 개념들이 있겠죠
  5. 당연히 자바는 이러한 특징들을 추상화 해서 객체화는 해뒀습니다. 다만 값 이상의 의의를 가지지 않는 경우에는 성능상의 이유로 원시값 그대로를 사용할 뿐이죠
  6. 결론적으로 객체 특성을 이용한 추상적인 기능을 사용하려거나, 기본형 값 대신 객체로 저장해야 하거나,객체로의 “기능”이 필요 할 때 우리는 원시형 값들을 잠시 객체로 만들어 사용 할 수 있습니다.
  7. 기본값을 객체화해서 “감싼다”는 의미로 이러한 객체들을 Wrapper Class라고 하는데, 위의 표처럼 대응됩니다.
  8. 기본값을 객체화 하는것을 박싱 이라고 하며, 객체를 다시 기본값으로 만드는 것을 언박싱이라고 합니다.
  9. 이러한 것들을 조금 더 문법적으로 자연스럽게 보여주기 위해서 오토박싱, 오토언박싱이라는 것도 존재합니다.
    Integer num = new Integer(17);  // Boxing
    int n = num.intValue(); // UnBoxing
    
    // 자동으로 컴파일러가 AutoBoxig 처리를 해주는 경우
    Character ch = 'X'; // AutoBoxing
    char c = ch; // AutoUnBoxing
  1. 박싱해서 객체화된 원시값들은 이제 클래스처럼, 구현되어있는 메소드들을 자유롭게 이용이 가능하고, 객체만 할 수 있는 것들을 할 수 있게 됩니다.

요약

  • 기본형 변수를 포장해서 래퍼클래스로 만들면 각 포장한 기본변수에 대응되는 래퍼클래스에서 제공하는다양한 메서드를 사용할 수 있다.

profile
공부 기록 보관소

0개의 댓글