ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Wrapper, Number 클래스] int와 Integer의 차이
    개발/Java 2021. 1. 10. 14:37

    자바에서 intInteger의 차이는 뭘까?

    자바에서 Collection 타입을 사용할 때 항상 int 타입이 아닌, Integer 타입으로 정의한다.

    다음과 같이 ArrayList가 있을 때, add()에는 int 타입을 파라미터로 준다.

    List<Integer> answer = new ArrayList<>();
    answer.add(1);

    Integer로 정의하고 그냥 int값을 넣어도 될거면, 도대체 왜 이 둘을 구분하는 것일까? 뭐가 다를까?

    The Numbers Classes

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

    Number 클래스는 java.lang 패키지에 있는 추상 클래스이다.  그리고 IntegerNumber를 상속받아 구현한 서브 클래스다.

     

    Integer를 비롯한 Byte, Short, Double, Float, Long 클래스들은 동명의 primitive 타입들을 wrap(포장)해주는 wrapper 클래스들이다.

     

    primitive 타입이란?

    int age = 11;  
    float PI = 3.14f;

    보통 자바에서 숫자를 사용할 때 다음과 같이 int, float, double 등등을 쓰는데 이것을 primitive 타입이라고 한다.
    우리는 보통 위에 코드처럼 숫자가 필요할 때 primitive 타입을 선언해서 쓴다.

     

    Wrap?

    wrap 한다는 것은 primitive 타입을 하나의 객체로 만들어주는 것을 말한다. 하나의 객체로 만들어서 객체가 primitive 타입을 갖는 형태다.
    아래 코드는 실제 Integer 클래스의 모습이다. 말 그대로 포장하는 것과 같다.

    public final class Integer extends Number implements Comparable<Integer> {
       private final int value;
       public Integer(int value) {this.value=value;};
    }

    언제 쓰나? 왜?

    1. Collection처럼 Object 타입을 인자로 받는 메소드 등을 사용할 때 필요하다.

      • 위의 예제처럼 Integer로 타입을 정의하고, add()의 인자로 primitive 타입인 int를 넣어도 문제가 생기지 않는 이유는?

      • 컴파일러가 알아서 boxing 해주기 때문이다.

        box, unbox
        box는 primitive 타입을 object로 포장해주는 것을 말한다.
        unbox는 반대로 object를 primitive 타입으로 포장을 벗겨내는 걸 말한다.

    2. 각 타입의 최소값과 최대값 등을 각 Number 타입에 정의해놓고 사용한다.

      • 정수형의 최대값이 필요하면 Integer에 정의된 MAX_VALUE를 통해 가져올 수 있다.
        • ex. int int_max = Integer.MAX_VALUE;
    3. 각 primitive 타입을 String 타입으로 바꾸고 싶을 때, 타입을 바꿔주는 메소드가 각 Number 클래스에 정의되어 있다.

      • 예를 들어 int로 정의된 값을 String 타입으로 바꾸고 싶을 때
    String three = "3";
    int int_three = Integer.parseInt(three);

    참고

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

    댓글

Designed by Tistory.