-
[Wrapper, Number 클래스] int와 Integer의 차이개발/Java 2021. 1. 10. 14:37
자바에서
int
와Integer
의 차이는 뭘까?자바에서 Collection 타입을 사용할 때 항상
int
타입이 아닌,Integer
타입으로 정의한다.다음과 같이
ArrayList
가 있을 때,add()
에는 int 타입을 파라미터로 준다.List<Integer> answer = new ArrayList<>(); answer.add(1);
Integer로 정의하고 그냥 int값을 넣어도 될거면, 도대체 왜 이 둘을 구분하는 것일까? 뭐가 다를까?
The Numbers Classes
Number
클래스는 java.lang 패키지에 있는 추상 클래스이다. 그리고Integer
는 Number를 상속받아 구현한 서브 클래스다.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;}; }
언제 쓰나? 왜?
-
Collection처럼 Object 타입을 인자로 받는 메소드 등을 사용할 때 필요하다.
-
위의 예제처럼 Integer로 타입을 정의하고, add()의 인자로 primitive 타입인 int를 넣어도 문제가 생기지 않는 이유는?
-
컴파일러가 알아서
boxing
해주기 때문이다.box, unbox
box는 primitive 타입을 object로 포장해주는 것을 말한다.
unbox는 반대로 object를 primitive 타입으로 포장을 벗겨내는 걸 말한다.
-
-
각 타입의 최소값과 최대값 등을 각 Number 타입에 정의해놓고 사용한다.
- 정수형의 최대값이 필요하면
Integer
에 정의된MAX_VALUE
를 통해 가져올 수 있다.- ex. int int_max = Integer.MAX_VALUE;
- 정수형의 최대값이 필요하면
-
각 primitive 타입을 String 타입으로 바꾸고 싶을 때, 타입을 바꿔주는 메소드가 각 Number 클래스에 정의되어 있다.
- 예를 들어 int로 정의된 값을 String 타입으로 바꾸고 싶을 때
String three = "3"; int int_three = Integer.parseInt(three);
참고
https://docs.oracle.com/javase/tutorial/java/data/numberclasses.html
-