Integer, Int

서이·2022년 9월 12일
1

Java

목록 보기
8/27

 자바에서의 자료형이란?

 자료형이란 데이터 타입(type)을 의미하며, 크게 2가지로 분류할 수 있다.


        기본 자료형(Primitive Type) vs 참조형 자료형(Reference Type)

  - 원시 타입은 쉽게 말해, 정수, 실수, 문자, 논리 리터럴등의 실제 데이터 값을 저장하는 타입이고,

 - 참조 타입은 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다.


  • int란

     int는 변수의 타입(data type)이다.
    변수(variable)는 '값을 저장할 수 있는 메모리 상의 공간'을 의미
    'data의 type에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것'
  • Integer란

  • 매개변수로 객체를 필요로 할 때
  • 기본형 값이 아닌 객체로 저장해야할 때
  • 객체 간 비교가 필요할 때
  • 기본형을 객체로 다루기 위해 사용하는 클래스들을 래퍼 클래스
  • Int가 Primitive 자료형이라면 Integer는 Wrapper 클래스입니다.

 wrapper 클래스란?

 기본 자료형을 참조형 자료형처럼 사용하기 위한 클래스이다.
기본 자료형의 값을 감싸 객체형태로 만든 것이 바로 wrapper 클래스이다.
wrapper 클래스의 경우 string 과 같이 불변성을 갖고 있다. 따라서 wrapper 클래스 안에 객체의 값은 변경 불가능하다.

Boxing Primitive 자료형 -> Wrapper 클래스
Unboxing  Wrapper 클래스 -> Primitive 자료형

public static void main(String[] args) {
        
        Integer a = new Integer(3);
        int b = 3;
        
        Integer c = (Integer) b; // boxing
        int d = (int) a; // Unboxing
        
        int e = a; // 자동으로 된다.
        Integer f = b; // 자동으로 된다.
        
    }

 wrapper 클래스 사용하는 이유

 wrapper 클래스를 사용하는 이유는 참조형 자료형을 사용하는 이유와 같다.
기본 자료형의 값을 단순히 값으로만 사용하지 않고 그 값에 대한 메서드를 사용 혹은 null값을 이용하기 위해 사용된다.
하지만 우리가 wrapper 클래스를 흔히 사용하는 이유는 밑의 두가지 이유일 것이다.

첫째 제네릭

둘째 기본 자료형의 값을 문자열로 변환 혹은 반대 경우


래퍼 클래스는 제네릭 사용 시 필수로 들어가는데

제네릭이란
<>를 생각해보면 된다

 보면 제네릭 안에 Wrapper class를 사용할 경우 정의가 제대로 잘 되지만
primitive type을 사용할 경우 에러가 뜬다.

 즉 제네릭 안에 객체 자료형을 쓸 때는 무조건 Wrapper class를 사용해야 한다는 것이다.

다음으로는 wrapper class에는 null이 들어가지는데

Primitive type인 int는 에러가 뜨지만 wrapper class는 에러가 뜨지 않는다.


int와 Integer 차이점

int : 자료형(primitive type)

산술 연산 가능함
null로 초기화 불가

Integer : 래퍼 클래스 (Wrapper class)

Unboxing하지 않을 시 산술 연산 불가능함
null값 처리 가능하기 때문에 SQL과 연동할 경우 처리가 용이하다.

 new Integer 보다 Integer.valueOf()를 선호하는 이유
이클립스로 예제를 작성중 new Integer는 사용하지 말자는 문구가 떴다.

 그리고 대안으로 valueOf()를 사용하라고 쓰여있다.
내용은 간단하게 공간 및 시간 성능이 크게 향상될 가능성이 높기 때문 이라는 것이다. new Integer 보다 Integer.valueOf()를 사용하자


정수형 (int,byte,short,long)

  • long : 8byte

  • int : 4byte

  • byte : 1byte

  • short : 2byte

 정수형 타입은 리터럴 접미사가 붙지않으면 int타입으로 간주한다. 이것은 JVM의 피연산자 스택(operand stack)이 피연산자를 4byte단위로 저장하기 때문에 4byte보다 작은 자료형(byte,short)로 값을 계산하면 4byte로 변환하여 연산을 수행한다. 즉, int자료형을 사용하면 바로 연산을 하지만 4byte보다 작은 자료형을 사용하면 연산을 위해서 다시한번 int형으로 변환하는 연산이 생기게 된다.

 따라서, 연산을 수행할때 int보다 작은 자료형을 사용하면 더 비효율적인것이다. 만약, CPU연산보다 메모리를 더 절약하는게 중요한 프로그램이라면 byte,short를 사용해도 된다.


실수형(float,double)

  • float : 4byte

  • double : 8byte

 실수형을 저장하는 자료형에는 float,double이 있다. 일반적으로 float타입보다는 double타입을 더 많이 사용한다. 이는 높은 정밀도가 필요하기 때문이다. 실수는 오차가 발생하기 때문에 더 높은 정밀도를 가지기 위해서는 double타입을 사용해야 한다.

profile
작성자 개인이 잊을 때마다 보라고 정리한 글

0개의 댓글

관련 채용 정보