▶ Integer와 int의 차이를 알기 위해서는 우선 Java서는 원시타입 (Primitive Type), 래퍼 클래스 (Wrapper Class)가 있다.
원시타입과 래퍼클래스는 위처럼 나뉘어진다. 원시 타입으로는 byte, short, int, long, float, double, boolean, char 이 있고, 래퍼 클래스로는 Byte, Short, Integer, Long, Float, Double, Boolean, Character 가 있다.
▶ Primitive Type과 Wrapper Class는 무슨 차이가 있는걸까?
Wrapper Class는 Primitive Type을 객체화한 것이다. ( wrap == 포장 )
public class Main {
public static void main(String[] args) {
int primi = 50;
Integer wrap = 5;
}
}
int primi = 50;으로 작성했을 경우, 단순히 숫자로서만 기능한다.
하지만 Integer wrap = 5;로 작성했을 경우, 객체 형태로 생성되어 null을 넣거나 메소드를 사용할 수 있게 된다.
Wrapper 형태는 객체로 사용되는 것 외에도 <>안에 들어가는 Generics에도 사용된다.
▶ Wrapper 클래스를 사용하는 이유는 원시 타입을 객체로 만들어 null을 넣거나 메소드를 사용할 수 있고, toString() 메소드를 사용해 String 타입으로 바로 변환도 가능하다.
▶ Wrapper 클래스는 Primitive Type과 다르게 == 연산이 아닌, 객체이기 때문에 equals() 메소드를 이용해서 값을 비교해야한다. 만약 ==를 사용하게 되면 두 변수의 값을 비교하는것이 아니라 주소값을 비교하기 때문에 false가 반환된다.
▶ 다음으로 boxing과 unboxing인데 각각 원시 타입을 래퍼클래스로, 래퍼클래스를 원시타입으로 변환할 때 사용한다.
예제 코드에는 Integer = (Integer) int변수 이런 식으로 사용하지만 Integer 변수명 = int 변수명; 이런 식으로 해도 적용이
된다. 이걸 Autoboxing, AutoUnboxing이라 한다.
public class Main {
public static void main(String[] args) {
int primi = 50;
Integer wrap = 5;
// 앞에 Integer, int 붙이지 않아도 자동으로 변환이 된다.
wrap = (Integer) pri;
pri = (int) wrap;
}
}
▶ 사용 용도에 따라 다르겠지만 일반적으로 primitive type을 많이 사용한다. wrapper의 경우 결국 객체를 생성하는 것인데, 굳이 객체가 필요한 경우가 없거나 null값을 반환할 필요가 없다면 객체를 생성하지 않고 primitive type을 사용하는 것이 메모리의 측면에서 효율적이다.
'Java' 카테고리의 다른 글
Java_BufferedReader 예외처리 경우 (0) | 2022.07.18 |
---|---|
Java_Scanner 버퍼 비우기 (0) | 2022.07.06 |
Java_컬렉션 프레임워크 (0) | 2021.03.02 |
Java_인터페이스 (0) | 2021.02.22 |
Java_추상 클래스 (0) | 2021.02.20 |