Wrapper Class

 

Wrapper (랩퍼) 클래스는 말 그대로 감싸주는 클래스이다. 무엇을 감싸주냐면 기본 자료형을 감싸준다.

 

자바에는 기본 자료형, 참조 자료형 두가지가 있다고 했다. 기본 자료형은 int, double 같은 자료형을 말한다.

 

기본자료형에 대해서는 아래 포스트를 참고할 수 있다.

 

자바의 변수(자료형)

 

자바 튜토리얼 (2-1) 자바의 변수 (정수형)

자바의 변수 시간이다. 변수를 이해하는 순간 컴퓨터에 대해 새롭게 눈을 뜨게 된다. C나 파이썬 자바 어느 프로그래밍 언어에도 변수가 있다. 어느 언어를 배우건 개념을 이해하면 그 다음 배우

digiconfactory.tistory.com

그렇다. 객체지향 언어인 자바에도 기본자료형이 있다. 완전한 객체지향을 추구해서 기본자료형도 클래스 인줄 알았는데 그렇지 않다. Python 같은 경우 내부적으로 기본 자료형들은 클래스화 되어있다. 파이썬에서는 a =10, a + 5, 15 같은 간단한 연산도 내부적으로 int 타입 메소드를 불러 처리한다. (아래 문서 참조)

 

*파이썬 안의 매직 메소드

 

Magic Methods in Python

Python - Magic Methods Magic methods in Python are the special methods which add "magic" to your class. Magic methods are not meant to be invoked directly by you, but the invocation happens internally from the class on a certain action. For example, when y

www.tutorialsteacher.com

랩퍼 클래스가 하는 일은 기본 자료형인 이들 byte, char, int , double 들을 클래스로 만들어 주는 것이다. 클래스로 만들면 메소드를 사용함으로써 기능이 확장된다. 기본 정수형인 4바이트 32비트 Integer 클래스를 살펴보기로한다. 역시 JavaDoc에서 찾아볼 수 있다.

 

javadoc 인티저 (정수) 클래스

 

Integer (Java Platform SE 8 )

Returns the value obtained by rotating the two's complement binary representation of the specified int value right by the specified number of bits. (Bits shifted out of the right hand, or low-order, side reenter on the left, or high-order.) Note that right

docs.oracle.com

그럼 바로 Integer 클래스를 만들어 본다.

 

인티저 계층도

Integer 클래스도 java.lang 패키지에 포함되 있어서 바로 사용할 수 있다. Number라는 클래스가 상위클래스이다. 당연하지만 정수는 숫자의 하위 개념으로 포함되어 있다. JavaDoc을 많이 읽어야 객체지향에 대해서 잘 알 수 있다. 이걸 기계적으로 하면 지루한 일이지만 원리와 구조를 들여다 보는 것은 중요한 일이다. (시스템 프로그래밍의 분야라서, 어플리케이션을 하기 위해 입문하는 사람들에게는 어려울 수가 있다.)

 

<예제1>

public class BasicClass {

    public static void main(String[] args){

        Integer myNum1 = new Integer(10);
        int var1 = myNum1.intValue();

        System.out.println(var1);
    }
}

결과값

예제1은 숫자 10을 인수로 클래스를 생성하고 있다. 사실 new 를 생략해도 되지만 명시적으로 new 키워드를 사용했다. 인스턴스 myNum1에 들어있는 값을 얻기 위해 inValue 메소드를 호출한다.

 

<예제2>

        Integer num1 = Integer.valueOf("5");
        System.out.println(num1);

예제2는 클래스 메소드 valueOf를 사용해서 숫자나 문자열을 정수로 반환할 수 있다. 예를 들어 사용자에게 숫자를 입력받아 정수로 변환할 때 사용한다. 다만 숫자가 아니라 문자가 인수에 들어있으면 number format exception 이 발생한다.

 

<예제3>

      Integer num1 = Integer.parseInt("2500");
      System.out.println(num1);

예제3 parseInt 메소드는 문자열을 받아서 int 값으로 반환한다.


<예제4>

public class BasicClass {

    public static void main(String[] args){

        Integer num1 = new Integer(100);
        Integer num2 = Integer.valueOf(500);
        Integer num3 = Integer.parseInt("2500");

        int num4 = 400;
        int num5 = 700;

        int sum1 = num1 + num4;
        int sum2 = num2 + num5;
        int sum3 = num3 + sum1;

        System.out.println(sum1);
        System.out.println(sum2);
        System.out.println(sum3);
    }
}

예제4 결과값

예제4는 기본자료형과 Integer 타입간에 연산을 하는 것이다. 기본형과 참조형의 타입에는 차이가 있음에도 오류없이 연산이 잘 이루어졌다. 과거에는 형변환을 해줘야 했다. 그러나 자바5부터 변환없이 사용가능하다. 컴파일러가 자동으로 변환한다. 이것을 오토박싱과 언박싱이라고 말한다. 프로그래머는 형변환에 신경쓰지 않아도 된다. 물론 좋은 프로그래머가 되기 위해서 원리는 알고 있어야 한다. 아무래도 기본형보다 객체형의 자원소모가 더 크다는 것은 당연한 것이다.

 

*기본형 int >> 객체형 Integer : Autoboxing

*객체형 Integer >>기본형 int : Unboxing

 

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

 

Autoboxing and Unboxing (The Java™ Tutorials > Learning the Java Language > Numbers and Strings)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe

docs.oracle.com

Integer를 제외한 다른 기본 자료형에게도 각자 랩퍼클래스가 있고 타입에 따른 차이점이 있을 수 있다. 처음부터 끝까지 다 보는 것은 시간상 어려울 것이다. 필요할때 마다 랩퍼클래스에 대한 내용을 JavaDoc에서 참고하는 방법을 추천한다.

공유하기

facebook twitter kakaoTalk kakaostory naver band