[자바 스터디] Wrapper Class란?

doxxx·2022년 2월 10일
1

자바 고급 스터디

목록 보기
1/3
post-thumbnail

1. 래퍼(wrapper) 클래스

래퍼클래스의 정의

java api reference에서 찾아본다면 java.lang 패키지의 클래스들 중 기본형(primitive type)변수를 감싸는 클래스들이다.
Description는 다음과 같다.

The [래퍼클래스명] class wraps a value of the primitive type [기본형] in an object.

자바는 객체지향 언어이지만 기본형이라는 예외를 둔 이유는 성능때문이다.

래퍼클래스의 필요성

  1. 메서드에 전달된 arguments를 수정하기 위해서는 기본형 변수들을 참조형 변수로 변환해야한다.
    • 기본형 변수는 값으로 전달되기 때문이다.
  2. java.util 패키지의 클래스들은 참조형 변수만을 다루기 때문이다.
  3. CF의 자료구조인 ArrayList와 Vector는 참조형 변수만을 다루기 때문이다.
  4. 멀티쓰레딩에서 동기화를 지원하려면 참조형변수가 필요하다.

래퍼 클래스의 생성자

래퍼클래스의 생성자

  • int와 char를 제외한 클래스들은 기본형의 첫글자를 소문자에서 대문자로만 바꾸면 된다.

Number클래스

래퍼 클래스의 상속계층도

래퍼클래스의 상속계층도

상속계층도에서 볼 수 있듯이 모든 숫자 래퍼 클래스들의 조상이다.

Number클래스의 메서드들
public abstract class Number implements java.io.Serializable {
    
    public Number() {super();}

    public abstract int intValue();

    public abstract long longValue();

    public abstract float floatValue();

    public abstract double doubleValue();

    public byte byteValue() { return (byte)intValue(); }

   
    public short shortValue() { return (short)intValue(); }

}

문자열을 숫자로 변환하기

  • 문자열을 숫자로 변환하는 다양한 방법
int i = new Integer("100").intValue();
int i = Integer.parseInt("100");	//주로 이 방법을 많이 사용
Integer i = Integer.valueOf("100")

래퍼 클래스(Wrapper class)는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다.

단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.

오토박싱 & 언박싱(autoboxing & unboxing)

박싱과 언박싱
1. 박싱: 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정
2. 언박싱: 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정

  • JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱을 자동으로 처리해주어 이를 오토박싱과 오토언박싱이라고 한다.

Integer 객체 오토박싱의 예시(intValue() 호출)

	Integer x = 400, y = 400;
    	if (x == y)
			System.out.println("Same");
		else
			System.out.println("Not Same");
	// 출력 결과: Not Same

x와 y가 서로 다른 객체를 참조하므로 결과가 Not Same이 나왔다. 하지만 다음 결과를 보자

	Integer x = new Integer(40), y = new Integer(40);
		if (x == y)
    		System.out.println("Same");
		else
			System.out.println("Not Same");
	// 출력 결과: Same

valueOf()는 -128에서 127 사이의 값에 대하여 캐시된 객체를 사용하여 Same 이 출력된다.
new 연산자를 통하여 명시적으로 객체를 생성하면 첫번째 경우와 같이 Not Same이 출력된다.

다음 내용은 First Class Collection(일급 컬렉션)!
언제든 내용이 추가될 수 있음!

참고한 내용들

https://www.geeksforgeeks.org/wrapper-classes-java/
http://www.tcpschool.com/java/java_api_wrapper

0개의 댓글