Study/Java

Java. 오토박싱 & 언박싱, 문자열과 숫자 변환

염몽이 2023. 4. 2. 15:55

문자열과 숫자로 변환하는 방법은 무엇일까?

 

문자열을 숫자로 변환 하는 방법은 여러가지가 존재한다.

 

지금까지 배웠던 내용은 아래와 같다.

  1. intValue() : wrapper 클래스를 기본형으로 바꾸는 방법 
  2. Integer.parseInt() : Integer 클래스 사용
  3. Integer.valueOf() : 기본형 int 또는 wrapper 클래스로 바꾸는 방법

Byte b = new Byte("100") - 문자열 100을 Byte 래퍼 클래스로 변환

String str = b.toString() - 위의 Byte타입 100을 문자열로 바꾸는 방법

 


 

n진법의 문자열을 숫자로 변환하는 방법을 알아보자.

 

기존의 parseInt() 메소드는 기본 default가 10진수로 변환시켜주는 것이다.

 

i4 변수를 보면, "100"의 문자열을 숫자로 변환한 뒤 2진수의 숫자로 변환해주는 메소드이다. 그러므로 결과는 4가 나온다.

 


오토박싱 & 언박싱이란 무엇일까?

int 타입 Integer 타입으로 자동으로 변환시켜주는 것을 AutoBoxing,

반대로 래퍼 클래스의 Integer 타입 기본형 int  자동 변환시켜주는 것을 UnBoxing이라고 한다.

JDK1.5 이전에는 기본형과 참조형간의 연산이 불가능했다. (아래 사진 참고)

 

현재는 컴파일러가 아래의 사진과 같이 자동으로 변환시켜주는 것이다.

언박싱의 예

자바의 기본 원칙이 변한 것이 아니다.

 

오토박싱과 언박싱의 예

원래는 list.add(new Integer(10)); 이 맞지만,

현재는 컴파일러가 자동으로 변환시켜주기 때문에 위의 사진 코드와 동일하게 작성해도 된다.

 

import java.util.ArrayList;

public class Main{
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<Integer>();

        list.add(new Integer(100)); //list에는 객체만 추가 가능 JDK 1.5 이전 방법
        list.add(100); //JDK 1.5 이전에는 에러. (오토박싱)

        int i1 = list.get(0).intValue(); // intValue()로 Integer를 int로 변환, JDK 1.5 이전 방법
        Integer i2 = list.get(0); // list에 저장된 첫번째 객체를 꺼낸다 (언박싱)
    }
}

원래는 ArrayList에 객체를 사용하여 추가하는 클래스지만,

기본형을 사용할 수 있는 이유는 오토박싱과 언박싱때문이다.

 


기본형을 참조형으로 형변환연산자를 사용 불가하는 것이 원칙이었지만, 현재는 컴파일러가 자동 변환시켜주어 허용된다.

정리하자면,

우리가 JDK 1.5의 사용 방식으로 변환할 수 있어야한다? 그것은 아니다.

컴파일러가 오토박싱과 언박싱을 해준다는 것만 알고있으면 된다.