[JAVA] 변수(기본형,참조형)

토닉·2021년 8월 13일
0

Java

목록 보기
3/13
post-thumbnail

자바의 정석을 공부하면서 정리한 내용입니다.

변수

하나의 값을 저장할 수 있는 공간

변수란 변수에 해당하는 값을 할당한 메모리의 주소를 의미합니다.

int number = 2;
  • 2라는 값이 메모리 공간에 저장됩니다.
  • 2라는 값에 해당하는 메모리 공간(RAM)을 'number'라는 이름으로 불러올 수 있습니다.

RAM : 메모리 공간

타입 종류

기본형(Primitive type)

  • 비객체 타입으로, Null을 가질 수 없는 형태
  • 정수, 실수, 문자, 논리 리터럴등의 실제 데이터 값을 저장하는 타입
char character = 'c'; // 0 ~ 65535

byte byte1 = 127; // -128 ~ 127
short shortInt = 32767; // -32768 ~ 32767
int integer = 20_0000_0000; // -20억 ~ 약 20억
long longInteger = 800_0000_0000_0000_0000L; // -800경 ~ 800경

float float1 = 3.141592f; // 정밀도는 소숫점 아래 6자리 까지
double double2 = 3.141592789012345; // 정밀도는 소숫점 아래 15자리까지

지역변수를 사용할 때는 반드시 초기화해야 한다.

형변환

  • 값의 타입을 다른 타입으로 변환하는 것
  • boolean을 제외한 7개의 기본형은 서로 형변환이 가능
int fromNum = 65;
char toChar = (char) fromNum;
int toNum = (int) toChar;
System.out.println(toChar);
System.out.println(toNum);
>> A
>> 65

위 타입들을 기본형(Primitive type)이라고 부릅니다.

참조형(Reference type)

  • 참조형은 기본적으로 java.lang.Object를 상속받는다.
  • 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입
  • 원시 타입을 제외한 타입들(문자열, 배열, 열거, 클래스, 인터페이스)
  • 참조형에는 Class, Interface,Arrays가 있다.
    앞서 말한 기본형은 할당된 메모리에 값이 저장됩니다.
int number = 2;
Integer numberObject = 2;

위에서 int는 기본형, Integer는 참조형이지만 서로 같은 역할을 합니다.
int는 number라는 메모리 공간에 2가 들어가지만
Integer는 number라는 메모리 공간에 객체 주소가 담기고 이 객체 안에 2라는 값이 저장됩니다.

위처럼 참조타입(Reference type)은 원시타입(Primitive type)에 비해 많은 메모리를 차지합니다.

기본형을 참조형으로 바꿀 순 없나요?

기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.

Wrapper class

자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문입니다. 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없습니다. 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 합니다.

래퍼 클래스의 구조도 입니다. Object라는 객체로 부터 상속을 받는 구조로 되어있습니다.

기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고 반대로 포장객체에서 기본타입의 값을 얻어내는 과정을 언박싱이라고 합니다.

public class Wrapper_Ex {
    public static void main(String[] args)  {
        Integer num = new Integer(17); // 박싱
        int n = num.intValue(); //언박싱
        System.out.println(n);
    }
}

직접 박싱과 언박싱을 하는 방법도 있지만 자동으로 박싱, 언박싱을 해주기도 합니다.

public class Wrapper_Ex {
    public static void main(String[] args)  {
        Integer num = 17; // 자동 박싱
        int n = num; //자동 언박싱
        System.out.println(n);
    }
}

wrapper class는 왜 사용하나요?

기본 자료형을 클래스처럼 다루고 싶을 때 사용합니다.
다시 말해 클래스의 장점을 사용하고 싶을 때 사용합니다.

장점

  • null값이 가능하다.
  • <> 안에 들어가는 Generics에도 사용이 가능하다.
  • Object의 메서드를 사용할 수 있다.

Generics란?
ArrayList, list, HashMap 같은 컬렉션 객체에서 어떤 타입을 사용할 지 명시해주는 기능

profile
우아한테크코스 4기 교육생

0개의 댓글